0

我必须在 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
4

3 回答 3

2

试试这个:

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

脚本块{}进行排序仅评估 MB 之前的值作为decimal.

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

| sort { [int]($_.AvailableNewMailboxSpace -replace ".+\((.+)b.+", '$1') }
于 2012-03-28T08:21:52.530 回答
1

你不能在排序时施放吗?所以在你的管道中你会得到类似的东西

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

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

于 2012-03-28T08:05:05.853 回答
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]}
于 2012-03-28T12:19:24.513 回答