Powershell自定义列使用某些cmdlet返回空值

时间:2018-12-24 20:52:37

标签: powershell exchange-server powershell-v2.0 exchange-server-2010

在使用get-mailbox cmdlet添加自定义列时,我得到一个空值。

我正在尝试使用get-mailbox cmdlet上的select @ {}添加自定义列。无论我尝试了什么,结果始终是一个空值,我更改了原始cmdlet并用get-process替换了它,然后它确实起作用了。 我什至尝试显式提供用户名,而不依赖管道变量,但它不起作用。

get-mailbox <username> | select name, @{name="size"; expression={Get-MailboxStatistics $_.samaccountname | select -ExpandProperty TotalItemSize}}

在此先感谢您的帮助。

编辑1:我的问题与Powershell script with Get-Mailbox and Get-MailboxStatistics missing output不同的原因是,在上述问题中,此人正在从其自定义列中获得一些结果,只是他们遇到了问题在一列上排了一行,我什至没有在第二或第三排上得到结果。

编辑2:我知道我可以创建自己的对象,但是我试图不必这样做,上面的代码应该可以正常工作(至少在理想情况下)。也是我没有直接进行管道传递的原因,但是我试图用尽可能少的代码来提出我的问题,以使社区更容易复制和剖析它,我想运行的实际代码是这个

get-mailbox <username> | Get-MailboxStatistics | select displayname,TotalItemSize,@{name="Archive size";expression={Get-MailboxStatistics $_.samaccountname -archive | select -ExpandProperty TotalItemSize}}

我的最终目标是得到一个表,其中包含用户列表以及邮箱大小和存档大小。

编辑3:没关系,我尝试创建自己的对象,并且相同的问题仍然存在。提供了我用于该对象的代码。

 get-mailbox <username> | foreach {[pscustomobject]@{name = $_.name; "mailbox size" = Get-MailboxStatistics $_.samaccountname | select -expand TotalItemSize; "Archive size" = Get-MailboxStatistics $_.samaccountname -archive | select -expand TotalItemSize}}

再次感谢!

1 个答案:

答案 0 :(得分:1)

知道了。您的代码如下所示:

get-mailbox <username> | Get-MailboxStatistics | select displayname,TotalItemSize,@{name="Archive size";expression={Get-MailboxStatistics $_.samaccountname -archive | select -ExpandProperty TotalItemSize}}

有错误。您的表达式包含对samaccountname的引用,该引用在Get-Mailbox输出中,但不在Get-MailboxStatistics输出中,因此您要查询一个空邮箱。要解决此问题,请使用displayName属性查询存档邮箱。

get-mailbox <username> | Get-MailboxStatistics | select displayname,TotalItemSize,@{name="Archive size";expression={Get-MailboxStatistics $_.displayname -archive | select -ExpandProperty TotalItemSize}}