12

Write-Verboseコマンドレットをスクリプトと関数で使用したいと考えています。スクリプト (.ps1) ファイルでは期待どおりに機能しますが、モジュール (.psm1) ファイルでは機能しません。コマンドレットはモジュールでは無視されます。

次のスクリプトを実行します。

PS> .\scaffold.ps1 -verbose

プロデュース:

VERBOSE: starting foo
path: c:\bar.txt
[missing entry here - 'verbose path: c:\bar.txt']
VERBOSE: ending foo

scaffold.ps1:

[cmdletbinding()]
param()

import-module Common -force

write-verbose "starting foo"

foo "c:\bar.txt"

write-verbose "ending foo"

Common.psm1:

function foo {

  [cmdletbinding()]
  Param(
    [string]$path
  )

  write-host "path: $path"
  write-verbose "verbose path: $path"

}

この時点では、マニフェスト (.psd1) をモジュール (.psm1) に関連付けていません。

使用する必要があるモジュール固有の構文はありますか?

** 編集 **

必要なのは、-verboseフラグが .PS1 ファイルに設定されているかどうかを判断して、フラグを .PSM1 ファイルに渡す方法です。

scaffold.ps1:

[cmdletbinding()]
param()

import-module Common -force

write-verbose "starting foo"

foo "c:\bar.txt" $verbose_flag # pass verbose setting to module based on what was set on the script itself

write-verbose "ending foo"
4

3 に答える 3

10

モジュール内のコマンドレットから出力を取得するには、 common パラメーターWrite-Verboseを使用する必要があります。http://technet.microsoft.com/en-us/magazine/ff677563.aspx-verboseを参照してください。

あなたのコードを使用して:

>import-module R:\Common.psm1
>foo "c:\users"
path: c:\users
>foo "c:\users" -verbose
path: c:\users
VERBOSE: verbose path: c:\users
于 2013-05-06T20:44:11.773 に答える