2017-07-19 12 views
0

1台のコンピュータ与えます:エクスポートCSVファイルへのカスタムオブジェクトは、唯一私がこれを実行すると、それが正常に動作

$Computers = get-content C:\POSH\test.txt 

foreach ($comp in $Computers) { 

$CS = Get-WmiObject -Class Win32_computersystem -ComputerName $comp 
$Encl = Get-WmiObject -Class Win32_Systemenclosure -ComputerName $comp 

$props = @{CompName=$cs.name 
     Manufacturer=$cs.manufacturer 
     Model=$cs.model 
     Serial=$encl.serialnumber} 

$obj = New-Object -TypeName PSObject -property $props 

Write-Output $obj 
} 

をしかし、私はwrite-output $obj
$obj | export-csv c:\posh\test.csvに変更した場合、私はCSVファイルで一つのコンピュータを取得します。一目で

+0

は、より良く、より速く答えの言語に言及。 –

答えて

0

: あなたが各反復で新しいオブジェクトを作ることによって、あなたが作るオブジェクトを上書きしておくようです。 タスクを繰り返してオブジェクトを上書きする前に書き込み出力を使用するため、すべての$コンピュータが画面に表示されます。これは一度それらを結合したいと思えば問題になります。 それ以外の場合は、さらに詳しい情報が役立ちます。

0

こんにちは。あなたは、ループの各反復での$ OBJ変数を上書きしている

$Computers = get-content C:\POSH\test.txt 

$Computers | % { 

$CS = Get-WmiObject -Class Win32_computersystem -ComputerName $_ 
$Encl = Get-WmiObject -Class Win32_Systemenclosure -ComputerName $_ 

$obj = New-Object -TypeName psobject -Property @{ 

     CompName=$cs.name 
     Manufacturer=$cs.manufacturer 
     Model=$cs.model 
     Serial=$encl.serialnumber 

} 

$obj1 = $obj | select -ExpandProperty CompName 

$obj2 = $obj | select -ExpandProperty Manufacturer 

$obj3 = $obj | select -ExpandProperty Model 

$obj4 = $obj | select -ExpandProperty Serial 

$out = $obj1 + ";" + $obj2 + ";" + $obj3 + ";" + $obj4 

$out >> c:\posh\test.csv 

} 
0
$Computers = get-content C:\POSH\test.txt 

$obj = foreach ($comp in $Computers) { 

    $CS = Get-WmiObject -Class Win32_computersystem -ComputerName $comp 
    $Encl = Get-WmiObject -Class Win32_Systemenclosure -ComputerName $comp 

    $props = @{CompName=$cs.name 
      Manufacturer=$cs.manufacturer 
      Model=$cs.model 
      Serial=$encl.serialnumber} 

    New-Object -TypeName PSObject -property $props 
} 

Write-Output $obj 
0

$obj | export-csv c:\posh\test.csv -Append 

それとも試しを行うことができます:あなたはこれを試すことができます。したがって、エクスポートすると、リスト内の最後のコンピュータのみが常に表示されます。配列を作成して各オブジェクトを追加し、配列をcsvに出力することができます。例えば

$Computers = get-content C:\POSH\test.txt 
# Create array to hold all objects 
$data = @() 

foreach ($comp in $Computers) { 

$CS = Get-WmiObject -Class Win32_computersystem -ComputerName $comp 
$Encl = Get-WmiObject -Class Win32_Systemenclosure -ComputerName $comp 

$props = @{CompName=$cs.name 
    Manufacturer=$cs.manufacturer 
    Model=$cs.model 
    Serial=$encl.serialnumber} 

$obj = New-Object -TypeName PSObject -property $props 
#Append the object to the array using += 
$data += $obj 

} 

#Export the objects which were stored in the data array 
$data | Export-Csv C:\Test\output.csv -NoTypeInformation 
+0

質問を読んだら、ビタリィがそれを釘付けにしたと思う。あなたの最大の問題はExport-CSVのデフォルト動作を理解していないようです。 (警告なしで上書きする).. "-Appendパラメーター指定したファイルの最後にこのコマンドレットがCSV出力を追加することを示します。このパラメーターを指定しないと、Export-CSVは警告なしでファイルの内容を置き換えます。 - [リンク](https://msdn.microsoft.com/en-us/powershell/reference/6/microsoft.powershell.utility/export-csv) –

関連する問題