iis - PowerShell:在 IIS 7 和 IIS 7.5 上的 ps1 脚本中加载 WebAdministration

标签 iis powershell

我有一个 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 作为管理单元安装。

所以包括导入模块 WebAdministration 脚本在 IIS 7 上崩溃,但在 IIS 7.5 上运行良好,包括 add-pssnapin 网页管理 在 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
  }
}

最佳答案

这可能有点晚了,但我们是这样做的:

$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;
        }
    }
}

关于iis - PowerShell:在 IIS 7 和 IIS 7.5 上的 ps1 脚本中加载 WebAdministration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1924217/

相关文章:

powershell - 电源外壳。创建一个类文件来保存自定义对象?

Powershell "special"开关参数

powershell - 验证长度 Powershell

asp.net - ASP Response.Flush() 刷新部分数据

iis - 如何在 Azure 中启用 cs-host IIS 日志记录?

asp.net - 在安装 ASP.NET 4.0 后的 IIS6.0 中,“编辑配置”按钮被禁用

用于重命名文件的 Powershell 脚本

iis - 该服务此时无法接受控制消息

iis - 如何使用 appcmd.exe 显示 Web 应用程序的物理路径?

windows - hostname.exe 和 $env :ComputerName? 输出的区别