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

问题描述:

我在Powershell中发生了一件非常奇怪的事情。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的周围交换的日期作为另一个变量的一部分制成,但不是我输出自己的变量?!

这是铸造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 

更多here

+0

我尝试这样做,这似乎是问题,但它是我转换成5的四月。如果我做$ lastbackuptimestimestring = $ lastbackuptime.tostring(“dd/mm/yyyy hh:mm:ss”),然后使变量07/04/2013 05:04:12时它似乎也与你的做它应该是07/05/2013 05:04:12 – Trinitrotoluene 2013-05-07 14:25:19

+0

确定我通过执行以下操作来解决这个问题:$ ukCulture = [Globalization.cultureinfo] :: GetCultureInfo(“en-GB”)$ lastbackuptime = [datetime] :: Parse( $ lastbackuptime,$ ukculture) – Trinitrotoluene 2013-05-07 14:36:49

+0

它返回四月的原因是因为我使用了'mm'(分钟)而不是'MM'(月)。在我发布答案后,我修复了几分钟。我只是忘了修复输出。 – 2013-05-07 15:27:44

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

在我的系统上,短日期为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 

当单独使用,长日期格式返回日期使用,但与串联(或内展开)另一个字符串短日期格式用过的。