我有一个 PowerShell 2 脚本,用于自动向 IIS7 注册托管模块。我使用 PowerShell 2import-module webadministration
而不是管理单元。
安装 PowerShell 2 后,是否可以在 Window Server 2008 R1 上安装 IIS7 Web 管理模块(而不是管理单元)?如果可以,该怎么做?
这有利于简化我的脚本,否则,我将需要尝试针对两个不同的服务器平台。
答案1
不幸的是,无法在 2008 和 2008R2 上以相同的方式加载 IIS 提供程序。在 2008 上,IIS 提供程序仅作为 snapin 提供,而在 2008R2 上,它仅作为模块提供。
只需编写一点代码,您就可以确定要使用哪个,并根据需要在脚本中动态加载模块或 snapin。我从以下代码中获取了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
属实,然后就可以开始了。