Ответ 1
Используйте команду... get-item blah -ErrorAction SilentlyContinue
Я хочу использовать PowerShell, чтобы проверить, существует ли веб-приложение IIS (или, возможно, какой-либо другой элемент). Я могу сделать это с помощью Get-Item
, но он сообщает об ошибке, если элемент не существует, что вводит в заблуждение пользователя, запускающего script - похоже, что что-то пошло не так, когда на самом деле все в порядке.
Как это сделать без ошибок?
Используйте команду... get-item blah -ErrorAction SilentlyContinue
Командлет Test-Path
специально разработан для этого, он определяет, существуют ли элементы пути. Он возвращает логическое значение и не генерирует ошибку.
Также может использоваться командлет Get-Item
(и аналогичный), но не напрямую. Один из способов уже предложен: используйте -ErrorAction SilentlyContinue
. Возможно, важно знать, что на самом деле он все еще генерирует ошибку; он просто не показывает это. Проверьте коллекцию ошибок $Error
после команды, там будет ошибка.
Только для информации
Есть забавный способ избежать этой ошибки (он также работает с некоторыми другими командлетами, такими как Get-Process
, которые не имеют альтернативы Test-Path
). Предположим, что мы собираемся проверить наличие элемента "MyApp.exe" (или процесс "MyProcess" ). Затем эти команды ничего не возвращают по отсутствующим объектам и в то же время не генерируют ошибок:
Get-Item "[M]yApp.exe"
Get-Process "[M]yProcess"
Эти командлеты не генерируют ошибок для подстановочных целей. И мы используем эти забавные подстановочные знаки, которые фактически соответствуют отдельным элементам.