我不时在我的脚本中使用write-host
进行穷人调试/日志记录,但是每次运行时都会触发所有这些操作会使我的屏幕上出现大量不需要的信息。
当然,我可以评论/取消注意当前运行所需的那些,但这是很多编辑并且非常容易出错。
这是我最终来到的地方:
[cmdletbinding()]
param(
[parameter()]
[string[]]$dbg_points=@('*')
)
$debug = ($PSCmdlet.myInvocation.BoundParameters['Debug'].isPresent -eq $true)
$dbg_all = $dbg_points -contains '*'
if(($debug) -and ($dbg_all -or ($dbg_points -contains 'foo'))) { Write-host '@foo debug point' }
if(($debug) -and ($dbg_all -or ($dbg_points -contains 'bar'))) { Write-host '@bar debug point' }
if(($debug) -and ($dbg_all -or ($dbg_points -contains 'foo') -or ($dbg_points -contains 'bar'))) { Write-host 'common debug point' }
这可以完成这项工作,但在每个我希望有一些调试/记录信息的地方打字很多,特别是对于公共点。
使用其他语言我会定义某种宏/预处理器指令,比如DBG(foo) {...}
或DBG(foo,bar) {...}
,它们会分别扩展到
if(($debug) -and ($dbg_all -or ($dbg_points -contains 'foo'))) {...}
和
if(($debug) -and ($dbg_all -or ($dbg_points -contains 'foo') -or ($dbg_points -contains 'bar'))) {...}
但我不认为这在powershell中是可行的。
你知道更好的,更多 powershell-ish 的做法吗?
哦,我忘了告诉你......我在那台电脑上遇到了v2而且没有安装更新的版本