I'm trying to use [ref]
named parameters. However, I am getting an error:
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.
How can I fix this problem?
I noticed that you are using a "workflow" in your example of a [ref] parameter. For simplicity, let's call it a "function" and get back to "workflow" later.
There are three things you need to change in your code:
()
.Here is code that works:
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
As for "workflows". They are very restricted, read PowerShell Workflows: Restrictions. In particular you can't invoke a method on an object within workflow. This will break the line:
$someString.value = "this is the new string"
I don't think that using [ref] parameters in a workflow is practical, because of workflow restrictions.
I felt I needed to write this complementary very simplistic answer since this was the first google hit when searching for info on using reference parameters in Powershell functions. Although your question was not about functions but workflows:
Example using reference parameters in functions (doesn't work with workflow):
Function myFunction ([ref]$aString) { $aString.Value = "newValue"; } $localVariable = "oldValue" Write-Host $localVariable # Outputs: oldValue myFunction ([ref]$localVariable); Write-Host $localVariable # Outputs: newValue
With functions you can define parameter to be both a reference and another type, like this (but not with workflows):
Function myFunction ([ref][string]$aString) { $aString.Value = "newValue"; } $localVariable = "oldValue" Write-Host $localVariable # Outputs: oldValue myFunction ([ref]$localVariable); Write-Host $localVariable # Outputs: newValue
I agree with Jan, you should not be trying to use reference parameters in workflows because of workflow restrictions (Method invocation on objects): https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/02/powershell-workflows-restrictions/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With