mayho33
Goto Top

Powershell unterschiedliche DateTime-Ausgabe bei gleichem Command

Hi @ All

Ich bin gerade über ein Verhalten von PS gestolpert das ich mir nicht erklären kann. Falls jemand in den Tiefen der PS sattelfest ist, bitte ich mich aufzuklären:

Wo liegt das Problem?
Ich speichere ein DateTime in eine $env:Variable und eine $LocalVariable
[datetime]$env:DT = (Get-Date -format "yyyy.MM.dd HH:mm:ss")
[datetime]$DT        = (Get-Date -format "yyyy.MM.dd HH:mm:ss")

gebe ich beide wieder aus bekomme ich das:

  • 2020.12.22 19:44:39
  • Dienstag, 22. Dezember 2020 19:44:39

Ich führe das auf die Culture von PS und der OS-GUI zurück, obwohl ich es ad hoc nicht beweisen kann. Wird aber nochmal etwas komischer.

Gebe ich beides innerhalb eines String aus, kommt das raus:

  • Da ist Text dabei (Definition $env:DT): 2020.12.22 19:44:39
  • Da ist Text dabei (Definition $DT): 12/22/2020 19:44:39

Ich bekomme also 3 unterschiedliche Formate aus 2 Variablen die mit 1 Command befüllt wurden.

Da fühle ich mich doch gleich mal an den jungen Pavel Chekov (Anton Yelchin) aus "Enterprise" erinnert.. hmmm.

Bitte Hilfe! Mir schwurbelt der Kopf face-wink

Content-Key: 634279

Url: https://administrator.de/contentid/634279

Printed on: June 5, 2023 at 23:06 o'clock

Mitglied: 146707
Solution 146707 Dec 22, 2020 updated at 22:42:49 (UTC)
Goto Top
Zu 1:
Ganz einfach, get-date mit dem -Format Parameter liefert kein Objekt von Typ DateTime zurück sondern einen String! Du aber wandelst durch das explizite Umwandeln der Variablen mit [DateTime] diesen String wieder in ein DateTimeObject zurück und das triggert die automatische Datumsumwandlung über die Parse-Methode der current culture. Bei dem einen klappt das bei der anderen nicht (Cultureabhängig)
Du hast hier offensichtlich nur ein Type Missverständnis

Zu 2:
Das Objects vom Typ DateTime innerhalb von Strings die englische Culture bekommen ist normal das ist der Default für eine Stringumwandlung. Deswegen wandelt man das ja vorher zu einem String mit der entsprechenden Culture dann kommt das auch korrekt raus.

Wenn du der PS nicht sagst wie sie zu formatieren hat macht sie eben was sie will und nicht was du willst ­čśë
Member: mayho33
mayho33 Dec 23, 2020 updated at 01:09:32 (UTC)
Goto Top
Zitat von @146707:
Wenn du der PS nicht sagst wie sie zu formatieren hat macht sie eben was sie will und nicht was du willst ­čśë

Jaaaa... das habe ich auch schon gemerkt... leider!

In C# und das ist ja gar nicht so weit weg (DotNet usw.) Ist das etwas anders. Ein String bleibt ein String solange ich ihn nicht "caste".

Ein Object in einen String geht nicht ohne Casting. Damit komme ich irgendwie weit besser zurecht.

Danke für die Erklärung!