7

1つのPowerShell(2.0)スクリプトが別のスクリプトを呼び出しています。メイン出力だけでなく、メッセージに要約行を表示するなど、個別に使用できる追加のオブジェクトを受け取りたいです。

呼び出されるスクリプトとしてTest2.ps1を使用しましょう。

param([String]$SummaryLine)
$Issues = "Potentially long list of issues"
$SummaryLine = "37 issues found"
$Issues

そして、それを呼び出すスクリプトとしてTest1.ps1:

$MainOutput = & ".\Test2.ps1" -SummaryLine $SummaryOutput
$MainOutput
$SummaryOutput

出力は単純です:

Potentially long list of issues

パラメータ$SummaryLineはTest2によって入力されますが、$SummaryOutputはTest1では未定義のままです。

Test2を呼び出す前に$SummaryOutputを定義しても役に立ちません。Test2を呼び出す前に割り当てられた値を保持するだけです。

$SummaryOutputと$SummaryLineを[ref]変数として設定しようとしましたが(関数で行うことができるようです)、Test2を呼び出した後の$SummaryOutput.Valueプロパティは$nullです。

PowerShellでパラメーターに値を返すことは可能ですか?そうでない場合、回避策は何ですか?Test2で親スコープの変数を直接割り当てますか?

4

2 に答える 2

10

参照は機能するはずです。試したときに何が起こったのかは言いません。以下に例を示します。

Test.ps1:

Param ([ref]$OptionalOutput)

"Standard output"
$OptionalOutput.Value = "Optional Output"

それを実行します:

$x = ""
.\Test.ps1 ([ref]$x)
$x

これは、あなたが好むかもしれない代替手段です。

Test.ps1:

Param ($OptionalOutput)

"Standard output"
if ($OptionalOutput) {
    $OptionalOutput | Add-Member NoteProperty Summary "Optional Output"
}

それを実行します:

$x = New-Object PSObject
.\Test.ps1 $x
$x.Summary
于 2011-03-03T16:09:12.750 に答える
1

これはあなたがやりたいことに近いですか?

Test2.ps1

 $Issues = "Potentially long list of issues"
 $SummaryLine = "37 issues found"
 $Issues
 $SummaryLine

Test1.ps1

 $MainOutput,$SummaryOutput = & ".\Test2.ps1" 
 $MainOutput 
 $SummaryOutput

これ:

 param([String]$SummaryLine)
 $Issues = "Potentially long list of issues"
 $SummaryLine = "37 issues found"
 $Issues

不合理です。$ SummaryLineのパラメーターを渡し、すぐに「37の問題が見つかりました」に置き換えます。その変数は、呼び出されたスクリプトが実行されているスコープにのみ存在します。そのスクリプトが終了するとすぐになくなります。後で使用する場合は、出力して呼び出し元のスクリプトの変数に保存する必要があります。

于 2011-03-03T03:19:36.767 に答える