2017-07-19 3 views
0

Si je lance cela, il fonctionne très bien:Exporter un objet personnalisé dans un fichier CSV ne me donne un ordinateur

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

Mais si je change write-output $obj à $obj | export-csv c:\posh\test.csv
Je n'obtenir un ordinateur dans le fichier CSV.

+0

Mention de la langue pour trouver des réponses plus rapides et plus. –

Répondre

0

En un coup d'œil: Il semble que vous continuiez d'écraser l'objet que vous créez en créant un nouvel objet à chaque itération. Vous voyez tous les ordinateurs $ à l'écran parce que vous utilisez l'écriture-sortie avant de répéter la tâche et d'écraser l'objet. Cela devient un problème une fois que vous voulez les combiner. Sinon, plus d'informations pourraient être utiles.

0

Bonjour. Vous pouvez essayer ceci:

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

Ou vous pouvez faire essayer:

$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

Vous écrasez la variable $ obj à chaque itération de la boucle. Ainsi, lorsque vous l'exportez, il ne contient que le dernier ordinateur de votre liste. Vous pouvez créer un tableau et y ajouter chaque objet, puis afficher le tableau dans csv.

Par exemple,

$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

Après avoir relu la question, je pense que Vitaly l'a cloué. Votre plus gros problème semble être de ne pas comprendre le comportement par défaut d'Export-CSV. (Il écrase sans avertissement) .. "-Annexe Paramètre Indique que cette cmdlet ajoute la sortie CSV à la fin du fichier spécifié.Sans ce paramètre, Export-CSV remplace le contenu du fichier sans avertissement." - [lien] (https://msdn.microsoft.com/fr-fr/powershell/reference/6/microsoft.powershell.utility/export-csv) –