2017-10-29 18 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に値を代入ラインのようです。何らかの理由で、IP情報を追加しません。たとえそれが関数の外でも、$ vm.nameなしの関数内であっても機能します。サーバが持つIPアドレスの数に等しい空白行で区切られたマシン名が私に与えられます。

私の究極の目標は、サーバーの名前、内部IPアドレス、外部IPアドレスの3つの列テーブルを持つことです。どんな助けもありがとう。

ありがとうございます。

答えて

1

私は、各反復で1つではなく2つのオブジェクトを出力しているため、この問題が発生している可能性があります。 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 | Flatten-Objectにしてみてください、(フィルタリング)$vmオブジェクトとない $vm.secton[2]で作業していることです。

+0

Flatten-Objectについて知りませんでした。それは、私がpowershellから情報をエクスポートするために常に戦っているので、将来的には役立つでしょう。ありがとうございました! – Philosophene

関連する問題