Проверьте, существует ли элемент без ошибки, если он не существует - PullRequest
30 голосов
/ 06 декабря 2010

Я хотел бы использовать PowerShell, чтобы проверить, существует ли веб-приложение IIS (или, возможно, какой-то другой элемент). Я могу сделать это с помощью Get-Item, но он сообщает об ошибке, если элемент не существует, что вводит в заблуждение пользователя, выполняющего скрипт - похоже, что-то пошло не так, когда на самом деле все в порядке.

Как мне сделать это без ошибки?

Ответы [ 2 ]

58 голосов
/ 06 декабря 2010

Командлет Test-Path специально разработан для этого, он определяет, существуют ли элементы пути. Возвращает логическое значение и не генерирует ошибку.

Командлет Get-Item (и аналогичный) также можно использовать, но не напрямую. Один способ уже предложен: используйте -ErrorAction SilentlyContinue. Может быть важно знать, что на самом деле это все еще вызывает ошибку; это просто не показывает это. Проверьте набор ошибок $Error после команды, ошибка есть.


Только для информации

Есть забавный способ избежать этой ошибки (он также работает с некоторыми другими командлетами, такими как Get-Process, у которых нет альтернативы Test-Path). Предположим, мы собираемся проверить наличие элемента «MyApp.exe» (или процесса «MyProcess»). Затем эти команды ничего не возвращают для отсутствующих целей и в то же время не генерируют ошибок:

Get-Item "[M]yApp.exe"
Get-Process "[M]yProcess"

Эти командлеты не генерируют ошибки для подстановочных знаков. И мы используем эти забавные символы подстановки, которые на самом деле соответствуют отдельным элементам.

31 голосов
/ 06 декабря 2010

Используйте команду ... get-item blah -ErrorAction SilentlyContinue

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...