2012-09-28 38 views
6

Tôi đã hy vọng rằng ai đó có thể giúp tôi ra như sau:PowerShell: Sự khác nhau giữa 1234 và (1234) là gì?

Function Get-FormattedNameValuePair([string] $name, [object] $value) 
{ 
    return "$("{0,-24}" -f $name) : $("{0,15:N2}" -f $value)" 
} 

Write-Output (Get-FormattedNameValuePair -name MyField -value 1234) 

Các lợi nhuận trên:

MyField     :   1234 

tôi đã mong đợi, tuy nhiên:

MyField     :  1,234.00 

Kết quả dự kiến ​​là trả về đúng nếu tôi thêm dấu ngoặc đánh giá quanh 1234:

Write-Output (Get-FormattedNameValuePair -name MyField -value (1234)) 

Định dạng cũng hoạt động mà không có dấu ngoặc đánh giá nếu được gọi trực tiếp thay vì được bọc trong hàm 'Get-FormattedNameValuePair'.

[string] $name = "MyField" 
[object] $value = 1234 
Write-Output "$("{0,-24}" -f $name) : $("{0,15:N2}" -f $value)" 

Mọi người có thể giải thích hành vi nói trên không?

Trả lời

5

tôi không thể tái sản xuất này trên V3

Function Get-FormattedNameValuePair([string] $name, [object] $value) 
{ 
    return "$("{0,-24}" -f $name) : $("{0,15:N2}" -f $value)" 
} 

Write-Output (Get-FormattedNameValuePair -name MyField -value 1234) 

MyField     :  1,234.00 

Nhưng tôi có thể repro này trên V2. Nếu bạn thay đổi số [object] truyền thành [int], nó sẽ bắt đầu hoạt động như bạn mong đợi. Có điều gì đó về việc đặt nó vào một đối tượng đang gây ra vấn đề. Lỗi này có thể được hiển thị một chút ngắn gọn hơn như vậy:

function foo([object]$o) { "{0,15:N2}" -f $o } 
foo 1234 
     1234 

Trong V2 có một số vấn đề nổi tiếng liên quan đến gói các loại NET trong một kiểu mở rộng loại hệ thống PowerShell gọi là PSObject. Điều này có vẻ liên quan đến vấn đề đó. Và thực sự nó có liên quan. Kiểm tra này ra:

function foo([object]$o) { "{0,15:N2}" -f $o.psobject.baseobject } 
foo 1234 
    1,234.00 

Nếu bạn tháo vật để lấy lại bản gốc, bạn sẽ nhận được kết quả mong đợi. Phấn này lên đến một lỗi V2 đó là may mắn cố định trong V3.

+0

Cảm ơn Keith, tôi đang sử dụng PS phiên bản 2.0 như được hiển thị bởi $ Host.Version. Tôi nhận được kết quả "MyField: 1234", trong khi tôi đang mong đợi "MyField: 1,234.00". Bạn nhận được kết quả gì? –

+0

@MikeRosenblum Tôi đã có thể repro điều này trên V2 là tốt. Cập nhật câu trả lời của tôi để giải thích những gì đang xảy ra. –

+0

Câu trả lời tuyệt vời Keith, cảm ơn bạn đã dành thời gian để kiểm tra kỹ lưỡng. –

Các vấn đề liên quan