在IIS 7中克隆/复制/复制现有应用程序池

Joh*_*ick 5 c# iis

在PowerShell中,可以将现有IIS 7应用程序池克隆到新的应用程序池,从而保留新池中的所有源池设置.像这样...

import-module webadministration
copy IIS:\AppPools\AppPoolTemplate IIS:\AppPools\NewAppPool -force
Run Code Online (Sandbox Code Playgroud)

现在我想在C#中使用Microsoft.Web.Administration命名空间中的类来做同样的事情.我浏览了命名空间,但我找不到一种方法可以轻松完成.我可以调用MemberwiseClone方法来创建现有应用程序池的浅表副本,但我不知道是否会复制所有原始应用程序池属性.

有人可以帮忙吗?

Joh*_*ick 3

到目前为止,我只找到一种在 C# 中复制应用程序池的方法:

\n\n
    private void creationizeAppPoolOldSchool(string strFullName)\n    {\n        RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); \n        Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); \n        runspace.Open(); \n        RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);\n        scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted");\n        scriptInvoker.Invoke("import-module webadministration");\n        string str = "copy IIS:\\\\AppPools\\\\_JANGO_FETT IIS:\\\\AppPools\\\\" + strFullName + " \xe2\x80\x93force";\n        scriptInvoker.Invoke(str);\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为我真正的需要是在所有新应用程序池上拥有一组预定义设置,所以我实际上放弃了复制现有模板池,而是使用Microsoft.Web.Administration. 尽管这不是最初的问题,但我还是分享它,因为浏览这篇文章的人可能也对此感兴趣:

\n\n
    public static void CreateCoCPITAppPool(string strName)\n    {\n        using (ServerManager serverManager = new ServerManager())\n        {\n            ApplicationPool newPool = serverManager.ApplicationPools.Add(strName);\n            newPool.ManagedRuntimeVersion = "v4.0";\n            newPool.AutoStart = true;\n            newPool.ProcessModel.UserName = "username";\n            newPool.ProcessModel.Password = "password";\n            newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;\n            newPool.Recycling.PeriodicRestart.Time = TimeSpan.Zero;\n            newPool.ProcessModel.IdleTimeout = TimeSpan.FromMinutes(10000); // .Zero;\n            newPool.ProcessModel.ShutdownTimeLimit = TimeSpan.FromSeconds(3600);\n            newPool.Failure.RapidFailProtection = false;\n            serverManager.CommitChanges();\n            IDictionary<string, string> attr = newPool.Recycling.RawAttributes;\n            foreach (KeyValuePair<String, String> entry in attr)\n            {\n                // do something with entry.Value or entry.Key\n                Console.WriteLine(entry.Key + " = " + entry.Value);\n            }\n            ConfigurationAttributeCollection coll = newPool.Recycling.Attributes;\n            foreach (ConfigurationAttribute x in coll)\n            {\n                Console.WriteLine(x.Name + " = " + x.Value);\n            }\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n