Windows-Server-2008

在 Windows 2008 R1 上使用 PowerShell 2 和模組進行 IIS 管理

  • November 15, 2010

我有一個 PowerShell 2 腳本來自動向 IIS7 註冊託管模組。我使用 PowerShell 2import-module webadministration而不是管理單元。

安裝 PowerShell 2 後,是否可以在 Window Server 2008 R1 上安裝 IIS7 Web 管理模組(而不是管理單元)?如果是這樣,怎麼做?

這將有利於簡化我的腳本,否則,我將需要嘗試針對兩個不同的伺服器平台。

不幸的是,不可能在 2008 和 2008R2 上將 IIS 提供程序載入為相同的東西。在 2008 中,IIS 提供程序僅作為管理單元提供,而在 2008R2 中,它僅作為模組提供。

通過一些編碼,您實際上可以確定要使用哪個,並根據需要在腳本中動態載入模組或管理單元。當我遇到類似問題時,我從http://forums.iis.net/t/1166784.aspx獲取了這段程式碼。

$ModuleName = "WebAdministration"
$ModuleLoaded = $false
$LoadAsSnapin = $false

if ($PSVersionTable.PSVersion.Major -ge 2) {
   if ((Get-Module -ListAvailable | ForEach-Object {$_.Name}) -contains $ModuleName) {
       Import-Module $ModuleName
       if ((Get-Module | ForEach-Object {$_.Name}) -contains $ModuleName) {
           $ModuleLoaded = $true
       } else {
           $LoadAsSnapin = $true
       }
   } elseif ((Get-Module | ForEach-Object {$_.Name}) -contains $ModuleName) {
       $ModuleLoaded = $true
   } else {
       $LoadAsSnapin = $true
   }
} else {
   $LoadAsSnapin = $true
}

if ($LoadAsSnapin) {
   if ((Get-PSSnapin -Registered | ForEach-Object {$_.Name}) -contains $ModuleName) {
       Add-PSSnapin $ModuleName
       if ((Get-PSSnapin | ForEach-Object {$_.Name}) -contains $ModuleName) {
           $ModuleLoaded = $true
       }
   } elseif ((Get-PSSnapin | ForEach-Object {$_.Name}) -contains $ModuleName) {
       $ModuleLoaded = $true
   }
}

在嘗試對 IIS 提供程序進行任何操作之前,請檢查以確保這$ModuleLoaded是真的,您應該一切順利。

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