2

我在 Powershell 中尝试了一些事情,但我无法实现的是以下(在 Exchange 中):

Get-User | Get-MailboxStatistics

但在输出中,我想要cmdlet 的"Get-User"一些字段/输出和 cmdlet 的一些字段/输出"Get-MailboxStatistics"

如果有人有答案,我已经在网上搜索过,但没有成功,因为我很难用几句话来解释它。

在此先感谢您的帮助。

4

4 回答 4

3

从执行一个 cmdlet 开始,将结果通过管道传输到Foreach-Object然后保存对当前对象 ($user) 的引用,现在执行第二个命令并将其保存在变量中。使用两个对象的属性创建新对象。

您还需要过滤拥有邮箱的用户,使用 RecipientTypeDetails 参数。

$users = Get-User -RecipientTypeDetails UserMailox 
$users | Foreach-Object{

    $user = $_
    $stats = Get-MailboxStatistics $user

    New-Object -TypeName PSObject -Property @{
        FirstName = $user.FirstName
        LastName = $user.LastName
        MailboxSize = $stats.TotalItemSize
        ItemCount =  $stats.ItemCount   
    }
}
于 2012-05-12T09:17:27.517 回答
2

我不知道这是否是最佳或最佳解决方案,但您当然可以通过将实际用户保存到 foreach 中的变量来做到这一点:

$users = Get-User 
$users | % { $user = $_; Get-MailboxStatistics $_ | % 
    { 
        "User name:{0} - some mailbox statistics: {1}" -f $user.SomePropertyOfUser, $_.SomePropertyOfMailbox
    } 
}

仅在使用 Exchange cmdlet 时才需要第一步(将用户保存到单独的变量中) - 如此所述,您不能在 foreach 中嵌套 Exchange cmdlet...

此错误是通过 PowerShell 远程处理执行 Exchange cmdlet 时引起的,它不支持同时运行多个管道。当您将 cmdlet 的输出通过管道传输到 foreach-object 时,您可能会看到此错误,然后在其脚本块中运行另一个 cmdlet。

于 2012-05-11T15:12:40.843 回答
0
$users = Get-User  -RecipientTypeDetails UserMailbox
$users | Foreach-Object{ $user = $_; $stats = Get-MailboxStatistics $user.DistinguishedName; New-Object -TypeName PSObject -Property @{FirstName = $user.FirstName; LastName = $user.LastName;MailboxSize = $stats.TotalItemSize;ItemCount =  $stats.ItemCount  }}

我不得不在输入中添加一个特定字段,Get-MailboxStatistics因为远程,我有:

The following Error happen when opening the remote Runspace: System.Management.Automation.RemoteException: Cannot process argument transformation on parameter 'Identity'. Cannot convert the "gsx-ms.com/Users/userName1" value of type "Deserialized.Microsoft.Exchange.Data.Directory.Management.User" to type "Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter".

无论如何,谢谢@Jumbo 和@Shay-levy

于 2012-05-14T09:03:25.660 回答
0
Get-ADUser -identity ADACCOUNT | Select-object @{Name="Identity";Expression={$_.SamAccountName}} | Get-MailboxStatistics

由于某种原因,Identity 参数不按值输入管道,仅按属性名称输入。因此,为了使其正常工作,您可以更改数据管道的名称以匹配 Identity 的参数名称。然后 Get-MailboxStatistics 终于知道如何处理您通过管道提供的数据。

于 2013-07-08T18:45:03.393 回答