Подтвердить что ты не робот

Проверьте, существует ли элемент без ошибки, если он не существует

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

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

4b9b3361

Ответ 1

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

alt text

Ответ 2

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

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


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

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

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

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