当-Debug传入调用脚本时,模块不会运行Write-Debug

时间:2013-01-09 17:48:39

标签: powershell

我有一个具有以下功能的模块。

试验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上看到了一些讨论这个问题的建议,并建议你可以让模块通过调用堆栈检查参数,以确定它是否应该实现调试。我现在无法找到它,但我还不确定我当时是否理解如何实施。

我如何实现这样的东西,或者实现相同目标的不同东西。

2 个答案:

答案 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