我对PowerShell如何处理表示DateTime的字符串有点困惑。我的脚本有一个参数定义如下:
[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
)
我想输入以下日期:1。2016年4月作为我的语言环境字符串01.04.2016
。现在PowerShell做了一些意想不到的事情(至少对我来说):
01.04.2016
。然后它将被解析为1. 2016年4月。01.04.2016
,就像这个ZippenUndMailen.ps1 -von '01.04.2016'
一样,现在PowerShell使用美国符号解析字符串为2016年1月4日。我有两个问题:
答案 0 :(得分:3)
尽管我目前的文化与en-us
不同,但我也无法复制它。
尝试从参数定义中删除[DateTime]
强制转换(将其设置为[Parameter(Mandatory=$true, ParameterSetName='Kunde')]$von
)并在代码中使用$von = [DateTime]::Parse($von, (Get-Culture))
以强制PS使用您当前的文化。
防止微妙的国际化问题突然爆发 脚本,PowerShell处理
[DateTime] '11/26/2007'
(日期常量) 像语言功能一样 - 就像[Double] 10.5
一样(数字 常量。)并非所有文化都使用小数点作为分数 分隔符,但编程语言标准化。不是全部 文化使用en-US DateTime格式,产生数百万 当人们不考虑影响时,国际化的缺陷 让他们的软件在这些文化中运行。
答案 1 :(得分:0)
Adwaenyth,我无法复制您所看到的不同时间分辨率,但很可能是文化问题......请参阅有关在Powershell中使用文化的问题How to set culture in PowerShell?