2017-10-29 1 views
1

내 스크립트에 올바른 형식을 지정하는 데 문제가 있습니다. VMware에서 powercli를 사용하여 호스트 이름과 IP 정보를 가져오고 vApp에서 CSV로 내보내려고합니다.Export-Csv 사용

지금까지 내가 가진 :

$vapp = Get-CIVApp -name name_of_vApp 
$vms = $vapp.ExtensionData.Children.vm 
$output = foreach ($vm in $vms) {$vm | select-object -Property Name;$vm.Section[2].NetworkConnection | select-object -Property IpAddress,ExternalIpAddress;} 
$output | export-csv -Path c:\temp\test.csv -NoTypeInformation 

문제는, 내가 $output에 값을 할당 선을 보인다. 비록 그것이 외부의 기능이나 심지어는 $ vm.name없이 함수 내부에서 작동하더라도, 어떤 이유로 IP 정보를 추가하지 않습니다. 서버에있는 IP 주소의 수와 동일한 빈 줄로 구분 된 시스템 이름을 제공합니다.

궁극적 인 목표는 서버의 이름, 내부 IP 주소 및 외부 IP 주소가있는 3 열 테이블을 갖는 것입니다. 어떤 도움을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

1

각 반복에서 하나가 아닌 두 개의 객체를 출력하기 때문에 문제가 발생할 수 있다고 생각합니다. PowerShell은 일반적으로 단일 개체를 파이프 라인으로 반환 할 때 가장 잘 작동합니다. 이 인스턴스에서 속성의 해시 테이블과 함께 [pscustomobject] 유형을 사용하면됩니다.

나는 또한 같은 다음 ForEach-Object 대신 ForEach의를 사용하는 의미가 생각하는 당신에 직접 파이프 출력을 Export-CSV을 할 수 있습니다

$vapp = Get-CIVApp -name name_of_vApp 
$vms = $vapp.ExtensionData.Children.vm 

$vms | ForEach-Object { 
    [pscustomobject]@{ 
     Name = $_.name 
     IpAddress = ($_.Section[2].NetworkConnection.IpAddress) 
     ExternalIpAddress = ($_.Section[2].NetworkConnection.ExternalIpAddress) 
    } 
} | Export-CSV -Path c:\temp\test.csv -NoTypeInformation 

참고 방법은 당신이하여 IPAddress를 수집하는 경우 나도 몰라 ExternalIPAddress 속성은 여기에서 반드시 유효하고 현재이 부분을 테스트 할 어딘가가 없습니다.

+0

감사합니다. 나는'PSCustomObject'에 대해 알지 못했지만, 많은 것들을위한 훌륭한 도구 인 것 같습니다. 나는 또한 ForEach를 ForEach-Object의 별명으로 혼동했다. 매우 혼란스러워! – Philosophene

+1

나는 그것을 테스트 할 수 있었고 그렇게했다. VM에 하나 이상의 IP 주소가있는 경우 System.Object []를 반환하는 powershell에 약간의 문제가 발생했습니다. 'IpAddress = (($ _. Section [2] .NetworkConnection.IpAddress) -join ',')' – Philosophene

1

문제는 두 번째 Select 후 여전히 (필터링) $vm 객체와 협력 하지 $vm.secton[2]이 먼저 $vm | Flatten-Object하려고한다는 것입니다.

+0

Flatten-Object에 대해 몰랐습니다. 내가 항상 powershell에서 정보를 내보내려고 싸우는 중이라면 앞으로 유용 할 것입니다. 고맙습니다! – Philosophene