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会交换日期?!

4

2 回答 2

3

这是投射datetime对象的特殊情况。当您使用 简单地将日期打印为字符串write-host时,这将等于 running $lastbackuptime.toString()。此方法使用您是计算机的文化。就我而言,Windows 区域设置中的文化是挪威,所以我得到“欧洲”日期格式:dd/mm/yyyy.

但是,当您包含$lastbackuptime在字符串中时,它会强制转换为string-object。在 PowerShell(或 .Net)中,决定在转换日期时间对象时,应使用标准格式将其转换为字符串,以便无论计算机配置何种文化,代码都将运行相同。这就是为什么铸造给你美国格式,而给你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

在这里阅读更多

于 2013-05-07T14:15:41.233 回答
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

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

于 2013-05-07T14:13:43.500 回答