如何在PowerShell中将命名参数定义为[ref]

时间:2015-04-13 01:28:55

标签: 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.

如何解决此问题?

2 个答案:

答案 0 :(得分:29)

我注意到您正在使用"工作流程"在你的[ref]参数的例子中。 为简单起见,我们称之为"功能"然后回到"工作流程"后面。

您需要在代码中更改三件事:

  1. 将[ref]参数传递给function时,需要将参数括在括号()中。
  2. 在函数中使用[ref]参数时,请参阅$ variable.value
  3. 从参数定义中删除[string]类型。它可以是[string]或[ref],但不能同时为。
  4. 以下是有效的代码:

    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 Workflows: Restrictions。特别是,您无法在工作流内的对象上调用方法。这将打破界限:

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

    由于工作流程的限制,我认为在工作流程中使用[ref]参数是切实可行的。

答案 1 :(得分:3)

我觉得我需要写这个补充非常简单的答案,因为这是在Powershell函数中搜索使用参考参数的信息时第一次谷歌搜索。虽然你的问题不是关于功能而是工作流程:

在函数中使用引用参数的示例(不适用于工作流):

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/

相关问题