我有一个PowerShell脚本,用于配置IIS中的网站和Web应用程序设置。因此,我使用WebAdministration管理单元中的cmdlet。但是,此脚本需要在Windows 2008,Windows 7和Windows 2008 R2上运行。我需要它从用户那里以最小的麻烦运行。PowerShell:在IIS 7和IIS 7.5上的ps1脚本中加载Web管理
问题是,Windows 7和Windows 2008 R2使用随WebAdministration一起安装的IIS 7.5作为模块。在Windows 2008,我们已经安装了它安装WebAdministration作为一个单元的IIS 7 PowerShell提供。
所以包括进口模块WebAdministration脚本炸毁在IIS 7,但在IIS 7.5中工作正常,包括添加 - pssnapin Web管理在IIS 7.5上爆炸,但在IIS 7上正常工作。
因此,我们的解决方法是让管理员在运行脚本之前手动加载适用于环境的WebAdministration。但这并不是最佳的,因为很容易忘记哪个命令适用于哪种环境。我们可以创建两个不同的脚本,但这会为开发创建维护问题。
有没有人解决过这个问题?有谁知道如何检查环境,然后从PS脚本中调用相应的cmdlet?
--- ANSWER(我的情况)----
的解决方案是对代码和预先配置的控制台的组合。 IIS 7 PoSH提供程序包含一个桌面快捷方式,可启动加载Web管理的PoSH控制台。结合以下功能,我的脚本在所有三个系统上都像魅力一样运行。
Function Load-WebAdmin {
$webAdminModule = get-module -ListAvailable
| ? { $_.Name -eq "webadministration" }
If ($webAdminModule -ne $null) {
import-module WebAdministration
}
}
这样做的唯一问题是,尽管** import-module **可以多次运行,即使模块已经加载也不会引发错误,但是如果snapin是snap-in,** add-pssnapin **会引发错误已经加载。 感谢您寻求可行解决方案的灵感。 – 2009-12-21 15:06:34
可以通过第二次调用ps-snapin来修复它是否已经在当前会话中加载 – GrayWizardx 2009-12-21 19:03:35
1.为什么你的第二个块使用'Select'而不是'Where'? “$ hasSnapin”似乎是一个很差的名字。或者应该有一些将列表变回布尔值的名称,或者该名称的起始处应该有'has'。 – jpmc26 2016-11-21 21:35:12