Je suis un peu étonné de voir comment PowerShell traite une chaîne qui représente un DateTime en termes de paramètres. Mon script a une définition de paramètres comme suit:L'analyse syntaxique des paramètres DateTime a des paramètres régionaux différents
[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
)
Je veux entrer la date suivante: 1. Avril 2016, comme ma chaîne locale 01.04.2016
. Maintenant PowerShell fait quelque chose qui est inattendu (au moins pour moi):
- J'entre la chaîne
01.04.2016
à l'invite de commande lorsque PowerShell interroge le paramètre obligatoire manquant. Ensuite, il s'analysé au 1er Avril 2016. - J'entre la même chaîne
01.04.2016
directement à la ligne de commande comme celui-ciZippenUndMailen.ps1 -von '01.04.2016'
et maintenant PowerShell analyse la chaîne en utilisant la notation des États-Unis en Janvier 2016. 4ème
J'ai J'ai deux questions:
- Pourquoi PowerShell analyse-t-il différemment les chaînes?
- Comment remédier au mieux à ce problème? Le script doit être réutilisé et appelé à la fois manuellement et via TaskScheduler et ce comportement est plutôt contre-intuitif.
Cela a résolu le problème. Il suffit de supprimer la définition explicite '[string]' dans la définition param. Autrement, PS ne ferait que convertir le 'DateTime' analysé en un' string'. Sans le type de données explicite, cela fonctionne très bien et est converti en 'DateTime'. – Adwaenyth