2012-09-28 32 views
6

मुझे उम्मीद थी कि कोई मुझे निम्नलिखित के साथ बाहर मदद कर सकता है:पावरशेल: 1234 और (1234) के बीच क्या अंतर है?

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     :   1234 

मैं उम्मीद कर रहा था, फिर भी:

MyField     :  1,234.00 

अपेक्षित परिणाम है अगर मैं 1234:

के आसपास मूल्यांकन ब्रैकेट जोड़ता हूं तो मैं वापस लौटाता हूं

स्वरूपण भी 'Get-FormattedNameValuePair' फ़ंक्शन के भीतर लपेटने के बजाय सीधे कॉल किए जाने वाले मूल्यांकन ब्रैकेट के बिना काम करता है।

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

क्या कोई ऊपर दिए गए व्यवहार की व्याख्या कर सकता है?

उत्तर

5

मैं वी 3

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 

पर इस पुन: पेश नहीं कर सकता लेकिन मैं V2 पर इस repro कर सकते हैं। यदि आप [object] को [int] पर कास्ट करते हैं, तो आप अपेक्षा करते समय काम करना शुरू कर देते हैं। इसे किसी ऑब्जेक्ट में डालने के बारे में कुछ है जो समस्या पैदा कर रहा है। यह त्रुटि इसलिए की तरह अधिक संक्षेप थोड़ा दिखाया जा सकता है:

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

V2 में एक PowerShell विस्तारित प्रकार प्रणाली PSObject के रूप में जाना प्रकार में नेट प्रकार के रैपिंग से संबंधित ज्ञात समस्याओं का एक नंबर रहे हैं। यह उस मुद्दे से संबंधित दिखता है। और वास्तव में यह संबंधित है। इस की जाँच करें:

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

आप मूल पर वापस करने के लिए वस्तु उपहार में हैं, तो आप उम्मीद उत्पादन मिलता है। इसे वी 2 बग तक चॉक करें जो कि वी 3 में सौभाग्य से तय है।

+0

धन्यवाद कीथ, मैं पीएस संस्करण 2.0 पर हूं जैसा कि $ Host.Version द्वारा दिखाया गया है। मुझे परिणाम "माईफिल्ड: 1234" मिलता है, जबकि मैं "माईफिल्ड: 1,234.00" की अपेक्षा कर रहा था। आपको क्या परिणाम मिलता है? –

+0

@ माइकरोसेनब्लम मैं वी 2 पर भी इसे दोबारा करने में सक्षम था। क्या हो रहा है यह बताने के लिए मेरा उत्तर अपडेट किया गया। –

+0

शानदार उत्तर कीथ, इस समय इतनी अच्छी तरह से जांचने के लिए समय देने के लिए धन्यवाद। –

संबंधित मुद्दे