我有一个具有以下功能的模块。
试验Module.psm1
function Do-Stuff
{
[CmdletBinding()]
param($Stuff)
Write-Debug 'Doing stuff!'
Write-Host $Stuff
}
我有一个导入模块的脚本。
试验Script.ps1
[CmdletBinding()]
param($Stuff)
Import-Module ./Test-Module.psm1
Write-Host 'About to do stuff.'
Do-Stuff -Stuff $Stuff
Write-Host 'Just did some stuff.'
但是当我调用脚本时,在Do-Stuff函数中没有遵守-Debug标志。
PS > .\Test-Script.ps1 -Stuff 'foobar'
About to do stuff.
foobar
Just did some stuff.
我记得最近在StackOverflow上看到了一些讨论这个问题的建议,并建议你可以让模块通过调用堆栈检查参数,以确定它是否应该实现调试。我现在无法找到它,但我还不确定我当时是否理解如何实施。
我如何实现这样的东西,或者实现相同目标的不同东西。
答案 0 :(得分:2)
一种方法可能是在您的模块上添加此代码:
if ((get-pscallstack |select -last 2 |select -expand arguments -first 1) -match "verbose"){$verbosepreference="continue"}
if ((get-pscallstack |select -last 2 |select -expa arguments -first 1) -match "debug"){ $debugpreference="continue"}
答案 1 :(得分:0)
简单解决方案:添加自定义调试开关。
试验Script.ps1
[CmdletBinding()]
param($Stuff, [switch]$UseDebug)
Import-Module ./Test-Module.ps1
Write-Host 'About to do stuff.'
Do-Stuff -Stuff $Stuff -Debug:$UseDebug
Write-Host 'Just did some stuff.'
复杂的解决方案:阅读以下SO question