Указанный модуль "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
}