PowerShell/PowerCLI 对上一个对象的引用

PowerShell/PowerCLI reference to previous object

我正在开发简单的单行报告,但无法正常工作。

我正在通过 cmdlet Get-VMHost 检索 ESXi 主机。 Get-VMHost 通过管道传输到 Get-VMHostSysLogServer

作为输出,我得到 HostPort 属性。我想显示以下属性:

我怎样才能做到这一点?

这是一种解决方案,可以构建具有所需属性的自定义对象:

Get-VMHost | ForEach-Object {

    $SysLog = $_ | Get-VMHostSysLogServer

    ForEach ($SysLogServer in $SysLog) {
        $Result = @{
            VMHost = $_.name
            SysLogHost = $SysLogServer.Host
            Port = $SysLogServer.Port
        }
        New-Object -TypeName PSObject -Property $Result
    }
}

解释:

  • 使用 ForEach-Object 循环遍历 Get-VMHost 返回的每个 VM 主机(通过 $_ 表示为当前管道项)。
  • 获取每个Host的SysLogServers到$SysLog
  • 遍历所有 SysLogServer,构建所需属性的哈希表 @{ }
  • 使用New-Object输出一个对象,使用哈希表中的属性返回到管道。

如果您想将结果捕获到变量中,只需在 Get-VMHost 之前添加 $YouVar =

如果您想将结果发送到另一个接受管道输入的 cmdlet(例如 Export-CSV),您可以直接将其作为结尾,只需在最后一个关闭 [=19] 之后附加 | Export-CSV Your.csv =].这是使用ForEach-Object作为外循环的好处,它支持管道。