Powershell ungewollte Konvertierung
Hi zusammen,
ich möchte mit der Powershell einen string in ein Objekt konvertiern, das klappt auch soweit mit ConvertFrom-String aber dabei finden ungewollte Konvertierungen statt.
Im Original "0/0", "1/1", "2/2" kommt raus als "0/0" (das kann sie ja nicht in eine Datum umwandeln, "1/1" wird zu "01.01.2020 00:00:00" und "2/2" zu "02.02.2020 00:00:00".
Kennt jemand eine einfache Möglichkeit das zu verhindern?
Danke schon mal
ich möchte mit der Powershell einen string in ein Objekt konvertiern, das klappt auch soweit mit ConvertFrom-String aber dabei finden ungewollte Konvertierungen statt.
Im Original "0/0", "1/1", "2/2" kommt raus als "0/0" (das kann sie ja nicht in eine Datum umwandeln, "1/1" wird zu "01.01.2020 00:00:00" und "2/2" zu "02.02.2020 00:00:00".
Kennt jemand eine einfache Möglichkeit das zu verhindern?
Danke schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 597456
Url: https://administrator.de/contentid/597456
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
8 Kommentare
Neuester Kommentar
Dafür hat das CMDlet den Parameter -TemplateContent
https://petri.com/powershell-5-0-tutorial-example-driven-parsing-using-c ...
Da kannst du auch Datentypen vordefinieren...
Beispiel:
Du kannst natürlich auch selbst mit ner Schleife parsen und deine Objekte erstellen, da hast du dann auch volle Freiheiten und musst dich nicht auf den MS Parser verlassen. Oder ConvertFrom-StringData oder Import-CSV nutzen je nachdem wie deine Daten eben so aussehen.
https://petri.com/powershell-5-0-tutorial-example-driven-parsing-using-c ...
Da kannst du auch Datentypen vordefinieren...
Beispiel:
$template = @'
{[string]Nummer*:0000000},{[string]Wert:1/1}
{[string]Nummer*:9999999},{[string]Wert:9/9}
'@
@'
012345,1/1
678901,2/2
678901,3/3
'@ | ConvertFrom-String -TemplateContent $template
Da bin ich lange beschäftigt bis ich alle Spalten und verschienen Möglichkeiten definiert habe
Das ist oft nicht nötig, meist reicht es mindestens zwei Variationen anzugeben. Der Parser interpretiert dann die Zwischenschritte.Wie sehen deine Daten denn überhaupt in Rohform aus? Es kann ja sein das es sich eher Import-CSV oder ConvertFrom-StringData oder auch ne Foreach-Schleife anbieten würde, aber ohne den Aufbau deiner Datei vorliegen zu haben, kann ich dir kein Beispiel anbieten ...
Das ist simpel, da fehlt aber nen SpaltenHeader bei deiner Angabe wenn Leerzeichen dein Delimiter sind ...
@'
0/0 RAID6 Optl RW Yes RWTD - ON 123.184 TB Name1
1/1 RAID6 Optl RW No RWTD - ON 5.276 TB Irgendwas_23
2/2 RAID6 Optl RW Yes RWTD - ON 65.481 TB VDName
'@ | ConvertFrom-CSV -Delimiter " " -Header 'DG/VD','TYPE','State','Access','Consist','Cache','Cac','sCC','Size','Name','Name2'
Dann wirst du nicht drum herum kommen genau zu definieren was zu was zu welcher Spalte gehört...
Evt. weitere Differenzierung via Regex.
Welcher Depp liefert solche Datenstrukturen ??
gc .\file.txt | %{
$cols = $_ -split '\s+'
[pscustomobject]@{
'DG/VD'=$cols
'TYPE'=$cols[1]
'State'=$cols[2]
'Access'=$cols[3]
'Consist'=$cols[4]
'Cache'=$cols[5]
'Cac'=$cols[6]
'sCC'=$cols[7]
'Size'=$cols[8..9] -join ' '
'Name'=$cols[10..1000] -join ' '
}
}
Welcher Depp liefert solche Datenstrukturen ??