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 をロードする