这是我的powershell脚本:
$time = (Get-Date).ToShortTimeString()
Write-Host "Current Time: "$time
$destzone = [System.TimeZoneInfo]::FindSystemTimeZoneById("Central Standard Time")
$desttime = [System.TimeZoneInfo]::ConvertTimeFromUtc((Get-Date).ToUniversalTime(), $destzone)
$desttime = $desttime.ToShortTimeString()
Write-Host "UTC-6 = "$desttime
$newtime = (Get-Date).ToShortTimeString()
Write-Host "Current Time: "$newtime
if($newtime -eq $desttime)
{
Write-Host "ok"
}else
{
C:\Windows\System32\tzutil.exe /s "Central Standard Time"
}
我想要实现的是
一切正常,但是一旦将系统时区设置为utc-6,当我检查当前系统时间时,它会向我显示旧时间本身(虽然我可以看到系统时区已经改变)
看起来像缓存。有什么相似的吗?或者我的剧本有什么问题吗?
有人能引导我走好路吗?
答案 0 :(得分:1)
这不是你的剧本的错。 Powershell仅在创建会话时读取时区。
Get-Date
和.Net方法如[System.TimeZoneInfo]::Local
“缓存”这个,所以最简单的解决方案是关闭窗口并启动新的Powershell会话。开始一个新的本地会话并导入它也“解决”了问题,但是相当笨重。
WMI对象不受同一“缓存”问题的影响。 将此视为一种选择:
$curzone = (Get-WMIObject –Class Win32_TimeZone).Caption
$destzone = [System.TimeZoneInfo]::FindSystemTimeZoneById("Central Standard Time").DisplayName
if($curzone -eq $destzone)
{
Write-Host "Current Time Zone already set to:"$curzone
}else
{
C:\Windows\System32\tzutil.exe /s "Central Standard Time"
$newcurzone = (Get-WMIObject –Class Win32_TimeZone).Caption
Write-Host "Time Zone updated to:"$newcurzone
}
P.S。如果他们稍后修复此问题,目前可以使用Powershell 5.0重现Windows 10技术预览2