Почему PowerShell ISE запрашивает подтверждение, когда исполняемый файл выводит на stderr? - PullRequest
0 голосов
/ 27 апреля 2018

Я отлаживаю скрипт powershell в ISE и там вызываю утилиту sysinternals pskill.

По какой-то причине PowerShell открывает следующий диалог:

enter image description here

Почему? Как я могу настроить его, чтобы он не отображал диалоговое окно, а просто запускал сценарий, как я намереваюсь?

РЕДАКТИРОВАТЬ 1

Проблема воспроизводится очень легко:

  1. Выполнить ise -noprofile
  2. Запуск командной строки ise pskill -h

Вот результат:

enter image description here

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

Похоже, что pskill отправляет часть своего экрана справки на stderr, действительно, обратите внимание:

C:\Dayforce\utils> .\pskill.exe -h

PsKill v1.15 - Terminates processes on local or remote systems
Copyright (C) 1999-2012  Mark Russinovich
Sysinternals - www.sysinternals.com

Usage: pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>
     -t    Kill the process and its descendants.
     -u    Specifies optional user name for login to
           remote computer.
     -p    Specifies optional password for user name. If you omit this
           you will be prompted to enter a hidden password.

C:\Dayforce\utils> .\pskill.exe -h 2> $null
Usage: pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>
     -t    Kill the process and its descendants.
     -u    Specifies optional user name for login to
           remote computer.
     -p    Specifies optional password for user name. If you omit this
           you will be prompted to enter a hidden password.

C:\Dayforce\utils>

Итак, похоже, что у меня была проблема только с pskill, потому что он выводит на stderr, а ISE считает хорошим поводом открыть диалог. Я исправляю это с помощью параметра командной строки -nobanner.

а как это вообще исправить? Я не хочу, чтобы ISE открывал какой-либо диалог, если команда выводит stderr, что само по себе может не быть хорошим вкусом, но не означает, что есть ошибка.

1 Ответ

0 голосов
/ 27 апреля 2018

Чтобы отключить поле подтверждения при использовании Write-Debug, вставьте это в начало вашего скрипта / функции:

If ($PSBoundParameters['Debug']) {
    $DebugPreference = 'Continue'
}
...