0

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

测试模块.psm1

function Do-Stuff
{
    [CmdletBinding()]
    param($Stuff)
    Write-Debug 'Doing stuff!'
    Write-Host $Stuff
}

我有一个导入模块的脚本。

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

我怎样才能实现这样的东西,或者实现相同目标的不同东西。

4

2 回答 2

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"}
于 2013-01-09T17:59:48.117 回答
0

简单的解决方案:添加自定义调试开关。

测试脚本.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 问题

于 2013-01-09T18:03:41.873 回答