33

I'm new to Powershell and I'm trying to work out how to print the value of a [ref] variable from within a function.

Here is my test code:

function testref([ref]$obj1) {
  $obj1.value = $obj1.value + 5
  write-host "the new value is $obj1"
  $obj1 | get-member
}


$foo = 0
"foo starts with $foo"
testref([ref]$foo)
"foo ends with $foo"

The output I get from this test is as follows. You'll notice that I don't get the value of $obj1 as I was hoping. I also tried passing in $obj1.value in the call to write-host but that generated the same response.

PS > .\testref.ps1
foo starts with 0
the new value is System.Management.Automation.PSReference


   TypeName: System.Management.Automation.PSReference

Name        MemberType Definition
----        ---------- ----------
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
ToString    Method     string ToString()
Value       Property   System.Object Value {get;set;}
foo ends with 5

1 Answer 1

67

You would have probably tried:

write-host "the new value is $obj1.value"

and got corresponding output of

the new value is System.Management.Automation.PSReference.value

I think you did not notice the .value in the end of the output.

In strings you have to do something like this while accessing properties:

write-host "the new value is $($obj1.value)"

Or use string format, like this:

write-host ("the new value is {0}" -f $obj1.value)

Or assign value outside like $value = $obj1.value and use in string.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.