我必须在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
答案 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]}