我正在编写一个实施计划,涉及更改运行 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
所以有两个问题
- IIS 管理器 7.0 中是否有与 IIS 管理器 7.5 命令“更改 .NET Framework 版本”等效的命令?
- 有没有其他方法可以设置机器密钥设置,
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。