iisreset 以编程方式覆盖服务器列表
iisreset over a list of servers programmatically
我想通过 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”);
}
}
但是如何对多个服务器执行此操作。
您可能需要 impersonator
才能执行上述代码。
我认为 impersonator
中使用的用户名和密码应该具有该服务器的管理员权限(您拥有)。
您可能还需要远程访问机器然后执行您的代码。
posthere, here and 可能对你有帮助。
如果我想到更有用的东西,会更新这个 post。
编辑:
您可以尝试以下步骤:
- 使用重新启动 IIS 的代码创建 windows 服务
- 在所有需要重置 IIS 的服务器上部署此服务
- 保持此服务关闭
- 远程访问此服务(远程访问服务的代码在上面的 post 之一中给出)
- 启动和停止服务。这将执行重置 IIS 的代码。给出了此代码 here
希望对您有所帮助。
考虑到无需提供 iisreset 命令的完整路径,您的第一个代码片段应该可以完美运行。
实际上,从 CMD 或 运行 工具调用 IISRESET 时不需要完整路径。所以,这是同一个调用。
关于用户权限,有2种做法
您可以将所需用户作为参数传递给 Process.Start
Process.Start("iisreset", "server1", "admin", "admin password", "domain");
您可以像在代码中那样调用 Process.Start,然后确保 运行 您的应用程序有合适的用户
我在下面试过,效果很好
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(',');
}
我想通过 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”);
}
}
但是如何对多个服务器执行此操作。
您可能需要 impersonator
才能执行上述代码。
我认为 impersonator
中使用的用户名和密码应该具有该服务器的管理员权限(您拥有)。
您可能还需要远程访问机器然后执行您的代码。
posthere, here and
如果我想到更有用的东西,会更新这个 post。
编辑:
您可以尝试以下步骤:
- 使用重新启动 IIS 的代码创建 windows 服务
- 在所有需要重置 IIS 的服务器上部署此服务
- 保持此服务关闭
- 远程访问此服务(远程访问服务的代码在上面的 post 之一中给出)
- 启动和停止服务。这将执行重置 IIS 的代码。给出了此代码 here
希望对您有所帮助。
考虑到无需提供 iisreset 命令的完整路径,您的第一个代码片段应该可以完美运行。
实际上,从 CMD 或 运行 工具调用 IISRESET 时不需要完整路径。所以,这是同一个调用。
关于用户权限,有2种做法
您可以将所需用户作为参数传递给 Process.Start
Process.Start("iisreset", "server1", "admin", "admin password", "domain");
您可以像在代码中那样调用 Process.Start,然后确保 运行 您的应用程序有合适的用户
我在下面试过,效果很好
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(',');
}