繁体   English   中英

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

[英]Powershell Variable issue and changing date format

我在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作为另一个变量的一部分而不是自己输出变量时,PowerShell会交换日期?

这是投射datetime对象的特殊情况。 当您使用write-host简单地将日期打印为字符串时,将等于运行$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

在这里阅读更多

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

在我的系统上,Short Date是MM/dd/yyyy ,Long Date是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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM