2017-05-23 9 views
1

간단한 한 줄짜리 보고서를 작성 중이며 제대로 작동하지 않습니다.이전 개체에 대한 PowerShell/PowerCLI 참조

cmdlet Get-VMHost에 의해 ESXi 호스트를 검색하고 있습니다. Get-VMHostGet-VMHostSysLogServer으로 파이프됩니다.

출력으로 나는 HostPort 속성을 얻습니다. 나는 다음과 같은 속성을 표시하고 싶습니다 :

  • 호스트 및 포트 (모두 Get-VMHostSysLogServer에서) (Get-VMHost에서)

    • 이름.

    어떻게하면됩니까?

  • +0

    'Get-VMHostSysLogServer' cmdlet을 의미합니까? –

    +0

    예. 그러나 실제로 질문은 "파이프 전"이라는 이름을 어떻게 표시하고 나머지는 표시 할 것인가입니다. – wojcieh

    답변

    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 
        } 
    } 
    

    :

    • 각 VM 호스트가 반환을 반복하는 foreach는-개체 루프를 사용 Get-VMHost ($_을 통해 현재 파이프 라인 항목으로 표시).
    • 원하는 특성의 해시 테이블을 구축 @{ } 모든 SysLogServers 통해 $SysLog
    • 루프에 각각의 호스트를 취득 SysLogServers.
    • New-Object을 사용하여 파이프 라인으로 반환되는 Hashtable의 속성을 사용하여 개체를 출력합니다.

    변수에 결과를 캡처하려면 Get-VMHost 앞에 $YouVar =을 추가하십시오.

    파이프 라인 입력을 허용하는 다른 cmdlet (예 : Export-CSV)으로 보내려면 끝으로 직접 입력 할 수 있습니다. 마지막으로 }이 닫힌 후 | Export-CSV Your.csv을 추가하면됩니다. 이것은 바깥 쪽 루프로 ForEach-Object을 사용하는 이점이며 파이프 라인을 지원합니다.

    +1

    Mark 대단히 감사합니다. 나는 특히 어떻게 모든 것이 함께 작동하는지에 대한 설명에 감사드립니다. 이것은 내 인생을 PowerCLI로 미래의 "즐거움"을 쉽게 만들어 줄 것입니다. – wojcieh