【发布时间】:2010-12-27 19:25:15
【问题描述】:
我有一个 PowerShell 脚本,用于在 IIS 中配置网站和 Web 应用程序设置。所以我使用 WebAdministration 管理单元中的 cmdlet。但是这个脚本需要在 Windows 2008、Windows 7 和 Windows 2008 R2 上运行。而且我需要它在运行时不会让用户大惊小怪。
问题是 Windows 7 和 Windows 2008 R2 使用 IIS 7.5,它带有作为模块安装的 WebAdministration。在 Windows 2008 上,我们安装了 IIS 7 PowerShell 提供程序,它将 WebAdministration 作为管理单元安装。
因此,在脚本中包含 import-module WebAdministration 会在 IIS 7 上崩溃,但在 IIS 7.5 上可以正常工作,并且包含 add-pssnapin WebAdministration 在 IIS 7.5 上会崩溃但可以正常工作在 IIS 7 上很好。
所以我们的解决方法是让管理员在运行脚本之前使用适合环境的命令手动加载 WebAdministration。但这并不是最优的,因为很容易忘记哪个命令在哪个环境中起作用。我们可以创建两个不同的脚本,但这会给开发带来维护问题。
有人解决了这个问题吗?有谁知道如何检查环境,然后从 PS 脚本中调用适当的 cmdlet?
--- 答案(针对我的情况)----
解决方案是代码和预配置控制台的组合。 IIS 7 PoSH 提供程序包含一个桌面快捷方式,可启动加载了 WebAdministration 的 PoSH 控制台。结合以下功能使我的脚本在所有三个系统上都像魅力一样运行。
Function Load-WebAdmin {
$webAdminModule = get-module -ListAvailable
| ? { $_.Name -eq "webadministration" }
If ($webAdminModule -ne $null) {
import-module WebAdministration
}
}
【问题讨论】:
标签: iis powershell