我在Powershell中尝试了一些事情,而我无法实现的目标如下(在Exchange中):
Get-User | Get-MailboxStatistics
但是在输出中我想要"Get-User"
cmdlet中的一些字段/输出以及"Get-MailboxStatistics"
cmdlet中的一些字段/输出。
如果有人有答案,我已经在网上搜索过但没有成功,因为我很难用几句话解释它。
提前感谢您的帮助。
答案 0 :(得分: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
}
}
答案 1 :(得分:2)
我不知道它是最佳还是最佳解决方案,但你肯定是通过将实际用户保存到foreach中的变量来实现的:
$users = Get-User
$users | % { $user = $_; Get-MailboxStatistics $_ | %
{
"User name:{0} - some mailbox statistics: {1}" -f $user.SomePropertyOfUser, $_.SomePropertyOfMailbox
}
}
只有在使用Exchange cmdlet时才需要第一步(将用户保存到单独的变量中) - 如上所述here,您无法在foreach中嵌套Exchange cmdlet ...
通过PowerShell远程处理执行Exchange cmdlet时会导致此错误,该cmdlet不支持同时运行多个管道。将输出从cmdlet管道传输到foreach-object时会出现此错误,该对象随后会在其scriptblock中运行另一个cmdlet。
答案 2 :(得分: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
答案 3 :(得分:0)
Get-ADUser -identity ADACCOUNT | Select-object @{Name="Identity";Expression={$_.SamAccountName}} | Get-MailboxStatistics
由于某种原因,Identity参数不按值输入pipelne,仅按属性名称输入。因此,为了使其工作,您可以更改数据中管道的名称以匹配Identity的参数名称。然后,Get-MailboxStatistics终于知道如何处理通过管道提供数据的数据。