我已经编写了自己的Powershell日志函数Log
,其中包含参数stream
(在哪个流上写入消息)和message
(要写入的消息)。
我的想法是我可以将输出写入控制台和日志文件,我在函数中所做的基本上是确定在哪个流上发布消息(使用switch语句),然后将消息写入流和日志文件:
switch ($stream) {
Verbose {
Write-Output "$logDate [VERBOSE] $message" | Out-File -FilePath $sgLogFileName -Append
Write-Verbose $message
break
}
}
现在的问题是,是否可以检查是否给出了-Verbose参数?
目标是仅在给定-Verbose时才将消息写入日志文件。
我已经看了以下帮助文档,但没有找到任何有用的:
- 关于参数的帮助
- 关于_公共参数的帮助
此外,-WhatIf参数不适用于Write-Verbose。
非常感谢您的回答!
5条答案
按热度按时间w6lpcovy1#
在您的脚本中检查以下内容:
4zcjmb1e2#
还可提供:检查参数“$VerbosePreference”。如果将其设置为“SilentlyContinue”,则命令行中未提供$Verbose。如果将其设置为“$Continue”,则可以假定已设置该参数。
还适用于以下其他常用参数:
Taken from an MSDN blog page from long ago...,因此它应该与相对较旧版本的Powershell相关。另请参阅Powershell v4中的“获取关于_CommonParameters的帮助”。
3yhwsihp3#
更一般地说:因为你可以在命令行中指定-Verbose:$false,下面的代码可以处理这种情况。2它也适用于任何其他的开关参数:
nnsrf1az4#
偶然发现这个寻找相同的答案,并发现了一些好的信息,也有一些不太好。标记的答案似乎是过时的,不像注解所说的那样正确。来自MyInvocation对象的PSBoundParameter属性对象是一个字典(PoSH 5.1以上版本可能没有检查),它不包含IsPresent属性。请求者也忘记考虑$VerbosePreference(其他答案已提供此选项)。
下面是一个简单易行的解决方案:
$PSBoundParameters是一个哈希表对象,如果该值存在且为true,则其值将被评估为true,如果该值不存在或存在但不为true,则其值将被评估为false。当值为Continue时,在会话级别设置的VerbosePreference将显示详细语句。如果需要详细输出,则使用逻辑或将其放在一个条件中,您将获得准确的表示。
cnh2zyt35#
如果要根据
-Verbose
参数的值确定是否打印,请考虑使用Write-Verbose
而不是Write-Host
:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-verbose?view=powershell-7.1