在 Windows 2008 R1 上使用 PowerShell 2 和模块进行 IIS 管理

在 Windows 2008 R1 上使用 PowerShell 2 和模块进行 IIS 管理

我有一个 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属实,然后就可以开始了。

相关内容