2011-08-26 11 views
13

Tôi mới sử dụng Powershell và tôi đang cố gắng tìm hiểu cách in giá trị của biến [ref] từ bên trong một hàm.powershell: cách viết giá trị máy chủ lưu trữ từ [ref] biến

Đây là mã thử nghiệm của tôi:

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" 

Kết quả tôi nhận được từ thử nghiệm này là như sau. Bạn sẽ nhận thấy rằng tôi không nhận được giá trị của $ obj1 như tôi đã hy vọng. Tôi cũng đã cố gắng chuyển qua $ obj1.value trong cuộc gọi tới máy chủ ghi nhưng tạo ra cùng một phản hồi.

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 

Trả lời

29

Bạn sẽ có thể đã thử:

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

và đã sản lượng

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

tương ứng Tôi nghĩ rằng bạn không để ý các .value vào cuối đầu ra.

Trong chuỗi bạn phải làm một cái gì đó như thế này trong khi truy cập các thuộc tính:

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

Hoặc sử dụng định dạng chuỗi, như thế này:

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

Hoặc gán giá trị bên ngoài như $value = $obj1.value và sử dụng trong chuỗi.

+0

Đúng vậy. cảm ơn! – Denis

+0

@Denis - Chấp nhận làm câu trả lời nếu nó giải quyết được vấn đề của bạn! – manojlds

+0

Tôi làm như thế nào? – Denis