Указанный модуль "WebAdministration" не был загружен (Windows 2003, IIS 6)

Я пытаюсь запустить некоторые сценарии администрирования 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

Я проверил, какие модули / оснастки доступны - вот результат -

Get-Module -ListAvailable

Result:
    BitsTransfer

Get-PSSnapIn

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

Пожалуйста, объясните, что мне делать для запуска сценариев администрирования IIS.

2 ответа

Ниже ссылка говорит, что Powershell SnapIn недоступен для IIS 6.0:

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

WMI - это опция для администрирования IIS 6.0.
Но WMI не вариант для меня, как только мы будем обновляться до IIS 7.5

В IIS6 на платформе Windows 2k3 я предлагаю вам попробовать получить доступ к IIS через старого поставщика WMI ("Microsoftiisv2") или поставщика ADSI, так как оба доступны из PowerShell.

Ни оснастки, ни модуль WebAdministration не доступны для IIS 6.0, поэтому мы можем получить доступ к метабазе IIS6 из PowerShell, используя либо

Для IIS7.0 мы можем "импортировать модуль WebAdministration".

Например, мне пришлось установить физический путь для виртуального каталога для IIS6, поэтому я использовал скрипт vbs,iisvdir, который поставляется вместе с IIS6 в c:/Windows/System32 .

Копирование фрагмента кода

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         
}

Дайте мне знать, если это поможет вам.

Вот полезная информация об использовании интерфейса WMI с IIS 6:

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

Он также указывает на документацию 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
}
Другие вопросы по тегам