如何使用 PowerShell 檢查 Active Directory 中的電腦狀態和使用者名稱
本指南將協助您建立 Active Directory 環境中所有電腦的詳細報表。該報告將包含每台電腦是否已連線、哪些使用者已登入以及網域中所有電腦的清單。這些步驟對於試圖掌控網路的系統管理員非常有用,尤其是在網路狀況略顯混亂的情況下。
先決條件
- 確保您擁有 Windows Server 的管理員權限 — — 這裡沒有例外。
- 必須安裝 Active Directory 模組 – 在網域控制站或具有 RSAT 工具的機器上。
- 開啟 PowerShell,最好有管理員權限。
步驟 1:以管理員身分開啟 PowerShell
只需在“開始”功能表中搜尋“PowerShell” ,然後右鍵單擊並選擇“以管理員身份運行”。如果您已經在使用提升的會話,那麼很好,您已經成功了一半。
步驟 2:導入 Active Directory 模組
在執行 AD 命令之前,必須執行此操作,尤其是在 PowerShell 拋出有關缺少 cmdlet 的錯誤時。運行:
Import-Module ActiveDirectory
有時,此模組會在伺服器上自動加載,但通常情況下,您需要手動執行。有助於確保此類命令正常Get-ADComputer
運作。
步驟 3:取得計算機列表
這裡你可以告訴 PowerShell 取得網域中的所有電腦名稱:
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
這將提取所有計算機物件。請注意,如果您的網域很大,這可能需要一秒鐘。此外,請確保您的帳戶具有從 AD 讀取的權限。
步驟 4:準備結果數組
基本上,設定一個空白容器來儲存資訊:
$results = @()
步驟5:循環檢查每台計算機並檢查狀態
這是比較棘手的部分——它會 ping 每台機器,查看它們是否在線,然後嘗試獲取已登入的使用者。以下是簡化版本:
foreach ($computer in $computers) { if (Test-Connection -ComputerName $computer -Count 2 -Quiet) { try { $user = Invoke-Command -ComputerName $computer -ScriptBlock { (Get-WMIObject -Class Win32_ComputerSystem).UserName } -ErrorAction Stop $status = "Online" } catch { // Sometimes, remote commands fail even if ping works, weirdly.$user = "Access Denied" // Or just leave blank, depending.$status = "Online" } } else { $user = "N/A" $status = "Offline" } $results += [PSCustomObject]@{ ComputerName = $computer Status = $status LoggedInUser = $user } }
原因何在? Ping 檢查網路可達性;Invoke-Command嘗試取得已登入使用者。當然,防火牆或權限可能會導致問題。如果出現存取被拒絕錯誤,請驗證遠端電腦上是否啟用了 PowerShell 遠端處理(Enable-PSRemoting命令會有所幫助)。有時,它在第一次運行時會失敗,但在重新啟動或快速重新啟動 WinRM 服務後即可恢復正常。
步驟 6:將結果儲存到文件中
收集到所有資訊後,將其轉儲到 CSV 中,這樣您就不必滾動瀏覽 PowerShell 聊天:
$results | Export-Csv -Path "C:\ComputerListStatus.csv" -NoTypeInformation
此檔案將保存在 C:\,如果您希望儲存到其他路徑,也可以變更。您可以使用 Excel 開啟它以獲得更清晰的視圖。
額外提示和常見問題
如果某些電腦拒絕回應,或者您收到大量「存取被拒絕」訊息,請仔細檢查這些電腦是否允許遠端 PowerShell 命令,以及您的使用者是否擁有正確的權限。此外,還要檢查網路問題——有時僅是一個被封鎖的連接埠(HTTP 連接埠為5985 ,HTTPS 連接埠為5986)就可能是罪魁禍首。
或者,如果您的命令運行緩慢或卡住,則可能需要在較小的 OU 上執行腳本或逐台篩選機器。 PowerShell 可能有點不穩定,尤其是在較大的環境中。
結論
按照這些步驟操作,您就能獲得相當不錯的網路健康狀況快照。這對於審計、故障排除或規劃升級非常有用。不知道為什麼,但有時它能完美地呈現——有時,網路配置或權限會幹擾它。不過,這總比猜測好。
常見問題
如果我沒有安裝 Active Directory 模組怎麼辦?
您可以透過Windows 設定 > 應用程式和功能 > 選用功能或伺服器管理員 > 新增角色和功能來新增它。尋找RSAT工具,並安裝Windows PowerShell 的 Active Directory 模組。
我可以更改 CSV 檔案的路徑嗎?
是的,只需修改導出命令中的路徑即可。例如,若要儲存到「下載」中,請執行下列操作:
$results | Export-Csv -Path "$env:UserProfile\Downloads\ComputerStatus.csv" -NoTypeInformation
如何只檢查一台特定的機器?
$computers
用固定的主機名字串替換循環,例如:
$computerName = "DESKTOP-XYZ" if (Test-Connection -ComputerName $computerName -Count 2 -Quiet) {...}
如果您只想了解一台機器而不是整個網域的信息,那麼這非常有用。
概括
- 確保 PowerShell 已載入 AD 模組。
- 對每台機器執行 ping 操作並嘗試進行遠端 SCM 檢查。
- 收集有關目前登入使用者的資訊。
- 儲存為 CSV 以便於審查。
希望這會有所幫助,並且可以節省一些人數小時的手動檢查或拔頭髮的時間。