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

时间:2017-05-23 09:49:08

标签: powershell powercli

我正致力于简单报告单行,我无法让它发挥作用。

我正在通过cmdlet Get-VMHost检索ESXi主机。 Get-VMHost被传送到Get-VMHostSysLogServer

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

  • 姓名(来自Get-VMHost
  • 主机和端口(均来自Get-VMHostSysLogServer)。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,它使用您想要的属性构建自定义对象:

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主机(通过$_表示为当前管道项)。
  • 获取每个主机的SysLogServers到$SysLog
  • 遍历所有SysLogServers,构建所需属性的哈希表@{ }
  • 使用New-Object使用Hashtable中的属性输出对象,该属性将返回到管道。

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

如果要将结果发送到另一个接受管道输入的cmdlet(例如Export-CSV),则可以直接将其作为结尾发送,只需在上次结束| Export-CSV Your.csv后附加} 。这是使用ForEach-Object作为外部循环的好处,它支持管道。