PowerShell: Загрузите WebAdministration в ps1 сценарии и на IIS 7 и на IIS 7.5

У меня есть сценарий PowerShell, который настраивает веб-сайт и настройки веб-приложения в IIS. Таким образом, я использую cmdlets в снимке 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, и включая добавляют-pssnapin аварийные завершения WebAdministration на IIS 7.5, но хорошо работает на IIS 7.

Таким образом, наше обходное решение должно заставить администраторов загрузить WebAdministration вручную соответствующей командой для среды прежде, чем запустить скрипт. Но это не оптимально, поскольку легко забыть, какая команда работает в который среда. Мы могли создать два различных сценария, но это создает проблему обслуживания для разработки.

Кто-либо решил эту проблему? Кто-либо знает, как проверить среду и затем назвать соответствующий cmdlet из сценария PS?

---ОТВЕТ (для моей ситуации)----

Решением является комбинация кода и предварительно сконфигурированной консоли. Поставщик IIS 7 PoSH включает настольный ярлык, который запускает консоль PoSH с загруженным WebAdministration. Это объединилось со следующей функцией, делают мой сценарий выполненным как очарование во всех трех системах.

Function Load-WebAdmin {
  $webAdminModule = get-module -ListAvailable 
                                        | ? { $_.Name -eq "webadministration" }
  If ($webAdminModule -ne $null) {
    import-module WebAdministration
  }
}
23
задан SteveC 12 December 2011 в 16:28
поделиться

2 ответа

Можно ли отловить ошибку от одного или другого и сделать наоборот. Не держите под рукой мою оболочку, но что-то вроде:

$succeeded = import-module WebAdministration
if (($succeeded -ne $null) -and ($succeeded.GetType() -eq [System.Exception]) {
  #Could not import, trying to snapin
  add-pssnapin WebAdministration
}

На самом деле подумайте об этом еще немного ...

$hasSnapin = get-pssnapin | Select { $_.Name.toLower().Trim() = "webadministration" }
if ($hasSnapin -ne $null) {
  add-pssnapin WebAdministration
} else {
  import-module WebAdministration
}

По первому, я знаю, что проверку типа ошибки, вероятно, нужно будет изменить. Что касается текущей работы, то это можно сделать на C #, посмотрев в реестре загруженные оснастки или версию IIS, установленную на машине, и затем использовать соответствующий метод.

11
ответ дан 29 November 2019 в 01:35
поделиться

If you want to create "pre-configured" PowerShell sessions, look into PowerShell console files e.g.:

man Export-Console -full

You can create one for use on Win7 and Server 2008 R2 and another for use on Server08.

0
ответ дан 29 November 2019 в 01:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: