Tabelle in Arrays in POWERSHELL?

1 Antwort

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:

Du kannst auch direkt mit CSV-Dateien arbeiten:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren