2016-03-23 17 views
1

私はforeachループを実行するpowershell関数を書いています。ループは、ホストのテキストファイルリスト内の各サーバー名を通過し、次にそれぞれのホストに対して、Cの空き領域を取得して変数に割り当てます。Powershell foreachループからCSVへ出力を配列する

次に、別のループが再びリストを通過し、ホスト名を取得して変数に追加します。

次に、ループから引き出されたデータを含む2つの変数を取り、それをCSVにエクスポートする変数があります。それは正しいデータをCSVに入れますが、私はそれをある意味でフォーマットしたいと思います。現在のcsvの出力は、 'サーバ1' 'サーバ2' 'サーバ3' 'サーバ4' 'ディスクスペース値1' '2' '3' '4'などです。

私は必要なすべてのデータを持っていますが、1つのセルにサーバー名があり、その隣のセルにはそれぞれの値があるように配置する必要があります。

私はオブジェクトを作成したり、配列を使用する必要があると感じましたが、これまで書いたスクリプトに基づいて書式設定を実装するために追加できるものがあるかどうか疑問に思っていますか?

function diskcheck { 
    $freespace = Get-Content C:\temp2\DiskspaceProj\hosts.txt | Foreach-Object { 
     Get-WmiObject win32_logicaldisk -Computername $_ -Filter "DeviceID='C:'" | select -ExpandProperty "FreeSpace" 
    } 
    $hostName = Get-Content C:\temp2\DiskspaceProj\hosts.txt | Foreach-Object { 
     Get-WmiObject Win32_ComputerSystem -ComputerName $_ | Select -ExpandProperty "Name" 
    } 
    $output = "$hostname, $freespace" | echo > C:\temp2\DiskspaceProj\diskspace.csv 
} 
diskcheck 

答えて

3

は、2つの別々の配列を維持しないでください - 両方のプロパティを含むオブジェクトの1つの配列を作成:

function diskcheck 
{ 
    param(
     [string]$Path = 'C:\temp2\DiskspaceProj\hosts.txt' 
    ) 

    Get-Content $Path |ForEach-Object { 
     New-Object psobject -Property @{ 
      Hostname = Get-WmiObject Win32_ComputerSystem -ComputerName $_ |Select -ExpandProperty Name 
      FreeSpace = Get-WmiObject win32_logicaldisk -Computername $_ -Filter "DeviceID='C:'" | select -ExpandProperty FreeSpace 
     } 
    } 
} 

次に、ファイルにリストをエクスポートするExport-CSVを使用します。

diskcheck |Select Hostname,FreeSpace |Export-Csv C:\diskspace_output.csv -NoTypeInformation 
+0

それは素晴らしい走ります。しかし、私はCSVで奇妙な出力を得ています。値は、各セルで 'System.Object []'として表示されます。何か案は? –

+0

うまく動作する傷。私の最後にミス。 –

関連する問題