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
答
检查您的区域设置,特别是短日期&长日期格式。
在我的系统上,短日期为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
当单独使用,长日期格式返回日期使用,但与串联(或内展开)另一个字符串短日期格式用过的。
我尝试这样做,这似乎是问题,但它是我转换成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
确定我通过执行以下操作来解决这个问题:$ ukCulture = [Globalization.cultureinfo] :: GetCultureInfo(“en-GB”)$ lastbackuptime = [datetime] :: Parse( $ lastbackuptime,$ ukculture) – Trinitrotoluene 2013-05-07 14:36:49
它返回四月的原因是因为我使用了'mm'(分钟)而不是'MM'(月)。在我发布答案后,我修复了几分钟。我只是忘了修复输出。 – 2013-05-07 15:27:44