2012-03-28 24 views
0

Ich muss die Datenbank mit der maximalen Speicherplatz frei in einem Austausch 2010, aber wie dies von einer Pipeline in C# gestartet werden, ich versuche, die Ergebnisse zu sortieren und dann die erste auswählen Reihe.Links Padding eine Zeichenfolge zum Sortieren

Get-MailboxDatabase -Status | Select Name,AvailableNewMailboxSpace | Sort-Object DatabaseSize 

Name   AvailableNewMailboxSpace  
----   ------------------------  
DBMB03   123.1 MB (129,073,152 bytes) 
DBMB04   114.1 MB (119,635,968 bytes) 
DBMB02   115.6 MB (121,176,064 bytes) 
DBMB10   224.4 MB (235,307,008 bytes) 
DBMB01   81.47 MB (85,426,176 bytes) 

ich verließ ich muss im String Pad Nullen erraten die richtige Reihenfolge zu bekommen, aber ich:

Wenn ich versuche, das Feld AvailableNewMailboxSpace mit wird stattdessen die doppelten Werte unter Verwendung der String-Werte sortiert Ich weiß nicht wie.

Ich muss es in einer einzigen Zeile erreichen, weil dies mit einem Pipeline-Befehl in C# gestartet werden soll.

Dies ist mein Versuch:

Get-MailboxDatabase -Status |` 
Sort (("0" * (10 - {$_.AvailableNewMailboxSpace.Substring(0, $_.AvailableNewMailboxSpace.IndexOf("MB") - 1)}.length)) + ` 
{$_.AvailableNewMailboxSpace.Substring(0, $_.AvailableNewMailboxSpace.IndexOf("MB") - 1)}) | Select Name,AvailableNewMailboxSpace 
+0

Ich wähle die Shay-Empfehlung, weil es die einfachste ist: Get-MailboxDatabase -Status | Wählen Sie Name, VerfügbarNewMailboxSpace | Sort-Object {[double] $ _. AvailableNewMailboxSpace.Split() [0]} – m0dest0

Antwort

1

Der beste Weg, die nativen Methoden zu verwenden, wäre

Get-MailboxDatabase -Status | Select Name,@{n='AvailableNewMailboxSpaceMB';e={$_.AvailableNewMailboxSpace.Value.ToMB()} | Sort-Object DatabaseSize 

oder

Get-MailboxDatabase -Status | Select Name,AvailableNewMailboxSpace | Sort-Object {$_.AvailableNewMailboxSpace.Value.ToMB()} 

Wenn aus irgendeinem Grund Sie nicht tun können, dann tun Manipulation string:

Get-MailboxDatabase -Status | Select Name,AvailableNewMailboxSpace | Sort-Object {[double]$_.AvailableNewMailboxSpace.Split()[0]} 
+0

der letzte funktionierte gut, danke. – m0dest0

1

Könnten Sie nicht werfen beim Sortieren? So in Ihrer Pipeline würden Sie so etwas wie

... blah ... | Sort-Object { $_.AvailableNewMailboxSpace -as [int] } 

bekommen Kann nicht testen, weil ich nicht habe snapins für Exchange, aber das ist nur Sie eine Spur zu geben.

+0

Es wird nicht richtig sortiert, es wird so sortiert, als ob keine Anweisung angewendet wird. Danke, – m0dest0

2

Try this:

| sort { [decimal]($_.AvailableNewMailboxSpace -replace "MB (\(.+\))") } 

Die Skript {} Art nur den Wert vor dem MB als decimal machen zu bewerten.

Für eine genauere Sortierung anhand von Bytes schätzen Sie dies versuchen: ToKB(), Grab(), ToGB() etc:

| sort { [int]($_.AvailableNewMailboxSpace -replace ".+\((.+)b.+", '$1') } 
+0

beide funktionierte gut, danke – m0dest0

Verwandte Themen