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