我有一个PowerShell脚本,用于配置IIS中的网站和Web应用程序设置。因此,我使用WebAdministration快照中的cmdlet。但是,这个脚本需要在Windows 2008、Windows 7和Windows 2008 R2上运行。而且我需要它在用户最少的干扰下运行。
问题是,Windows 7和Windows 2008 R2使用随附WebAdministration模块的IIS 7.5。在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控制台。再加上以下函数,让我的脚本在所有三个系统上都能完美运行。
问题是,Windows 7和Windows 2008 R2使用随附WebAdministration模块的IIS 7.5。在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
}
}