Hallo Matthes,
für dein Problem gibt es mehrere Lösungsansätze.
Entweder du zerteilst den String mit substring oder du nutzt RegEx oder du versuchst den String mit Datetime.TryParseExact zu parsen.
Bei der substring Methode wird stumpf geteilt und wenn im String Buchstaben oder ähnliches drin sind, wird das nicht überprüft.
Mit RegEx werden nur Zahlen akzeptiert (\d).
Die eleganteste Methode ist imho die Datetime.tryparseexact. Dort hast du nach dem Parsen ein Datetime Object.
Ein paar Beispiele:
$string = "201306120817"
[datetime]$dirDate = New-Object DateTime
if ([DateTime]::TryParseExact($string, "yyyyMMddhhmm",
[System.Globalization.CultureInfo]::InvariantCulture,
[System.Globalization.DateTimeStyles]::None,
[ref]$dirDate))
{
$Jahr = $dirdate.Year
$Monat = $dirDate.Month
$Tag = $dirDate.Day
$Stunde = $dirDate.Hour
$Minute = $dirDate.Minute
"Jahr:{0} Monat:{1} Tag:{2} Stunde:{3} Minute:{4}" -f $Jahr,$Monat,$Tag,$Stunde,$Minute
}
else
{
"String nicht im richtigen Format!"
}
$string = "201306120817"
if ($string -match "^(?<jahr>\d{4})(?<monat>\d{2})(?<tag>\d{2})(?<stunde>\d{2})(?<minute>\d{2})")
{
$Jahr = $matches["jahr"]
$Monat = $matches["monat"]
$Tag = $matches["tag"]
$Stunde = $matches["stunde"]
$Minute = $matches["minute"]
"Jahr:{0} Monat:{1} Tag:{2} Stunde:{3} Minute:{4}" -f $Jahr,$Monat,$Tag,$Stunde,$Minute
}
else
{
"String nicht im richtigen Format!"
}
$string = "201306120817"
$Jahr = $string.Substring(0,4)
$Monat = $string.Substring(4,2)
$Tag = $string.Substring(6,2)
$Stunde = $string.Substring(8,2)
$Minute = $string.Substring(10,2)
"Jahr:{0} Monat:{1} Tag:{2} Stunde:{3} Minute:{4}" -f $Jahr,$Monat,$Tag,$Stunde,$Minute
Wie auch immer, dass ist ein gutes Beispiel für die Vielfalt von Powershell. Mehrere Wege führen zum Ziel :)