【问题标题】:The specified module 'WebAdministration' was not loaded (Windows 2003, IIS 6)未加载指定的模块“WebAdministration”(Windows 2003、IIS 6)
【发布时间】:2012-08-15 16:32:50
【问题描述】:

我正在尝试在机器上运行一些 IIS 管理脚本 -

OS - Windows 2003(with SP2)
IIS - V6.0
Powershell - V2

但是,当我运行以下命令时,我得到了错误 -

- 导入模块 WebAdministration

  **Error**:  
    Import-Module : The specified module 'WebAdministration' was not loaded because no valid module file was found in any module directory.
    At line:1 char:14 + Import-Module <<<<  WebAdministration
        + CategoryInfo          : ResourceUnavailable: (WebAdministration:String) [Import-Module], FileNotFoundException
    + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

- 添加-PSSnapIn WebAdministration

  **Error:**  
      Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 2.
        At line:1 char:13 + Add-PSSnapIn <<<<  WebAdministration
        + CategoryInfo          : InvalidArgument: (WebAdministration:String) [Add-PSSnapin], PSArgumentException
        + FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand

我检查了哪些模块/snapin 可用 - 这是结果 -

获取模块-ListAvailable

Result:
    BitsTransfer

获取 PSSnapIn

Result:
  Microsoft.PowerShell.Diagnostics
  Microsoft.WSMan.Management  
  Microsoft.PowerShell.Core
  Microsoft.PowerShell.Utility
  Microsoft.PowerShell.Host
  Microsoft.PowerShell.Management
  Microsoft.PowerShell.Security

请指导我应该如何运行 IIS 管理脚本。

【问题讨论】:

  • 任何带有完整源代码示例的最终解决方案?

标签: iis-6 powershell-2.0 windows-2003-webserver


【解决方案1】:

以下链接显示 Powershell SnapIn 不适用于 IIS 6.0:

http://forums.iis.net/p/1156851/1903821.aspx#1903821

WMI 是 IIS 6.0 管理的选项。
但是,一旦我们将升级到 IIS 7.5,WMI 就不是我的选择

【讨论】:

    【解决方案2】:

    在 Windows 2k3 平台上的 IIS6 中,我建议您尝试通过旧的 WMI 提供程序(“Microsoftiisv2”)或 ADSI 提供程序访问 IIS,因为两者都可以从 PowerShell 访问。

    管理单元和 WebAdministration 模块都不适用于 IIS 6.0,因此我们可以使用任一方法从 PowerShell 访问 IIS6 元数据库

    对于IIS7.0,我们可以“导入WebAdministration”模块。

    例如,我必须为 IIS6 的虚拟目录设置物理路径,所以我使用了 c:/Windows/System32 中的 vbs 脚本,iisvdir,它与 IIS6 一起提供。

    复制代码sn-p

    Function resetSiteLocation ($newPath)
    {     
    
    Write-Host "List of Virtual directories for the site Test123 before reset :"
    
    C:\WINDOWS\system32\iisvdir /query Test/Test123
    
    Write-Host "About to reset site location"
    
    C:\WINDOWS\system32\iisvdir /delete Test/Test123/Test1
    
    C:\WINDOWS\system32\iisvdir /create Test/Test123 Test1 C:\projects\Test\Test123\Test1
    
    C:\WINDOWS\system32\iisvdir /delete Test/Test123/Test2
    
    C:\WINDOWS\system32\iisvdir /create Test/Test123 Test2 C:\projects\Test\Test123\Test2
    
    Write-Host "Finished to reset site location"
    
    Write-Host "List of Virtual directories for the site Test123 after reset :"
    
    C:\WINDOWS\system32\iisvdir /query Test/Test123
    
    }
    

    由于您将切换到更高版本的 IIS,您可以在代码中放置一个开关以确定 IIS 版本并采取适当的措施。

    我这样做了:

    Write-Host "Checking Installed IIS version:"
    
    $iisVersion = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\InetStp";
    
    Write-host IIS major version : $iisVersion.MajorVersion
    
    Write-host IIS minor version : $iisVersion.MinorVersion
    
    Write-Host "Finished the check."
    ## IIS inclusion module
    ## Neither snapins nor WebAdministration module is available for IIS 6.0, so we can access IIS6 metabase 
    ## from PowerShell using either old WMI provider ("Microsoftiisv2") or ADSI provider as both are accessible from the PowerShell.
    ## For IIS7.0, we can import WebAdministration module
    
    if (($iisVersion.MajorVersion -eq 7 ) -or ($iisVersion.MajorVersion -ge 7 ))
    {
    Write-host Detected IIS Major Version : $iisVersion.MajorVersion and Minor version : $iisVersion.MinorVersion. Hence importing WebAdministration module.
    Import-Module WebAdministration;
    
    
    Write-Host "About to reset app pool"
    Restart-WebAppPool("Application")
    Write-Host "Finished resetting app pool" 
    resetSiteLocation
    
    Write-Host "About to reset site"
    Restart-WebItem("IIS:\Sites\My application")
    Write-Host "Finished to reset site"
    
    }
    elseif ($iisVersion.MajorVersion -eq 6) 
    {
    Write-host IIS version 6 detected. Hence accessing IIS metabase using old WMI provider 
    
    ##2. Reset App Pool
    Write-Host "About to reset app pool"
    
    Write-Host "Finished resetting app pool" 
    
    ##3. Reset site location
    resetSiteLocation
    
    ##4.Reset site
    Write-Host "About to reset site"
    
    Write-Host "Finished to reset site"    
    }
    else
    {
         Write-host Detected IIS $iisVersion.MajorVersion         
    }
    

    如果对你有帮助,请告诉我。

    【讨论】:

      【解决方案3】:

      这里有一些关于在 IIS 6 中使用 WMI 接口的有用信息:

      http://network-nick.blogspot.com/2015/01/powershell-and-iis-6.html

      他还指出了适用于该环境的 cmdlet 的 Microsoft 文档,此处:

      https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525265(v=vs.90)

      在本文中,他开发并解释了以下 PowerShell 脚本,用于列出服务器的网站及其虚拟目录。我真的试过了,它确实有效。

      $WebSiteID = Get-WmiObject -Namespace "root/MicrosoftIISv2" -Class IIsWebServer | Select-Object -ExpandProperty Name
      
      ForEach ( $Site in $WebSiteID ) {
          $WebSiteName = Get-WmiObject -Namespace "root/MicrosoftIISv2" -Class IIsWebServerSetting | Where-Object { $_.Name -like "$site" } `
                          | Select-Object -Expandproperty ServerComment
      
          write-host "`r`n" $WebSiteName
      
          $AppPath = Get-WmiObject -Namespace "root/MicrosoftIISv2" -Class IIsWebVirtualDirSetting | Where-Object { $_.Name -like "$site/*" } `
                      | select -expandproperty path
      
          $AppPath = $AppPath | select-object -unique | sort-object
          $AppPath
      }
      

      【讨论】:

        猜你喜欢
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 2011-04-15
        相关资源
        最近更新 更多