以编程方式对服务器列表进行iisreset

时间:2015-11-19 11:02:39

标签: c# iis iis-7

我希望通过具有帐户权限的服务器列表中的C#代码以编程方式执行iisreset。

对于本地计算机来说,这很容易做到,例如,这是一个示例代码:

    // using ...
using System.Diagnostics;

public class YourForm : Form
{
   // ...

   private void yourButton_Click(object sender, EventArgs e)
   {
      Process.Start(@"C:\WINDOWS\system32\iisreset.exe", "/noforce");
   }

   // ...
}

另外:

    using System.ServiceProcess;

using (ServiceController controller = new ServiceController())
{
controller.MachineName = “My local or remote computer name”;
controller.ServiceName = “IIS Service Name”; // i.e “w3svc”

if (controller.Status != ServiceControllerStatus.Running)
{
// Start the service
controller.Start();

Log.Debug(“IIS has been started successfully, now checking again for webservice availability”);

}
else
{
// Stop the service
controller.Stop();

// Start the service
controller.Start();

Log.Debug(“IIS has been restarted successfully”);

}

}

但如何为多个服务器执行此操作。

2 个答案:

答案 0 :(得分:2)

您的第一个代码段应该完美地考虑到不需要提供iisreset命令的完整路径。

实际上,从CMD或Run工具调用IISRESET时,您不需要完整路径。所以,这是同一个电话。

关于用户权限,有两种方法

  1. 您可以将所需用户作为参数传递给Process.Start

    Process.Start(" iisreset"," server1"," admin","管理员密码","域&# 34);

  2. 您可以像在代码中一样调用Process.Start,然后确保使用合适的用户运行您的应用程序

  3. 我在下面试过,它运作得很好

        static void Main(string[] args)
        {            
            string[] servers = LoadServersFromFile(); 
    
            foreach (string server in servers)
            {
                Process.Start("iisreset", server.Trim());
            }            
        }
    
        private static string[] LoadServersFromFile()
        {
            //just listed all servers comma separated in a text file, change this to any other approach fits for your case
            TextReader reader = new StreamReader("Servers.txt");
            return reader.ReadToEnd().Split(',');
        }
    

答案 1 :(得分:1)

您可能需要impersonator来执行上述代码。

我认为impersonator中使用的用户名和密码应该具有该服务器的管理员权限(您可以使用)。

您可能还需要远程访问本机然后执行代码。

帖子hereherehere可能会对您有所帮助。

如果我想到更有用的东西,我会更新这篇文章。

修改

您可以尝试以下步骤:

  1. 使用用于重新启动IIS的代码创建Windows服务
  2. 在需要重置IIS的所有服务器上部署此服务
  3. 关闭此服务
  4. 远程访问此服务(远程访问服务的代码在上面的一个帖子中给出)
  5. 启动和停止服务。这将执行重置IIS的代码。代码为here
  6. 希望这有帮助。