2012-09-28 4 views
6

Ich hatte gehofft, dass jemand mich mit den folgenden helfen könnte:PowerShell: Was ist der Unterschied zwischen 1234 und (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) 

Die oben genannten Erträge:

MyField     :   1234 

ich erwartet hatte, aber:

MyField     :  1,234.00 

Das erwartete Ergebnis ist Korrekt zurückgegeben, wenn ich um 1234:

Bewertungsauszeichnungen hinzufügen

Die Formatierung funktioniert auch ohne die Auswertungsklammern, wenn sie direkt aufgerufen wird, anstatt in die Funktion 'Get-FormattedNameValuePair' eingeschlossen zu werden.

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

Kann jemand das obige Verhalten erklären?

Antwort

5

Ich kann das nicht auf V3 reproduzieren

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 

Aber ich kann dies auf V2 Repro. Wenn Sie die [object] Umwandlung in [int] ändern, funktioniert es wie erwartet. Es ist etwas dabei, dies in ein Objekt zu bringen, das das Problem verursacht. Dieser Fehler kann ein wenig kurz und bündig wie so dargestellt werden:

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

In V2 gibt es eine Reihe von bekannten Problemen auf die Verpackung von .NET-Typen in einer Art als PSObject bekannt erweiterte Typsystem Powershell verwandt. Dies scheint mit diesem Problem zu tun zu haben. Und tatsächlich ist es verwandt. Überprüfen Sie dies:

Wenn Sie das Objekt auspacken, um zum Original zurückzukehren, erhalten Sie die erwartete Ausgabe. Kreieren Sie dies mit einem V2-Fehler, der glücklicherweise in V3 behoben wurde.

+0

Danke Keith, ich bin auf PS Version 2.0 wie von $ Host.Version gezeigt. Ich erhalte das Ergebnis "MyField: 1234", während ich "MyField: 1,234.00" erwartet habe. Welches Ergebnis bekommst du? –

+0

@MikeRosenblum Ich konnte dies auch auf V2 wiederholen. Meine Antwort wurde aktualisiert, um zu erklären, was vor sich geht. –

+0

Hervorragende Antwort Keith, danke, dass du dir die Zeit genommen hast, dies gründlich zu überprüfen. –

Verwandte Themen