是否可以检查Powershell中是否给出了-Verbose参数?

dwe*_*ein 11 powershell

我编写了自己的Powershell日志记录函数Log,stream其中包含参数(写入消息的流)和message(要写入的消息).

我的想法是我可以将输出写入控制台和日志文件.我在函数中做的基本上是确定发布消息的流(使用switch语句),然后将消息写入流和日志文件:

switch ($stream) {
    Verbose {
        Write-Output "$logDate [VERBOSE] $message" | Out-File -FilePath $sgLogFileName -Append
        Write-Verbose $message
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,是否有可能检查是否给出了-Verbose参数?

目标是仅在给出-Verbose时将消息写入日志文件.

我已经查看了以下帮助文档,但没有找到任何帮助:
- help about_Parameters
- help about_commonparameters

此外,-WhatIf参数不适用于Write-Verbose.

非常感谢你的回答!

CB.*_*CB. 22

在你的脚本里面检查:

$PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent
Run Code Online (Sandbox Code Playgroud)

  • 这会出现“无法索引到空数组”错误。 (2认同)

d3r*_*3kk 19

也可用:检查参数'$ VerbosePreference'.如果设置为'SilentlyContinue',则命令行不会给出$ Verbose.如果它设置为'$ Continue',那么您可以假设它已设置.

也适用于以下其他常见参数:

Name                           Value
----                           -----
DebugPreference                SilentlyContinue
VerbosePreference              SilentlyContinue
ProgressPreference             Continue
ErrorActionPreference          Continue
WhatIfPreference               0
WarningPreference              Continue
ConfirmPreference              High
Run Code Online (Sandbox Code Playgroud)

摘自很久以前的MSDN博客页面...所以它应该与相对旧版本的Powershell相关.另请参阅Powershell v4中的"Get-Help about_CommonParameters".

  • 这就是我的方式:`$ verbose = $ VerbosePreference -ne'SilentlyContinue'` (4认同)

NoB*_*ing 5

更一般地说:由于可能在命令行上指定 -Verbose:$false,因此以下代码处理这种情况。它也适用于任何其他开关参数:

$Verbose = $false
if ($PSBoundParameters.ContainsKey('Verbose')) { # Command line specifies -Verbose[:$false]
    $Verbose = $PsBoundParameters.Get_Item('Verbose')
}
Run Code Online (Sandbox Code Playgroud)