Iis-7

在 IIS 7.0 的電腦範圍內編輯 .NET 4.0 機器密鑰設置

  • September 29, 2010

我正在編寫一個實施計劃,其中涉及在執行 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 在我能看到的任何地方都沒有 Change .NET Framework Version 命令。因此,除了手動編輯之外,我看不到任何更改 .NET 4.0 機器密鑰設置的方法C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

所以兩個問題

  1. IIS Manager 7.0 中是否有與 IIS Manager 7.5 命令“更改 .NET Framework 版本”等效的命令?
  2. 是否有任何其他方法可以在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config不手動編輯 IIS 7.0 機器上的文件的情況下設置機器密鑰設置?

看起來您需要此修補程序才能在 IIS 管理器 7.0 中顯示“更改 .NET Framework 版本”

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

我仍然很想知道是否有任何其他方法可以在不手動編輯 web.config 的情況下設置 MachineKey。

應該可以編寫這樣一個過程的腳本,我可能會從 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 支持來檢查或更新您喜歡的文件的任何部分

引用自:https://serverfault.com/questions/185623