天天看點

<Power Shell>12 解決本地工作站或者遠端計算機時間和時區的問題

今天我們繼續講如何檢查本地的工作站上日期和時間和時區問題及解決方法。

我們的伺服器和使用者的計算機經常會不準确,其中的原因是時間偏移,有人告訴我,一些工作站的時鐘慢1小時。

大多數運維人員利用PowerShell腳本寫了一個快速擷取原始的WMI本地日期和時間值在遠端機器上的清單,将其轉換為可讀的DateTime對象這樣就可以解決

1

2

3

4

5

6

7

<code>$computers</code> <code>= </code><code>'pc1'</code><code>,</code><code>'pc2'</code><code>,</code><code>'pc3'</code>

<code>$computers</code> <code>| </code><code>ForEach-Object</code><code>{</code>

<code>   </code><code>$os</code> <code>= </code><code>Get-WmiObject</code> <code>-Class</code> <code>Win32_OperatingSystem</code> <code>-ComputerName</code> <code>$_</code>

<code>   </code><code>$cdt</code> <code>= @{Name=</code><code>'ConvertedDateTime'</code><code>;Expression={</code><code>$_</code><code>.ConvertToDateTime(</code><code>$os</code><code>.LocalDateTime)}}</code>

<code>   </code><code>$os</code> <code>| </code><code>Select-Object</code> <code>-Property</code> <code>Name,LocalDateTime,</code><code>$cdt</code>

<code>}</code>

<code> </code>

這樣你會得到

<code>Name  LocalDateTime              ConvertedDateTime</code>

<code>----  -------------              ----</code>

<code>pc1   20130627093710.927000+120  6/27/2013 9:37:10 PM</code>

<code>pc2   20130627103722.322000+120  6/27/2013 9:37:22 PM</code>

<code>pc3   20130627103703.530000+120  6/27/2013 9:37:03 PM</code>

讓我們看看最後一列,現在我們能夠确定有問題的機器上的時間是正确的,是嗎?

錯了!請在仔細看看結果輸出的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和以上):

<code>PS&gt; </code><code>$lt</code> <code>= </code><code>Get-WmiObject</code> <code>-Class</code> <code>Win32_LocalTime</code> <code>-ComputerName</code> <code>pc1</code>

<code>PS&gt; </code><code>Get-Date</code> <code>-Year</code> <code>$lt</code><code>.Year</code> <code>-Month</code> <code>$lt</code><code>.Month</code> <code>-Day</code> <code>$lt</code><code>.Day</code> <code>-Hour</code> <code>$lt</code><code>.Hour</code> <code>-Minute</code> <code>`</code>

<code>              </code><code>$lt</code><code>.Minute</code> <code>-Second</code> <code>$lt</code><code>.Second</code>

<code>Thursday, June 27, 2013 21:37:10 AM</code>

<code>or</code>

<code>PS&gt; </code><code>[datetime]</code><code>::ParseExact(</code><code>$lt</code><code>.split(</code><code>'.'</code><code>)[0],</code><code>'yyyyMMddHHmmss'</code><code>,</code><code>$null</code><code>)</code>

<code>Thursday, June 27, 2011 21:37:10 AM</code>

謝謝大家,今天事情有點忙,更新慢一點。

     本文轉自cantgis 51CTO部落格,原文連結:http://blog.51cto.com/cantgis/1231246,如需轉載請自行聯系原作者