Powershell: невозможно скрыть ошибку «Доступ запрещен» в «Удалить элемент» - PullRequest
0 голосов
/ 17 апреля 2020

Я бы хотел сохранить в секрете инструкцию Remove-Item, исключение или нет. Я запускаю команду ниже в сценарии для удаления сертификата:

Remove-Item $store\$thumbprint

Если я запускаю сценарий от имени локального администратора, хорошо ... он хранит молчание и файл удаляется. Однако, если я запускаю его как непривилегированный пользователь, я получаю ошибку «Доступ запрещен», как и ожидалось, но я бы хотел сохранить это в любом случае.

Я пробовал следующее:

$output = (Remove-Item $store\$thumbprint)
# or...
try{Remove-Item $store\$thumbprint} catch{}
# or...
Remove-Item $store\$thumbprint -ErrorAction SilentlyContinue

Но я всегда получаю сообщение об ошибке / исключении на консоли.

1 Ответ

0 голосов
/ 20 апреля 2020

По умолчанию, Remove-Item генерируется не прекращающаяся ошибка , которая добавляет ошибку в переменную $Error без исключения. Чтобы увидеть, что Windows PowerShell будет делать при возникновении непрекращающейся ошибки, посмотрите значение $ErrorActionPreference переменной (ее значение по умолчанию Continue).

Access to the path '…' is denied является примером такой нескончаемой ошибки, поэтому вы можете использовать параметр ErrorAction, который переопределяет значение $ErrorActionPreference переменной для текущей команды :

Remove-Item $store\$thumbprint -ErrorAction SilentlyContinue

С другой стороны, $ErrorActionPreference и параметр ErrorAction не влияют на то, как PowerShell реагирует на завершающие ошибки , которые останавливают обработку командлета. Поэтому, если мы не уверены, заканчивается ли ошибка или нет, то можно безопасно обработать любую ошибку для блоков Try-Catch-Finally, используя -ErrorAction Stop следующим образом:

try {
    Remove-Item $store\$thumbprint -ErrorAction Stop
} catch {
    ### A Catch block can include commands for tracking the error
    ###         or for recovering the expected flow of the script
}
...