27

[ref]名前付きパラメーターを使用しようとしています。ただし、エラーが発生します。

workflow Test
{
    Param([Parameter(Mandatory=$true)][String][ref]$someString)

    write-verbose $someString -Verbose
    $someString = "this is the new string"
}

cls
$someString = "hi"
Test -someString [ref]$someString
write-host $someString

#Error: Cannot process argument transformation on parameter 'someString'. Reference type is expected in argument.

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

42

[ref] パラメータの例で「ワークフロー」を使用していることに気付きました。簡単にするために、これを「関数」と呼び、後で「ワークフロー」に戻りましょう。

コードで変更する必要がある 3 つの点があります。

  1. [ref] パラメータを関数に渡すときは、パラメータを括弧で囲む必要があります()
  2. 関数内で [ref] パラメータを使用する場合は、$variable.value を参照してください
  3. パラメータ定義から [string] タイプを削除してください。[string] または [ref] のいずれかを指定できますが、両方を指定することはできません。

動作するコードは次のとおりです。

function Test
{
    Param([Parameter(Mandatory=$true)][ref]$someString)

    write-verbose $someString.value -Verbose
    $someString.value = "this is the new string"
}
cls
$someString = "hi"
Test -someString ([ref]$someString)
write-host $someString

「ワークフロー」について。これらは非常に制限されています。 PowerShell ワークフロー: 制限をお読みください。特に、ワ​​ークフロー内のオブジェクトでメソッドを呼び出すことはできません。これは行を壊します:

$someString.value = "this is the new string"

ワークフローの制限により、ワークフローで [ref] パラメータを使用することは実用的ではないと思います。

于 2015-04-13T01:45:37.427 に答える
5

Powershell関数で参照パラメーターを使用することに関する情報を検索したときに、これが最初のGoogleヒットだったので、この補完的な非常に単純な答えを書く必要があると感じました. あなたの質問は関数ではなくワークフローに関するものでしたが:

関数で参照パラメーターを使用する例 (ワークフローでは機能しません):

Function myFunction ([ref]$aString) {
    $aString.Value = "newValue";
}
$localVariable = "oldValue"
Write-Host $localVariable # Outputs: oldValue
myFunction ([ref]$localVariable);
Write-Host $localVariable # Outputs: newValue

関数を使用すると、次のようにパラメーターを参照と別の型の両方に定義できます (ワークフローではできません)。

Function myFunction ([ref][string]$aString) {
    $aString.Value = "newValue";
}
$localVariable = "oldValue"
Write-Host $localVariable # Outputs: oldValue
myFunction ([ref]$localVariable);
Write-Host $localVariable # Outputs: newValue

Jan に同意します。ワークフローの制限 (オブジェクトでのメソッド呼び出し) のため、ワークフローで参照パラメーターを使用しようとするべきではありません: https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows -制限/

于 2016-12-02T10:30:38.817 に答える