为什么PowerShell ISE要求确认可执行文件何时输出到stderr?

时间:2018-04-27 17:27:15

标签: powershell stderr powershell-ise

我正在调试ISE中的powershell脚本,在那里我调用了sysinternals pskill实用程序。

出于某种原因,PowerShell会打开以下对话框:

enter image description here

为什么呢?如何配置它不显示对话框,只是按照我的意图运行脚本?

编辑1

问题很容易复制:

  1. 运行 ise -noprofile
  2. 在ise命令提示符下运行 pskill -h
  3. 结果如下:

    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命令行选项修复它。

    但是如何解决这个问题呢?如果命令输出stderr,我不希望ISE打开任何对话框,这本身可能不是很好,但并不意味着有错误。

1 个答案:

答案 0 :(得分:1)

为了在脚本/函数顶部使用Write-Debug this 时禁止显示确认框:

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