在 IIS 7.0 中以计算机级别编辑 .NET 4.0 计算机密钥设置

在 IIS 7.0 中以计算机级别编辑 .NET 4.0 计算机密钥设置

我正在编写一个实施计划,涉及更改运行 IIS 7.0 的服务器上的 .NET 4.0 的 ASP.NET 机器密钥设置。

我希望通过 IIS 管理器更改设置。

在我的本地计算机上运行 IIS 7.5,这很容易。进入 IIS 管理器,在右侧的操作窗格中有一个命令“更改 .NET Framework 版本”。我可以在 .NET 2.0 和 .NET 4.0 之间更改它,当我从 IIS 管理器主页更改计算机密钥时,这会更改我正在编辑的计算机级别 web.config。

但是,我看不到 IIS 7.0 的任何地方都有“更改 .NET Framework 版本”命令。因此,除了手动编辑之外,我看不到任何更改 .NET 4.0 计算机密钥设置的方法C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

所以有两个问题

  1. IIS 管理器 7.0 中是否有与 IIS 管理器 7.5 命令“更改 .NET Framework 版本”等效的命令?
  2. 有没有其他方法可以设置机器密钥设置,C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config而无需在 IIS 7.0 机器上手动编辑文件?

答案1

应该可以编写这样的过程脚本,我可能会从 PSH 开始,因为它具有内置的 XML 支持和对 .NET 的访问(如果指定了新密钥,则对于生成新密钥很有用)。

但首先要获取要启动的虚拟目录列表。这通常可以通过以下方式轻松完成appcmd

# Use array constructor to force an array, event with only one result
# format: VDIR "name" (physicalPath:path)
$vdirs = @(C:\Windows\system32\inetsrv\appcmd.exe list vdir)
$vdirs = $vdirs | Where-Object { -not [string]::IsNullOrEmpty($_) } | Foreach-Object -Process {
  if ($_ -match "physicalPath:([^)]+)\)$") {
   $matches[1]
  }
}

此时$vdirs是映射到 IIS 的文件夹数组。

在每个搜索web.config文件中:

$configFiles = $vdirs | Foreach-Object -Process {
  Get-ChildItem -Path $_ -Recurse -Filter "web.config" | Foreach-Object -Process { $_.FullName }
}

这是文件完整路径名的数组web.config。此时,您可以使用 PowerShell 的 XML 支持来检查或更新文件的任何部分

答案2

看起来您需要此修补程序才能使“更改 .NET Framework 版本”显示在 IIS Manager 7.0 中

http://support.microsoft.com/kb/958854

我仍然想知道是否还有其他方法可以设置 MachineKey,而无需手动编辑 web.config。

相关内容