[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.
この問題を修正するにはどうすればよいですか?
[ref]パラメーターの例で「ワークフロー」を使用していることに気付きました。簡単にするために、これを「関数」と呼び、後で「ワークフロー」に戻りましょう。
コードで変更する必要があるものは3つあります。
()
で囲む必要があります。動作するコードは次のとおりです。
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]パラメーターを使用することは実用的ではないと思います。
これは、Powershell関数の参照パラメーターの使用に関する情報を検索するときの最初のGoogleヒットであったため、この補完的な非常に単純な答えを書く必要があると感じました。あなたの質問は機能ではなくワークフローに関するものでしたが:
関数で参照パラメーターを使用する例(ワークフローでは機能しません):
Function myFunction ([ref]$aString) { <br>
$aString.Value = "newValue"; <br>
} <br>
$localVariable = "oldValue" <br>
Write-Host $localVariable # Outputs: oldValue <br>
myFunction ([ref]$localVariable); <br>
Write-Host $localVariable # Outputs: newValue <br>
関数を使用すると、次のようにパラメーターを参照と別のタイプの両方に定義できます(ただし、ワークフローでは定義できません)。
Function myFunction ([ref][string]$aString) { <br>
$aString.Value = "newValue"; <br>
} <br>
$localVariable = "oldValue" <br>
Write-Host $localVariable # Outputs: oldValue <br>
myFunction ([ref]$localVariable); <br>
Write-Host $localVariable # Outputs: newValue <br>
Janに同意します。ワークフローの制限(オブジェクトのメソッド呼び出し)のために、ワークフローで参照パラメーターを使用しようとしてはいけません: https://blogs.technet.Microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions /