使用 Windows 进程备份 IIS 设置



我可以使用以下命令备份IIS的设置

//sites
C:Windowssystem32inetsrvappcmd.exe list site /config /xml > C:Tempiis_config_sites.xml
//apppools
C:Windowssystem32inetsrvappcmd.exe list apppool /config /xml > C:Tempiis_config_apppool.xml

当我从命令提示符运行这些命令时,它工作正常。将创建 XML 文件。但我想通过使用 C# 代码执行此命令来自动化此过程System.Diagnostics.Process.为此,我使用以下代码

using (Process process = new Process())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = @"C:Windowssystem32inetsrvappcmd.exe";
startInfo.Arguments = @"list site /config /xml > C:Tempiis_config_sites.xml";
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
}

但是当我运行这段代码时,没有任何反应。不会创建 XML 文件。但是没有错误,也没有警告。执行此命令的程序在具有Windows Server 2019和IIS 10的管理员帐户下运行。我也尝试添加WorkingDirectory,但这也没有帮助。

我使用Process使用 WinRar 生成一个压缩文件夹,这也很好用。

因此,如果有人知道可能是什么问题,那就太好了。

问题是您在参数中使用了">",这是一个 CMD 命令,指示它将命令的输出(在这种情况下appcmd.exe)写入指定的文件路径(C:Tempiis_config_sites.xml)。 这当然不能作为appcmd.exe的参数.

您有两种选择:

  1. 以以下方式使用它,这相当于在 CMD 中执行命令:

    startInfo.FileName = @"C:Windowssystem32cmd.exe";
    startInfo.Arguments = "/c "C:\Windows\system32\inetsrv\appcmd.exe" list site /config /xml > C:\Temp\iis_config_sites.xml";
    

    请注意,/c是 cmd 的命令行选项.exe用于将其余参数作为"命令"执行,就像在命令行窗口中输入它一样。其余的只是您正常在cmd中键入的相同命令。

  2. 使用 appcmd 提供的另一个选项.exe备份 IIS,以避免将输出重定向到文件。该命令appcmd.exe add backup %backupname%。此命令添加 IIS 配置的备份,稍后您可以通过restore backup $backupname%将其还原。

最新更新