<Power Shell>12 解决本地工作站或者远程计算机时间和时区的问题
2013-06-27 22:06
417 查看
今天我们继续讲如何检查本地的工作站上日期和时间和时区问题及解决方法。
我们的服务器和用户的计算机经常会不准确,其中的原因是时间偏移,有人告诉我,一些工作站的时钟慢1小时。
大多数运维人员利用PowerShell脚本写了一个快速获取原始的WMI本地日期和时间值在远程机器上的列表,将其转换为可读的DateTime对象这样就可以解决
错了!请在仔细看看结果输出的list。你发现什么异常吗?大家可能会注意到,在PC1和PC2中间有一个小时的时差,是在LocalDateTime得到的和9VS10。我我印象中这样应该反生在远程计算机 DMTF转换,但显然这是不对的。通过ETS(扩展类型系统)来用于计算属性的方法参数:ConvertToDateTime,我们脚本中应该具有:[System.Management.ManagementDateTimeconverter] :: ToDateTime。MSDN中的方法描述:将一个给定的的DMTF日期和时间为DateTime。返回的DateTime将是该系统在目前的时区。
这就提出了一个问题:这个方法用之后得到的是当前时区的远程计算机或者执行脚本的机器的时区吗?不支持远程连接ToDateTime方法转换,所以只能在本地完成。没有人真正检查LocalDateTime的价值,我一直以来计算用的是的ConvertToDateTime方法。现在,我们知道使用LocalDateTime价值,来写出脚本,进行计算机上面的时间转换(Win32_LocalTime类支持XP / Windows Server 2003和以上):
谢谢大家,今天事情有点忙,更新慢一点。
我们的服务器和用户的计算机经常会不准确,其中的原因是时间偏移,有人告诉我,一些工作站的时钟慢1小时。
大多数运维人员利用PowerShell脚本写了一个快速获取原始的WMI本地日期和时间值在远程机器上的列表,将其转换为可读的DateTime对象这样就可以解决
$computers = 'pc1','pc2','pc3' $computers | ForEach-Object{ $os = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $_ $cdt = @{Name='ConvertedDateTime';Expression={$_.ConvertToDateTime($os.LocalDateTime)}} $os | Select-Object -Property Name,LocalDateTime,$cdt }这样你会得到
Name LocalDateTime ConvertedDateTime ---- ------------- ---- pc1 20130627093710.927000+120 6/27/2013 9:37:10 PM pc2 20130627103722.322000+120 6/27/2013 9:37:22 PM pc3 20130627103703.530000+120 6/27/2013 9:37:03 PM让我们看看最后一列,现在我们能够确定有问题的机器上的时间是正确的,是吗?
错了!请在仔细看看结果输出的list。你发现什么异常吗?大家可能会注意到,在PC1和PC2中间有一个小时的时差,是在LocalDateTime得到的和9VS10。我我印象中这样应该反生在远程计算机 DMTF转换,但显然这是不对的。通过ETS(扩展类型系统)来用于计算属性的方法参数:ConvertToDateTime,我们脚本中应该具有:[System.Management.ManagementDateTimeconverter] :: ToDateTime。MSDN中的方法描述:将一个给定的的DMTF日期和时间为DateTime。返回的DateTime将是该系统在目前的时区。
这就提出了一个问题:这个方法用之后得到的是当前时区的远程计算机或者执行脚本的机器的时区吗?不支持远程连接ToDateTime方法转换,所以只能在本地完成。没有人真正检查LocalDateTime的价值,我一直以来计算用的是的ConvertToDateTime方法。现在,我们知道使用LocalDateTime价值,来写出脚本,进行计算机上面的时间转换(Win32_LocalTime类支持XP / Windows Server 2003和以上):
PS> $lt = Get-WmiObject -Class Win32_LocalTime -ComputerName pc1 PS> Get-Date -Year $lt.Year -Month $lt.Month -Day $lt.Day -Hour $lt.Hour -Minute ` $lt.Minute -Second $lt.Second Thursday, June 27, 2013 21:37:10 AM or PS> [datetime]::ParseExact($lt.split('.')[0],'yyyyMMddHHmmss',$null) Thursday, June 27, 2011 21:37:10 AM
谢谢大家,今天事情有点忙,更新慢一点。
相关文章推荐
- <<时间管理与问题解决技巧>> 培训心得
- 远程连接出现“由于无法升级或重续本地计算机的客户端访问许可证,远程会话被中断。请跟服务器管理员联系。”问题的解决方法
- <Power Shell>21 如何从远程客户端快速提取信息 推荐
- <Power Shell>05解决powershell3.0收集数据时候数组生成
- .net WCF 套接字连接中断,可能是由于消息处理错误,或者远程宿主接受超时引起,或者是底层网络资源问题导致,本地套接字时间
- <Power Shell>08当你远程运行powershell指令(不需要管理员权限)
- <Power Shell>03 在PowerShell 3.0重新启动计算机指令 推荐
- <Power Shell>06获得一台计算机或者服务器的AD 站点名称 推荐
- “由于无法升级或重续本地计算机的客户端访问许可证,远程会话被中断。请跟服务器管理员联系。”问题的解决
- mongodb解决只能本地连接不能远程连接问题
- 本地计算机和远程桌面计算机间不能正常复制粘贴文字或文件解决办法
- 本地计算机和远程桌面计算机间不能正常复制粘贴文字或文件解决办法
- 关于解决用<i>标签做图标不能显示的问题
- <小程序>ios的时间戳问题
- Docker 解决获取容器获取的时间不是本地时间的问题
- <转> jsp:include 乱码问题解决
- 解决因为本地代码和远程代码冲突,导致git pull无法拉取远程代码的问题
- 解决:本地计算机无法复制文件到远程计算机
- 解决mysql本地登陆可以,远程登陆不行的问题
- Django时区设置, 解决mysql存入时间偏差问题