Левый отступ строки для сортировки соответственно - PullRequest
0 голосов
/ 28 марта 2012

Мне нужно получить базу данных с максимальным свободным пространством в Exchange 2010, однако, поскольку она будет запущена из конвейера в c #, я пытаюсь отсортировать результаты, а затем выбрать первую строку.

Если я пытаюсь использовать поле AvailableNewMailboxSpace , оно сортируется с использованием строковых значений вместо двойных значений:

 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) 

Я думаю, что я должен оставить нули в полеСтрока, чтобы получить правильный порядок, но я не знаю как.

Я должен добиться этого в одной строке, потому что это будет запущено с помощью команды конвейера в c #.

Это моя попытка:

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

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Попробуйте:

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

Блок сценариев {} выполняет сортировку, оценивая только значение перед МБ как decimal.

.попробуйте это:

| sort { [int]($_.AvailableNewMailboxSpace -replace ".+\((.+)b.+", '$1') }
1 голос
/ 28 марта 2012

Лучшим способом было бы использовать собственные методы: ToKB (), ToMB (), ToGB () и т. Д .:

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

или

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

Если по какой-либо причинеВы не можете сделать это, затем выполните манипуляции со строками:

 Get-MailboxDatabase -Status | Select Name,AvailableNewMailboxSpace | Sort-Object {[double]$_.AvailableNewMailboxSpace.Split()[0]}
1 голос
/ 28 марта 2012

Не могли бы вы разыграть во время сортировки? Таким образом, в вашем конвейере вы получите что-то вроде

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

Невозможно проверить это, потому что у меня нет оснасток для Exchange, но это просто для того, чтобы дать вам один трек.

...