Tabelle in Arrays in POWERSHELL?
Wie kann man Array als Tabelle formatieren in Powershell?
Ich will z.b drei Spalten haben [PCName, Ping(True or False), Zugriffszeit].
Ich habe noch ein Skript, das die drei Antworten zurückgeben. Diese will ich in die entsprechende Spalte hinzufügen können. Wie kann man diese machen?
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Batch, cmd
- Eigentlich war mein erster Gedanke "Custom Objects" und "Add-Member". https://www.active-directory-faq.de/2015/12/powershell-custom-objekte/
- https://www.gngrninja.com/script-ninja/2016/6/18/powershell-getting-started-part-12-creating-custom-objects
Aber wenn schon Daten vorliegen wäre es Blödsinn diese zu zerpflücken und neu zusammenzusetzen.
- Ich komme aus der Batch-Welt, diese existierte lange bevor es Powershell gab.
- Batcher sind sehr pragmatisch, wenn es darum geht irgendwie zu tricksen und Daten/Programme zu missbrauchen. (Haupsache das Ergebnis stimmt 🥱😏)
- Wie speichert man ein Objekt, dass es seine Daten geordnet behält und jede Datenbank diese Importieren kann? ...als CSV
- ...und wenn man sie wieder einliest entscheidet nur der Programmierer wie der Datensatz zugeordnet wird. Ergo kann ich den Datenfeldern einfach neue Namen geben und wir haben ein neues Object.
Was ist ein CSV-Datensatz? Nichts weiter als ein String. Einzelne Teile werden durch ein Trennzeichen selektiert. Täteräää so definiert man Quick&Dirty ein neues Objekt, ohne rumzueiern.
aber nun zur fiesen Tat (ich fühle mich wie Heinz Doofenshmirtz):
$Header='PCName','Ping','Zugriffszeit'
$MyDataTable='mary,True,0.6','Heinz,False,n/a'
#füge das Array mit dem Header zu einem neuen Object zusammen
$MyDataObject=$MyDataTable|ConvertFrom-Csv -Header $Header -Delimiter ','
#es muss nicht unbedingt ein Komma sein...
$MyDataSheet='Pepe true 115'
# wir müssen nur sagen wie getrennt wird..
$MyDataObject+=$MyDataSheet|ConvertFrom-Csv -Header $Header -Delimiter ' '
#convertfrom-csv ist es Wurscht woher die Daten kommen wir müssen nur für die Reihenfolge der Daten sorgen
[array]$irgendObjectList+= [PSCustomObject]@{
ComputerName = $env:computername
Luege = $true
Alter = 16
}
$irgendObjectList += [PSCustomObject]@{
ComputerName = 'Rumpelkiste'
Luege = $true
Alter = 99
}
$irgendObjectList
#Object seiner Objecteigenschaften berauben indem wir das Object in einen nackten CSV-String umwandeln
#selct skip 1 entfernt auch noch den alten Header
#und mit der Neuen Aufteilung versehen zu einem anderen Object ernennen
$MyDataObject+=$irgendObjectList|ConvertTo-Csv -NoTypeInformation|select -Skip 1|ConvertFrom-Csv -Header $Header
#..aber auch soooo was von Wumpe..., das man wirklich alles reinpressen kann...
$myProcess=Get-Process wininit|select Name, id,Handles
$myProcess|ft
$MyDataObject+=$myProcess|ConvertTo-Csv -NoTypeInformation|select -Skip 1|ConvertFrom-Csv -Header $Header
#so siht es aus:
$MyDataObject|ft
pause
Beschreibungen:
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-csv?view=powershell-7
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-csv?view=powershell-7
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-7
Du kannst auch direkt mit CSV-Dateien arbeiten:
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren