0

次の機能を持つモジュールがあります。

Test-Module.psm1

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

そして、モジュールをインポートするスクリプトがあります。

Test-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 でこの問題について議論し、デバッグを実装する必要があるかどうかを判断するために、モジュールにコール スタックを介してパラメータを調べさせることができると提案したものを見たことを思い出します。私は今それを見つけることができません.とにかく、当時の実装方法を理解していたかどうかはわかりません.

このようなもの、または同じ目標を達成する別のものをどのように実装できますか。

4

2 に答える 2

2

1 つの方法は、このコードをモジュールの上に追加することです。

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

簡単な解決策: カスタム デバッグ スイッチを追加します。

Test-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の質問を読んでください

于 2013-01-09T18:03:41.873 に答える