Я пытаюсь установить Оснастка Windows PowerShell для IIS 7.0 на сервере под управлением server 2008 с установленным пакетом обновления 2, поэтому я могу использовать WebAdministration
snappin.
При установке я столкнулся с ошибкой
Другая версия этого продукта уже установлена. Установка этой версии не может быть продолжена. Чтобы настроить или удалить существующую версию этого продукта.
Ни Get-PSSnapin, ни Get-Module -ListAvailable не показывают WebAdministration
, но у меня есть IIsProviderSnapIn
перечисленные. Кроме того, сценарий предоставлен как ответ на Администрирование IIS с помощью PowerShell 2 и модулей в Windows 2008 R1 возвращает False.
Это старая версия WebAdministration
?
Это указано в разделе «Программы и компоненты» как «Поставщик Microsoft Windows PowerShell для IIS 7.0»? и если да, могу ли я безопасно удалить его и установить оснастку PowerShell по исходной ссылке?
(Или, как вариант, могу ли я использовать IIsProviderSnapIn для получения списка всех запущенных в данный момент сайтов, как я бы сделал с Get-Website
в WebAdministration
модуль?)
Хотя я все еще не уверен, что именно IIsProviderSnapIn
оснастка сравнивается с WebAdministration
, Я получил модифицированную версию ответа на https://stackoverflow.com/questions/1924217/powershell-load-webadministration-in-ps1-script-on-both-iis-7-and-iis-7-5
который загружается в WebAdministration
оснастка или модуль, если они доступны, в противном случае используется IIsProviderSnapIn
.
$iisVersion = Get-ItemProperty "HKLM:\software\microsoft\InetStp"
$useIISProviderSnappin = $False
if ($iisVersion.MajorVersion -eq 7)
{
if ($iisVersion.MinorVersion -ge 5)
{
Import-Module WebAdministration
}
else
{
if(Get-PSSnapIn -Registered | Where {$_.Name -eq "WebAdministration"})
{
if (-not (Get-PSSnapIn | Where {$_.Name -eq "WebAdministration"}))
{
Add-PSSnapIn WebAdministration
}
}
elseif(Get-PSSnapIn -Registered | Where {$_.Name -eq "IIsProviderSnapIn"})
{
#older versions of server 2008 don't have the webadministration module!
if (-not (Get-PSSnapIn | Where {$_.Name -eq "IIsProviderSnapIn"}))
{
Add-PSSnapIn IIsProviderSnapIn
}
$useIISProviderSnappin = $True
}
else
{
throw "Unable to import any suitable modules... :( "
}
}
}
Function Get-IISWebsite()
{
if($useIISProviderSnappin)
{
return dir iis:\sites
}
else
{
return Get-Website
}
}