我使用VS2010,PowerShell v2.0,Windows Server 2008 R2 Standard为Web应用程序(IIS 7)创建部署脚本ps1。
我想使用Powershell以编程方式管理IIS 7(网站,appPools,virtualDirs等)。
我对使用Powershell管理IIS的几种方法感到困惑。
关于它的推荐方法是什么?
1)。使用Microsoft.Web.Administration.dll
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
2)。使用Import-Module vs Add-PSSnapin,根据操作系统版本或IIS版本(¿?)
检测操作系统版本:
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: Load WebAdministration in ps1 script on both IIS 7 and IIS 7.5
答案 0 :(得分:1)
由于您说您使用的是Server 2008 R2和Powershell V2或更高版本,因此Import-Module是首选方法。模块比snapins更强大,并添加了更多功能。但最大的区别是模块不需要注册(添加到注册表中)。
Snapins是Powershell V1的一项遗留功能,它不支持模块。 Server 2008(Orignal Recipe)没有开箱即用的V2,仍然使用snapins进行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.
}