我在 Powershell 中尝试了一些事情,但我无法实现的是以下(在 Exchange 中):
Get-User | Get-MailboxStatistics
但在输出中,我想要cmdlet 的"Get-User"
一些字段/输出和 cmdlet 的一些字段/输出"Get-MailboxStatistics"
。
如果有人有答案,我已经在网上搜索过,但没有成功,因为我很难用几句话来解释它。
在此先感谢您的帮助。
我在 Powershell 中尝试了一些事情,但我无法实现的是以下(在 Exchange 中):
Get-User | Get-MailboxStatistics
但在输出中,我想要cmdlet 的"Get-User"
一些字段/输出和 cmdlet 的一些字段/输出"Get-MailboxStatistics"
。
如果有人有答案,我已经在网上搜索过,但没有成功,因为我很难用几句话来解释它。
在此先感谢您的帮助。
从执行一个 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
}
}
我不知道这是否是最佳或最佳解决方案,但您当然可以通过将实际用户保存到 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。
$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
Get-ADUser -identity ADACCOUNT | Select-object @{Name="Identity";Expression={$_.SamAccountName}} | Get-MailboxStatistics
由于某种原因,Identity 参数不按值输入管道,仅按属性名称输入。因此,为了使其正常工作,您可以更改数据管道的名称以匹配 Identity 的参数名称。然后 Get-MailboxStatistics 终于知道如何处理您通过管道提供的数据。