Bac*_*ave 20 powershell powershell-workflow
我正在尝试使用[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.
我该如何解决这个问题?
Jan*_*lka 30
我注意到您在[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]参数是切实可行的.
我觉得我需要写这个补充的非常简单的答案,因为这是搜索有关在 Powershell 函数中使用参考参数的信息时的第一个谷歌搜索。虽然您的问题不是关于功能而是关于工作流程:
在函数中使用引用参数的示例(不适用于工作流):
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 -限制/
| 归档时间: | 
 | 
| 查看次数: | 20981 次 | 
| 最近记录: |