2016-03-23 9 views
1

Ich schreibe eine Powershell-Funktion, die eine foreach-Schleife ausführt. Die Schleifen durchlaufen jeden Servernamen in einer Textdateiliste von Hosts und ziehen dann für jeden einzelnen den freien Speicherplatz auf C und weisen ihn dann einer Variablen zu.Anordnen der Ausgabe zu CSV von Powershell foreach Schleife

Dann durchläuft eine weitere Schleife die Liste erneut und erhält den Namen der Hosts und fügt sie dann zu einer Variablen hinzu.

Dann habe ich eine Variable, die die zwei Variablen mit den Daten aus den Schleifen gezogen und exportiert es in CSV. Es fügt die richtigen Daten in die CSV ein, aber ich möchte es in einer bestimmten Weise formatieren. Die aktuelle CSV-Ausgabe ist (für 4 Einträge zum Beispiel) 'Server 1' 'Server2' 'Server 3' 'Server 4' 'DiskspaceWert1' '2' '3' '4' etc.

Also ich bin an dem Punkt wo ich alle Daten habe, die ich brauche, aber ich muss es so arrangieren, dass eine Zelle den Servernamen hat und dann die Zelle daneben ihren entsprechenden Wert hat.

Ich habe das Gefühl, ich sollte Objekte erstellen oder ein Array verwenden, aber fragte mich, ob ich etwas hinzufügen konnte, um die gewünschte Formatierung basierend auf dem Skript, das ich bisher geschrieben habe, zu implementieren?

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 

Antwort

3

Wartung nicht zwei separate Array - schaffen ein Array von Objekten, die beiden Eigenschaften enthalten:

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

Dann Export-CSV verwenden, um die Liste in eine Datei zu exportieren:

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

Das läuft super. Allerdings bekomme ich eine seltsame Ausgabe in der CSV. Die Werte werden in jeder Zelle als 'System.Object []' angezeigt. Irgendwelche Ideen? –

+0

scratchen, dass es gut funktioniert. Tippfehler an meinem Ende. –

Verwandte Themen