Ich bin ein wenig verwirrt, wie PowerShell eine Zeichenfolge behandelt, die eine DateTime darstellt, wenn es auf Parameter ankommt. My Script hat einen Parameter Definition wie folgt:DateTime Parameteranalyse hat andere Ländereinstellung
[CmdletBinding(DefaultParameterSetName='Kunde')]
param(
[Parameter(Mandatory=$true, ParameterSetName='Kunde')]
[string]$KdNr,
[Parameter(Mandatory=$true, ParameterSetName='Kunde')]
[DateTime]$von,
[Parameter(Mandatory=$true, ParameterSetName='Kunde')]
[DateTime]$bis,
[Parameter(Mandatory=$true, ParameterSetName='Kunde')]
[string]$Empfaenger
)
ich folgendes Datum eingeben möchten: 1. April 2016 als meine locale String 01.04.2016
. Jetzt tut Powershell etwas, das unerwartet ist (zumindest für mich):
- ich die Zeichenfolge
01.04.2016
an der Eingabeaufforderung eingeben, wenn Powershell die fehlenden obligatorischen Parameter abfragt. Dann geht es weiter zum 1. April analysiert 2016. - Ich betrete die gleiche Zeichenfolge
01.04.2016
direkt auf der Kommandozeile wie folgtZippenUndMailen.ps1 -von '01.04.2016'
und jetzt Powershell analysiert die Zeichenfolge mit der US-Notation als 4. Januar 2016.
Ich habe habe zwei Fragen:
- Warum parst PowerShell die Zeichenfolgen unterschiedlich?
- Wie behebe ich dieses Verhalten am besten? Das Skript sollte sowohl manuell als auch über TaskScheduler wiederverwendet und aufgerufen werden. Dieses Verhalten ist eher gegensätzlich.
Das hat es irgendwie gelöst. Ich musste nur die explizite '[string]' Definition in der param Definition entfernen. Andernfalls würde PS die geparste 'DateTime' nur in eine' Zeichenkette' zurückkonvertieren. Ohne den expliziten Datentyp funktioniert es gut und wird in eine 'DateTime' konvertiert. – Adwaenyth