Powershell变量问题和更改日期格式

时间:2013-05-07 14:01:14

标签: powershell powershell-v2.0

我在Powershell发生了一件非常奇怪的事情。

以下是代码:

add-pssnapin windows.serverbackup
$wbs = Get-Wbsummary
$lastbackuptime = $wbs.lastBackupTime
$solution = "Windows Server Backup"

$surl = "https://REDACTED:1338/REDACTED.asp?querysolution=$solution&querylastbackuptime=$lastbackuptime"
write-host $surl
write-host $lastbackuptime

这是我运行时输出的内容

https://REDACTED:1338/REDACTED.asp?querysolution=Windows Server Backup&querylastbackuptime=05/07/2013 05:04:12
07/05/2013 05:04:12

为什么powershell在作为另一个变量的一部分时交换日期而不是在我自己输出变量时?

2 个答案:

答案 0 :(得分:3)

这是投射datetime对象的特例。当您只使用write-host将日期打印为字符串时,这将等于运行$lastbackuptime.toString()。这种方法使用你的计算机文化。就我而言,Windows的Region设置中的文化是挪威,所以我得到了“欧洲”日期格式:dd/mm/yyyy

但是,当您在字符串中包含$lastbackuptime时,它会对string - 对象执行强制转换。在PowerShell(或.Net)中,决定在构建datetime-object时,它应该使用标准格式将其转换为字符串,以便无论计算机配置何种文化,代码都将运行相同。这就是为什么cast会为您提供美国格式,而toString()Write-Host会提供“欧洲”格式

例如:

[16:07:43] PS-ADMIN C:\> $d.tostring()
07.05.2013 16:04:17
[16:13:05] PS-ADMIN C:\> write-host $d
07.05.2013 16:04:17
[16:13:12] PS-ADMIN C:\> [string]$d
05/07/2013 16:04:17

要指定日期时间应显示的格式,您可以执行以下操作:

[16:14:28] PS-ADMIN C:\> $d.tostring("dd/MM/yyyy")
07.05.2013
[16:14:34] PS-ADMIN C:\> "examplestring $($d.tostring("dd/MM/yyyy"))"
examplestring 07.05.2013

了解更多here

答案 1 :(得分:0)

检查您的区域设置,特别是短日期&长日期格式。

在我的系统上,短日期为MM/dd/yyyy,长日期为dddd, MMMM dd,yyyy。然后,运行示例的简化版本:

>$lastbackuptime = get-date;
>$lastbackuptime

Tuesday, May 07, 2013 10:07:42


>$url="http://whatever/redacted.asp?time=$lastbackuptime";
>$url
http://whatever/redacted.asp?time=05/07/2013 10:07:42

当单独使用时,长日期格式用于返回日期,但是当与另一个字符串连接(或扩展内部)时,使用短日期格式。