如何在 Powershell 中组合多个对象的属性

如何在 Powershell 中组合多个对象的属性

很多时候我需要将只能从两个单独的 powershell CMDLET 中检索的数据合并为一个数据集以供导出。我认为这应该可以通过创建一个 PSObject 并在其中收集数据,然后从 PSOBject 中选择数据并将其导出来实现。

我正在尝试做的一个示例。这还不起作用。

$OU1 = 'Contoso.com/Contoso Service Accounts'
$MBXStats = get-mailbox -OrganizationalUnit $OU1 | Get-MailboxStatistics
$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName

$bucket = @()

foreach ($MBX in $MBXStats){

$PropertyObj = New-Object psobject -Property @{
    DisplayName = $MBXStats.DisplayName
    ItemCount = $MBXStats.ItemCount
    TotalItemSize = $MBXStats.TotalItemSize
    LastLogonTime = $MBXStats.LastLogonTime
    OriginatingServer = $MBXStats.OriginatingServer
    DistinguishedName = $MBXProps.DistinguishedName
    }
    $bucket += $PropertyObj
}

$bucket | Out-GridView

我甚至不知道如何开始将数据收集集成$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName到脚本中。

答案1

看起来您正在尝试将多个对象的属性组合到输出流上。我认为实现目标的最佳方法是利用管道上的计算属性。但是,您的代码示例中MBXProps有一个未声明的变量,这可能是导致您的流程无法正常工作的主要原因。虽然您可能已经挑选了要向我们展示的代码(通常是一个坏主意),所以我假设您正在尝试将 MBX DN 与您的数据集集成。

$MBXStats = get-mailbox -OrganizationalUnit $OU1 | Get-MailboxStatistics
$MBXDN = get-mailbox -OrganizationalUnit $OU1 | Select DistinguishedName

$MBXStats | Select *,@{N="DistinguishedName";E="$($MBXDN.DistinguishedName)"}

概括来说,你要做的是添加一个计算财产输出。我有点懒,只评估所有*属性,而不是您选择的几个,但您可以根据自己的需要进行调整。值得注意的是,您应该尝试始终输出对象以充分利用 Powershell 的真正威力。

相关内容