Powershell:将TotalItemSize转换为INT

时间:2014-06-20 12:46:52

标签: powershell exchange-server

您好我正在编写PS脚本以将邮箱大小限制到一个限制,并在超出此限制时向用户发送电子邮件。

我已经准备好了像这样的Size变量:

$Size=Get-MailboxStatistics -Identity $_.samaccountname | Select-Object @{n="TotalItemSize";e={($_.totalitemsize -split " \(")[0]}}

我得到类似的东西:

"samaccountname"  @{TotalItemSize=1.991 GB}

我有两个问题:

  1. 除了1.991 GB之外,是否有可能摆脱一切?
  2. 我可以将此值转换为INT吗?
  3. 提前致谢。

3 个答案:

答案 0 :(得分:2)

查看$a

$a = (Get-MailboxStatistics -Identity jean-paul.blanc).TotalItemSize

$a | get-member

您可以看到它包含的属性值为Microsoft.Exchange.Data.ByteQuantifiedSize

现在看看Microsoft documentation,你可以找到你正在寻找的方法Tobytes(),这样你就可以写下:

$a.value.ToBytes()

或在你的情况下:

$size = (Get-MailboxStatistics -Identity "Your user identity").TotalItemSize.value.Tobytes()

编辑:

如果您只有字符串,请说“34.01 MB(35,666,338字节)”

您可以使用以下方法重建对象:

$a = [Microsoft.Exchange.Data.ByteQuantifiedSize]::parse("34.01 MB (35,666,338 bytes)")

答案 1 :(得分:1)

这将为您提供int:

的大小
$Size=
 Get-MailboxStatistics -Identity $_.samaccountname | 
 Select-Object -ExpandProperty totalitemsize

 $Size = $Size -replace '^.+\((.+\))','$1' -replace '\D' -as [int]

我使用它,如果你想要一个int GB值,则除以1GB。较小尺寸的邮箱可以返回MB甚至KB。从实际的字节数开始更容易并自己进行转换,而不是解析可能返回的所有可能的字符串格式。

但是如果您在邮箱上设置了IssueWarningQuota,系统会在超过该配额时每天自动开始向他们发送一封电子邮件。

编辑:还有一些对象方法可用于获取各种格式的字节计数(如ToBytes())。只要您在实际的EMS shell中,这些工作正常。如果您尝试在隐式远程会话中使用相同的脚本,它将失败,因为现在您正在使用反序列化的对象,并且您不再拥有这些方法。字符串解析方法不像"纯"使用对象方法,但它可以在这些环境之间移植。

答案 2 :(得分:0)

您可以将十进制转换为int(使用舍入),方法是将其转换为[int64]

[int64]$val = 1.991

或者,如果您要向下舍入,可以使用[math

[math]::floor(1.991)