0

我只有在 Windows 中才会出现问题...(祝福 Windows...)

如果我在 powershell 上运行此脚本:

schtasks.exe /create /tn "Test_22"  /tr "powershell.exe C:\site.org\tasks\Test_22\Test_22.ps1"  /sc once /st 17:22 /sd (get-date (get-date -Date "2013-09-10") -Format dd/MM/yyyy) /ru System /rl HIGHEST  

完全按照我的意愿工作!但这仅适用于语言环境为西班牙语的计算机。语言环境为英语的那些失败了,因为 10/09/2013 表示 2013 年 10 月 9 日。没关系......问题是,如果我这样做:

((Get-Culture).DateTimeFormat).ShortDatePattern

它没有返回应有的 MM/dd/yyyy,但 M/d/yyyy 不正确,原因是出于某种惊人的原因,因为 schtasks.exe 与 2013 年 9 月 10 日和 2013 年 9 月 10 日不同。

有什么办法可以解决这个问题,而不必做:

switch (((Get-Culture).DateTimeFormat).ShortDatePattern) {
   case M/d/yyyy : format = StupidWindows
}

或类似的东西?

值得一提的是我不是powershell专家,所以也许愚蠢的是我而不是windows(尽管经过一段时间的调查,我很确定愚蠢的是windows而不是我......)

4

1 回答 1

3

这个怎么样(为了便于阅读,使用反引号转义字符分成多行):

$StartDate = New-Object -TypeName DateTime -ArgumentList:(2013,09,10)
$FormatHack = ($([System.Globalization.DateTimeFormatInfo]::CurrentInfo.ShortDatePattern) -replace 'M+/', 'MM/') -replace 'd+/', 'dd/'

schtasks.exe /create 
    /tn "Test_22" `
    /tr "powershell.exe C:\site.org\tasks\Test_22\Test_22.ps1" `
    /sc once `
    /st 17:22 `
    /sd $StartDate.ToString($FormatHack) `
    /ru System `
    /rl HIGHEST

如果您使用的是 Powershell 3,请同时查看 PSScheduledJobs 模块。

于 2013-09-11T00:33:15.603 回答