我有一個有效的 PS 腳本,可以獲取遠程服務器的啟動時間
#$ServerArray is the list of servers
$cso = New-CimSessionOption -Protocol Dcom
$cs = New-CimSession -ComputerName $ServerArray -SessionOption $cso
Get-CimInstance -CimSession $cs -ClassName win32_operatingsystem -OperationTimeoutSec 10 | select csname, Caption, lastbootuptime | sort lastbootuptime | format-table -autosize
結果:
csname Caption lastbootuptime
------ ------- --------------
server1 Microsoft Windows Server 2012 R2 Standard 10/30/2021 3:07:23 AM
server2 Microsoft Windows Server 2012 R2 Standard 10/30/2021 3:12:35 AM
server3 Microsoft Windows Server 2012 R2 Standard 10/30/2021 3:13:34 AM
是否可以使用 PowerShell 或其他 API 提取任何其他詳細資訊來表明服務器已正確啟動?
uj5u.com熱心網友回復:
注意:根據執行機制,這可能很難使用 PowerShell;PowerShell 遠程處理在啟動的早期階段不可用,互動式 CLI 也不可用。但是,某些代理或服務(例如 VMware Tools)可以在此類時間促進遠程執行。在一些較早的啟動階段,還可以利用計劃任務在本地運行代碼。盡管此答案以 PowerShell 為中心,但一般資訊也可用于其他編程語言。
有 Windows 的啟動狀態,您可以嘗試尋找方法來檢查這些狀態,但我發現了解計算機是否處于用戶登錄狀態的最可靠方法是等待Get-Process winlogon回傳行程。一旦winlogon運行,計算機就接近或能夠促進登錄會話,等待 GPO 應用程式完成。
此SuperUser 答案解釋了如何使用 Windows Performance Toolkit(Windows SDK 的一部分)啟動啟動跟蹤并傳播其報告,但這不是此問題或答案的重點。我把它包括在這里是為了表明等待winlogon是識別系統何時準備好進行互動的正確方法;執行winlogon實際上是最后的 Windows 啟動階段,這個答案就是一個例子。
注意:從技術上講,登錄并等待計劃任務在登錄時完成是最后一步,但該部分是在內核啟動完成之后出現的,并且可以在多個登錄會話中重復。我不考慮“啟動順序”或系統初始化的這一部分。
至于 Windows 的啟動階段,我只能使用xbootmgr. 我不確定是否有公開給用戶空間的檔案化 API(win32 或其他)來檢查引導跟蹤之外的當前引導階段。這個時候我只能建議查看環境細節來了解當前的啟動階段(比如檢查winlogon行程),雖然我對其他啟動階段的環境還不夠熟悉,無法在這里提出額外的建議。
如果我了解有關其他階段的更多資訊,我將更新此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/345223.html
標籤:视窗 电源外壳 powershell-5.1
上一篇:哈希集到鍵和值
