У меня есть PowerShell script, который настраивает параметры веб-сайта и веб-приложения в IIS. Поэтому я использую командлеты в оснастке WebAdministration. Но этот script должен запускаться в Windows 2008, Windows 7 и Windows 2008 R2. И мне нужно, чтобы он работал с минимальным шумом от пользователя.
Проблема в том, что Windows 7 и Windows 2008 R2 используют IIS 7.5, который поставляется с установленной администрацией WebAdministration в качестве модуля. В Windows 2008 мы установили поставщика IIS 7 PowerShell, который устанавливает WebAdministration как оснастку.
Таким образом, включение импорта-модуля WebAdministration в script взорвется на IIS 7, но отлично работает на IIS 7.5 и включает в себя add-pssnapin WebAdministration, что приводит к взрыву в IIS 7.5 но отлично работает на IIS 7.
Таким образом, наше обходное решение заключается в том, чтобы администраторы загрузили WebAdministration вручную с помощью соответствующей команды для среды перед запуском script. Но это не оптимально, так как легко забыть, какая команда работает в какой среде. Мы могли бы создать два разных сценария, но это создает проблему обслуживания для разработки.
Кто-нибудь решил эту проблему? Кто-нибудь знает, как проверить среду, а затем вызвать соответствующий командлет из PS script?
--- ОТВЕТ (для моей ситуации) ----
Решение представляет собой комбинацию кода и предварительно сконфигурированной консоли. Поставщик PoSH IIS 7 включает ярлык на рабочем столе, который запускает консоль PoSH с загрузкой WebAdministration. Это в сочетании со следующей функцией делает мой script запущенным как шарм для всех трех систем.
Function Load-WebAdmin {
$webAdminModule = get-module -ListAvailable
| ? { $_.Name -eq "webadministration" }
If ($webAdminModule -ne $null) {
import-module WebAdministration
}
}