debugging -debug请求确认

7tofc5zh  于 2023-02-09  发布在  其他
关注(0)|答案(3)|浏览(157)

我有一个在Powershell 3.0中运行的简单脚本:
# Testing write-debug [CmdletBinding()] param() write-debug "Debug message" Write-Output "General output"
当我不带参数运行它时,我得到了所需的输出:

PS C:\scripts\Test> .\debugtest.ps1
General output

当我使用-debug参数运行它时,Powershell在打印调试消息后要求我确认:

PS C:\scripts\Test> .\debugtest.ps1 -Debug
DEBUG: Debug message

Confirm
Continue with this operation?
[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):
General output

为什么要求我确认?write-debug不应该简单地编写调试输出并继续脚本吗?
更新:将$DebugPreference设置为SilentlyContinue

PS C:\scripts\Test> $DebugPreference
SilentlyContinue
PS C:\scripts\Test> .\debugtest.ps1 -Debug
DEBUG: Debug message

Confirm
Continue with this operation?
[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):
General output
rqmkfv5c

rqmkfv5c1#

听起来您的$DebugPreference变量设置为“查询”。
从获取帮助about_preference_variables

$DebugPreference
------------------
    Determines how Windows PowerShell responds to debugging messages 
    generated by a script, cmdlet or provider, or by a Write-Debug
    command at the command line. 

    Some cmdlets display debugging messages, which are typically very
    technical messages designed for programmers and technical support
    professionals. By default, debugging messages are not displayed, 
    but you can display debugging messages by changing the value of 
    $DebugPreference.

    You can also use the Debug common parameter of a cmdlet to display
    or hide the debugging messages for a specific command. For more 
    information, type: "get-help about_commonparameters".

    Valid values:
     Stop:               Displays the debug message and stops 
                            executing. Writes an error to the console.

     Inquire:            Displays the debug message and asks you
                            whether you want to continue. Note that
                            adding the Debug common parameter to a
                            command--when the command is configured
                            to generate a debugging message--changes
                            the value of the $DebugPreference variable
                            to Inquire.

     Continue:           Displays the debug message and continues
                            with execution.

     SilentlyContinue:   No effect. The debug message is not 
        (Default)           displayed and execution continues without
                            interruption.

Edit:-Debug也是cmdlet公共参数,通过添加CmdletBinding(),它也是脚本的公共参数。
从获取帮助about_common_parameters
常见参数描述

-Debug[:{$true | $false}]
    Alias: db

    Displays programmer-level detail about the operation performed by the
    command. This parameter works only when the command generates
    a debugging message. For example, this parameter works when a command
    contains the Write-Debug cmdlet.

    **The Debug parameter overrides the value of the $DebugPreference
    variable for the current command, setting the value of $DebugPreference
    to Inquire.** Because the default value of the $DebugPreference variable
    is SilentlyContinue, debugging messages are not displayed by default.

    Valid values:

        $true (-Debug:$true). Has the same effect as -Debug.

        $false (-Debug:$false). Suppresses the display of debugging
        messages when the value of the $DebugPreference is not
        SilentlyContinue (the default).
h22fl7wq

h22fl7wq2#

我认为以下函数的第二个参数声明可以添加到任何函数中

function SetDebugPreference {
[CmdletBinding()]
Param(
    [Parameter(
        Mandatory=$true,
        HelpMessage="Please enter for `$DebugPreference a value`n('SilentlyContinue','Continue' ,'Inquire' or 'Stop')",            
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true,
        Position=0
       )]
    [ValidateSet("SilentlyContinue","Continue" ,"Inquire","Stop")]
    [Alias("dbp","dbPref")]    
    [string]
    $dbPreference,

    [Parameter(
        Mandatory=$false,
        ValueFromPipelineByPropertyName=$true,
        Position=1
       )]
    [ValidateSet("SilentlyContinue","Continue" ,"Inquire","Stop")]
    [Alias("ldbp","ldbPref")]    
    [string]
    $LocalDebugPreference="Continue"
) 
Begin {
    Write-Verbose ("Local DebugPreference: " + $DebugPreference)
    $DebugPreference=$LocalDebugPreference
    Write-Verbose ("Local DebugPreference set: " + $LocalDebugPreference)
    Write-Debug "Local debug  test"

}   
Process {
    Write-Verbose ("Global DebugPreference: " + $Global:DebugPreference)
    $Global:DebugPreference=$dbPreference
    Write-Verbose ("Global DebugPreference set: " + $Global:DebugPreference)
}

}

pprl5pva

pprl5pva3#

您可以在脚本中覆盖$DebugPreference

[CmdletBinding()]
param()

Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

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

Write-Output "General output"
Write-Debug "Debug message"

相关问题