我正在编写一个实现计划,涉及在运行IIS 7.0的服务器上更改.NET 4.0的ASP.NET计算机密钥设置。
我更喜欢通过IISpipe理器更改设置。
在我的本地机器上运行IIS 7.5很容易。 进入IISpipe理器,在右边的Actions窗格中是一个命令Change .NET Framework Version。 我可以在.NET 2.0和.NET 4.0之间进行更改,这会更改从IISpipe理器主页更改机器密钥时正在编辑的计算机级别web.config。
但是,IIS 7.0在任何地方都没有“更改.NET Framework版本”命令。 因此,我不能看到.NET 4.0机器密钥设置被改变,除了手动编辑C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
所以有两个问题
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config没有任何其他方式来设置机器的关键设置,而无需手动编辑IIS 7.0机器上的文件? 应该可以编写这样一个过程,我可能会从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的文件夹数组。
在每个这些searchweb.config文件中:
$configFiles = $vdirs | Foreach-Object -Process { Get-ChildItem -Path $_ -Recurse -Filter "web.config" | Foreach-Object -Process { $_.FullName } }
这是web.config文件的完整path名称的数组。 此时,您可以使用PowerShell的XML支持来检查或更新您喜欢的文件的任何部分
看起来像你需要此修补程序,使“IIS .NET Framework版本”显示在IISpipe理器7.0中
http://support.microsoft.com/kb/958854
我仍然渴望知道是否有其他方法来设置MachineKey而无需手动编辑web.config。