在 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 在我能看到的任何地方都沒有 Change .NET Framework Version 命令。因此,除了手動編輯之外,我看不到任何更改 .NET 4.0 機器密鑰設置的方法
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
所以兩個問題
- IIS Manager 7.0 中是否有與 IIS Manager 7.5 命令“更改 .NET Framework 版本”等效的命令?
- 是否有任何其他方法可以在
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 支持來檢查或更新您喜歡的文件的任何部分