PowerShell獲取遠端計算機的時間

edwardking888發表於2011-06-15
獲得本地計算機時間很容易, 使用cmdlet: Get-Date即可
PS C:\Users\Administrator> Get-Date

2011年6月15日 14:09:28

但是, 如果您想獲得遠端計算上的時間恐怕就沒有這麼容易了. 幸虧PowerShell無縫整合了WMI, 因此, 我們可以通過WMI來進行嘗試.
注意到WMI中的類win32_localtime可以獲得計算機上的時間, 我們先在本地計算機上實驗一把:
PS C:\Users\Administrator> Get-WmiObject -Class win32_localtime


__GENUS          : 2
__CLASS          : Win32_LocalTime
__SUPERCLASS     : Win32_CurrentTime
__DYNASTY        : Win32_CurrentTime
__RELPATH        : Win32_LocalTime=@
__PROPERTY_COUNT : 10
__DERIVATION     : {Win32_CurrentTime}
__SERVER         : HUBING
__NAMESPACE      : root\cimv2
__PATH           : \\HUBING\root\cimv2:Win32_LocalTime=@
Day              : 15
DayOfWeek        : 3
Hour             : 14
Milliseconds     :
Minute           : 9
Month            : 6
Quarter          : 2
Second           : 52
WeekInMonth      : 3
Year             : 2011

這是我本地計算機上的時間資訊, 可是這些時間資訊被獨立儲存在不同的屬性中. 我們只好利用PowerShell的格式化命令把這些資訊重新組織成我們期望的樣式:

PS C:\Users\Administrator> $dt = Get-WmiObject -Class win32_localtime
PS C:\Users\Administrator> "{0:00}/{1:00}/{2} {3:00}:{4:00}:{5:00}" -$dt.month,$dt.day,$dt.year,$dt.hour,$dt.minute,$dt.second
06/15/2011 14:10:19
使用PowerShell中的格式運算子-f, 這個運算子其實就是.Net類庫中的String中的Format方法. 
{0:00}中第一個"0"表示引數中的索引, 而冒號後面的兩個"0"表示對數值的格式化. 
這個程式碼有些長, 讓人感覺很冗餘, 還有更好的辦法嗎??讓我們試試利用DateTime資料型別的建構函式來試試:
PS C:\Users\Administrator> New-Object DateTime $dt.year,$dt.month,$dt.day,$dt.hour,$dt.minute,$dt.second

2011年6月15日 14:10:19

DateTime的建構函式中, 輸入六個引數, 分別表示年月日, 時分秒.  現在我們來看看如何請求遠端計算機上的時間. 我們先來觀察下Get-WmiObject有哪些引數能夠幫助我們完成任務.
Get-Help -Full Get-WmiObject命令可以檢視命令的詳細幫助資訊. 我們可以用Get-Credential來輸入使用者登入的帳戶和密碼. 例如:
PS C:\Users\Administrator> $cred = Get-Credential Administrator
執行此命令後, 你會看到提示輸入密碼的視窗彈出. 將這個命令返回的物件儲存到變數$cred中. 接下來, 我們就要訪問遠端計算機了:
PS C:\Users\Administrator> $dt = Get-WmiObject -Class win32_localtime -ComputerName 192.168.75.48 -Credential $cred
PS C:\Users\Administrator> $dt


__GENUS          : 2
__CLASS          : Win32_LocalTime
__SUPERCLASS     : Win32_CurrentTime
__DYNASTY        : Win32_CurrentTime
__RELPATH        : Win32_LocalTime=@
__PROPERTY_COUNT : 10
__DERIVATION     : {Win32_CurrentTime}
__SERVER         : EDWARD
__NAMESPACE      : root\cimv2
__PATH           : \\EDWARD\root\cimv2:Win32_LocalTime=@
Day              : 15
DayOfWeek        : 3
Hour             : 7
Milliseconds     :
Minute           : 12
Month            : 6
Quarter          : 2
Second           : 9
WeekInMonth      : 3
Year             : 2011
注意:獲取遠端伺服器資訊的過程可能會比較慢(和網路情況有關)。
cmdlet Get-WmiObject中的形參: -ComputerName用於指定計算機名稱或IP地址. -Credential引數指定了之前的登入資訊, 此處我們使用了變數$cred. 
最後要說一下, WMI中包括了很多的類, 包含了各種作業系統資訊, 但是不同版本的作業系統之間支援的類是不同. 一般來說越靠後的版本支援的越多, 不過, 如果該版本作業系統不支援該類, 你會收到必要的錯誤資訊. 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-698006/,如需轉載,請註明出處,否則將追究法律責任。

相關文章