Benutzer mit den meisten Antworten
Powershell String nach Datum sortieren

Frage
-
Hallo
Ich habe Daten welche aus einem Excel File in eine Variable eingelesen werden:
"DateTime","State"."Name","SameAccountName"
"14.02.2018-11:05:09","Removed","Max Muster","MMuster"
"09".05.2018-11:05:09","Removed","Max Muster","MMuster"
"30.08.2017-11:05:09","Added","Max Muster","MMuster"
Diese würde ich gerne nach dem Datum sortieren. Wenn ich das jedoch mit Sort-Object versuche dann wird zwar sortiert, jedoch wird dabei nur der erste Tag genommen so das obiges Beispiel dann wie folgt aussehen würde:
"30.08.2017-11:05:09","Added","Max Muster","MMuster"
"14.02.2018-11:05:09","Removed","Max Muster","MMuster"
"09".05.2018-11:05:09","Removed","Max Muster","MMuster"
Gibt es eine Möglichkeit nach dem Datum zu sortieren, so das der neueste Eintrag jeweils zuerst aufgelistet wird?
Danke bereits im voraus.
Gruss
- Typ geändert Denniver ReiningMVP, Moderator Freitag, 31. August 2018 13:15 ....
Antworten
-
Du müsstest die Strings erstmal in echte Datumswerte umwandeln. Da dein Datum aber keinem Standard-Datums-Format entspricht wirst Du ein bissl tricksen müssen ....
$StringDatum = "30.08.2017-11:05:09" [datetime]::ParseExact($StringDatum,"dd.MM.yyyy-HH:mm:ss",$null)
... so könnte es klappen.Best regards,
(79,108,97,102|%{[char]$_})-join''
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 31. August 2018 13:17
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 4. September 2018 12:35
-
Du nimmst einfach meinen Vorschlag und machst statt
$_.DateTime = Get-Date ($_.DateTime -replace "-"," ")
die Idee von Olaf:
$_.DateTime = [datetime]::ParseExact($_.Datetime,"dd.MM.yyyy-HH:mm:ss",$null)
:-)
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 31. August 2018 13:17
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 4. September 2018 12:34
Alle Antworten
-
Du müsstest die Strings erstmal in echte Datumswerte umwandeln. Da dein Datum aber keinem Standard-Datums-Format entspricht wirst Du ein bissl tricksen müssen ....
$StringDatum = "30.08.2017-11:05:09" [datetime]::ParseExact($StringDatum,"dd.MM.yyyy-HH:mm:ss",$null)
... so könnte es klappen.Best regards,
(79,108,97,102|%{[char]$_})-join''
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 31. August 2018 13:17
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 4. September 2018 12:35
-
Ja, Du musst die Datum-/Zeit-Werte in einen richtigen Datetime konvertieren.
Für Deine Daten (wenn Du den Punkt statt Komma im Header und das überflüssige Anführungszeichen in der zweiten Datenreihe bereinigst) ginge das Quick & Dörthe mit
Import-Csv C:\temp\list.csv | foreach { $_.DateTime = Get-Date ($_.DateTime -replace "-"," ") $_ } | sort DateTime -Descending
Und wenn Du das nicht-standardmäßige Datum-/Zeit-Format wieder haben willst, musst Du es halt nachträglich wandeln.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
-
[datetime]::ParseExact($StringDatum,"dd.MM.yyyy-HH:mm:ss",$null)
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
-
Danke für eure Antworten, ich habe versucht den Vorschlag von BOfH_666 umzusetzen, mein Code sieht jetzt folgendermaßen aus:
$test | Select-Object -Property DateTime, State, Name, SamAccountName
Die Daten habe ich zuvor mit Import-CSV importiert. Mir ist nur nicht klar wie ich deinen Vorschlag implementieren soll. Wenn ich versuche in einer neuen Pipe mit Select-Object -Property DateTime auszuwählen und anschließend deinen Vorschlag einfüge schlägt es fehl.
- Bearbeitet Cubus123 Montag, 27. August 2018 14:19
-
Du nimmst einfach meinen Vorschlag und machst statt
$_.DateTime = Get-Date ($_.DateTime -replace "-"," ")
die Idee von Olaf:
$_.DateTime = [datetime]::ParseExact($_.Datetime,"dd.MM.yyyy-HH:mm:ss",$null)
:-)
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Freitag, 31. August 2018 13:17
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 4. September 2018 12:34