左边填充一个字符串以进行相应的排序

时间:2012-03-28 07:33:38

标签: powershell exchange-server-2010

我必须在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 个答案:

答案 0 :(得分:2)

试试这个:

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

脚本块{}使排序仅评估MB之前的值为decimal

要根据字节值进行更准确的排序,您可以尝试:

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

答案 1 :(得分:1)

排序时你不能投票吗?所以在你的管道中你会得到像

这样的东西
... blah ... | Sort-Object { $_.AvailableNewMailboxSpace -as [int] }

无法测试,因为我没有Exchange的管理单元,但这只是为了给你一个轨道。

答案 2 :(得分:1)

最好的方法是使用本机方法: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]}