1

VS2010、PowerShell v2.0、Windows Server 2008 R2 Standard を使用して、Web アプリケーション (IIS 7) 用の展開スクリプト ps1 を作成します。

Powershell を使用して IIS 7 (Web サイト、appPools、virtualDirs など) をプログラムで管理したいと考えています。

Powershell を使用して IIS を管理するいくつかの方法について混乱しています。

それについてどの方法が推奨されますか?

1)。Microsoft.Web.Administration.dll の使用

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")

2)。OS バージョンまたは IIS バージョン (¿?) に応じて、Import-Module と Add-PSSnapin を使用する

OS のバージョンを検出します。

if ([System.Version] (Get-ItemProperty -path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").CurrentVersion -ge [System.Version] "6.1") { Import-Module WebAdministration } else { Add-PSSnapin WebAdministration }

IIS のバージョンを検出する

$iisVersion = Get-ItemProperty "HKLM:\software\microsoft\InetStp";
if ($iisVersion.MajorVersion -eq 7)
{
    if ($iisVersion.MinorVersion -ge 5)
    {
        Import-Module WebAdministration;
    }           
    else
    {
        if (-not (Get-PSSnapIn | Where {$_.Name -eq "WebAdministration";})) {
            Add-PSSnapIn WebAdministration;
        }
    }
}

モジュールが読み込まれ、Snapin として読み込まれます。

$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
    }
}

参考文献:
http://forums.iis.net/t/1166784.aspx/1

PowerShell: IIS 7 と IIS 7.5 の両方で ps1 スクリプトに WebAdministration をロードする

4

1 に答える 1

1

Server 2008 R2 および Powershell V2 以降を使用していると言うので、Import-Module が推奨される方法です。モジュールはスナップインよりも強力で、より多くの機能を追加します。ただし、最大の違いは、モジュールを登録する (レジストリに追加する) 必要がないことです。

スナップインは、モジュールをサポートしていない Powershell V1 のレガシー機能です。Server 2008 (元のレシピ) にはすぐに使用できる V2 がなく、IIS、ActiveDirectory、Exchange などのスナップインを使用していました。

Server 2008 R2 には Powershell V2 が含まれているため、モジュールを利用できます。

要約すると、次のようになります。

if (YourSystems are all Server 2008 R2) {
    Import the module and ignore the rest.
} elseif (One or more of the servers being managed is still on 2008 (original)) {
    Use the snapin.
}
于 2013-07-15T02:03:46.870 に答える