0

私はそのようなスクリプトを持っています:

test.ps1

param (
    $name,
$age
)

function load-parameters()
{
$name = "Bob"
$age = "23"

Write-Host "name: " $name
Write-Host "age: " $age
}

load-parameters
Write-Host "name: " $name
Write-Host "age: " $age

名前と年齢の代わりに、load-parameters内​​にロードして初期化する約10個のパラメーターがあります。

私が解決しようとしている問題は、スクリプト内の(私が思うに)グローバルスコープ関数の初期化の値を保持しようとしていることです。

上記の関数は次を返します。

name:  Bob
age:  23
name:
age:

ローカル編集を関数に変更するとき、それらはハードワイヤードですか?実装では、スクリプト内で記述した関数にパラメーターがコピーによって渡されているように見えます。

変数を参照で渡すことでこれを回避できることはわかっていますが(PowerShell関数に何かがある場合でも)、渡す必要のあるパラメーターの数を考えると、それは醜いものになります。関数「load-parameters」内で割り当てを行うときに変数のスコープを指定する方法はありますか?

4

1 に答える 1

1

負荷パラメーターで何を達成したいかは明確ではありません。あなたがやろうとしていることは、スクリプトのパラメータのデフォルト値で解決されるかもしれません:

param (
    $name = "Bob",
    $age = "23"
)

あなたがしようとしているものの別のオプションは、スクリプトスコープで変数を使用することです:

$script:name = "Bob"

したがって、関数では次のようなことができます。

function load-parameters
{
$script:name = "Bob"
$script:age = "23"

Write-Host "name: " $name
Write-Host "age: " $age
}
于 2012-03-21T02:21:56.123 に答える