PowerShell 收集计算机相关信息
收集有關計算機的信息
Get-WmiObject 是用于執行常規系統管理任務的最重要的 cmdlet。所有關鍵的子系統設置都是通過 WMI 公開的。此外,WMI 將數據視為有一個或多個項目的集合中的對象。由于 Windows PowerShell 還能處理對象,并且它的管道允許您以相同方式對待單個或多個對象,因此,通用 WMI 訪問可讓您用非常少的工作量執行一些高級任務。
以下示例演示如何通過對任意計算機使用 Get-WmiObject 來收集特定信息。我們使用表示本地計算機的點值 (.) 來指定 ComputerName 參數。您可以指定與可以通過 WMI 訪問的任何計算機關聯的名稱或 IP 地址。若要檢索有關本地計算機的信息,可以省略 -ComputerName.
列出桌面設置
我們首先介紹用于收集本地計算機的桌面相關信息的命令。
Get-WmiObject?-Class?Win32_Desktop?-ComputerName?.此命令將返回所有桌面的信息,無論它們是否正在使用。
| 注意: | |
某些 WMI 類返回的信息可能非常詳細,并且通常包含有關 WMI 類的元數據。由于這些元數據屬性的名稱大多數都以雙下劃線開頭,因此可以使用 Select-Object 篩選這些屬性。請使用 [a-z]* 作為 Property 值僅指定以字母字符開頭的屬性。例如: |
若要篩選元數據,請使用管道運算符 (|) 將 Get-WmiObject 命令的結果發送到 Select-Object -Property [a-z]*。
列出 BIOS 信息
WMI Win32_BIOS 類可以返回有關本地計算機系統 BIOS 的相當精簡和完整的信息:
Get-WmiObject?-Class?Win32_BIOS?-ComputerName?.列出處理器信息
可以使用 WMI 的 Win32_Processor 類檢索常規處理器信息,但還可能需要篩選這些信息:
Get-WmiObject?-Class?Win32_Processor?-ComputerName?.?|?Select-Object?-Property?[a-z]*若要獲取處理器系列的一般說明字符串,只需返回 Win32_ComputerSystem SystemType 屬性:
PS>?Get-WmiObject?-Class?Win32_ComputerSystem?-ComputerName?.?|?Select-Object?-Property?SystemType SystemType ---------- X86-based?PC列出計算機制造商和型號
還可從 Win32_ComputerSystem 獲取計算機型號信息。標準的顯示輸出不需要進行任何篩選,即可提供 OEM 數據:
PS>?Get-WmiObject?-Class?Win32_ComputerSystem Domain??????????????:?WORKGROUP Manufacturer????????:?Compaq?Presario?06 Model???????????????:?DA243A-ABA?6415cl?NA910 Name????????????????:?MyPC PrimaryOwnerName????:?Jane?Doe TotalPhysicalMemory?:?804765696像這樣的命令輸出(直接從某些硬件返回信息)實際上只是您擁有的數據。某些信息未被硬件制造商正確配置,因此可能不可用。
列出已安裝的修補程序
可以使用 Win32_QuickFixEngineering 列出已安裝的所有修補程序:
Get-WmiObject?-Class?Win32_QuickFixEngineering?-ComputerName?.該類返回修補程序的列表,如下所示:
Description?????????:?Update?for?Windows?XP?(KB910437) FixComments?????????:?Update HotFixID????????????:?KB910437 Install?Date????????: InstalledBy?????????:?Administrator InstalledOn?????????:?12/16/2005 Name????????????????: ServicePackInEffect?:?SP3 Status??????????????:若要得到更簡潔的輸出,可能需要排除某些屬性。雖然可以使用 Get-WmiObject Property 參數只選擇 HotFixID,但這樣做實際上將返回更多信息,因為默認情況下將顯示所有元數據:
PS>?Get-WmiObject?-Class?Win32_QuickFixEngineering?-ComputerName?.?-Property?HotFixId HotFixID?????????:?KB910437 __GENUS??????????:?2 __CLASS??????????:?Win32_QuickFixEngineering __SUPERCLASS?????: __DYNASTY????????: __RELPATH????????: __PROPERTY_COUNT?:?1 __DERIVATION?????:?{} __SERVER?????????: __NAMESPACE??????: __PATH???????????:由于 Get-WmiObject 中的 Property 參數限制從 WMI 類實例返回的屬性,而不限制返回到 Windows PowerShell 的對象,因此還會返回其他數據。若要減少輸出,請使用 Select-Object:
PS>?Get-WmiObject?-Class?Win32_QuickFixEngineering?-ComputerName?.?-Property?Hot FixId?|?Select-Object?-Property?HotFixId HotFixId -------- KB910437列出操作系統版本信息
Win32_OperatingSystem 類屬性包括版本和 Service Pack 信息。可以只明確選擇這些屬性,以便從 Win32_OperatingSystem 獲取版本信息摘要:
Get-WmiObject?-Class?Win32_OperatingSystem?-ComputerName?.?|?Select-Object?-Property?BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion還可以在 Select-Object Property 參數中使用通配符。因為所有以 Build 或 ServicePack 開頭的屬性在這里都是重要的,所以可以將該命令縮短為以下形式:
PS>?Get-WmiObject?-Class?Win32_OperatingSystem?-ComputerName?.?|?Select-Object?-Property?Build*,OSType,ServicePack*BuildNumber?????????????:?2600 BuildType???????????????:?Uniprocessor?Free OSType??????????????????:?18 ServicePackMajorVersion?:?2 ServicePackMinorVersion?:?0列出本地用戶和所有者
通過選擇 Win32_OperatingSystem 屬性可以查找本地常規用戶信息,包括許可用戶數、當前用戶數和所有者名稱。可以顯式選擇要顯示的屬性,如下所示:
Get-WmiObject?-Class?Win32_OperatingSystem?-ComputerName?.?|?Select-Object?-Property?NumberOfLicensedUsers,NumberOfUsers,RegisteredUser使用通配符的更簡潔版本是:
Get-WmiObject?-Class?Win32_OperatingSystem?-ComputerName?.?|?Select-Object?-Property?*user*獲得可用磁盤空間
若要查看本地驅動器的磁盤空間和可用空間,可以使用 WMI Win32_LogicalDisk 類。這需要只顯示 DriveType 為 3(這是 WMI 為固定硬盤分配的值)的實例。
Get-WmiObject?-Class?Win32_LogicalDisk?-Filter?"DriveType=3"?-ComputerName?.DeviceID?????:?C: DriveType????:?3 ProviderName?: FreeSpace????:?65541357568 Size?????????:?203912880128 VolumeName???:?Local?DiskDeviceID?????:?Q: DriveType????:?3 ProviderName?: FreeSpace????:?44298250240 Size?????????:?122934034432 VolumeName???:?New?VolumePS>?Get-WmiObject?-Class?Win32_LogicalDisk?-Filter?"DriveType=3"?-ComputerName?.?|?Measure-Object?-Property?FreeSpace,Size?-SumGet-WmiObject?-Class?Win32_LogicalDisk?-Filter?"DriveType=3"?-ComputerName?.?|?Measure-Object?-Property?FreeSpace,Size?-Sum?|?Select-Object?-Property?Property,Sum獲得登錄會話信息
通過 WMI Win32_LogonSession 類可以獲得與用戶關聯的登錄會話的常規信息:
Get-WmiObject?-Class?Win32_LogonSession?-ComputerName?.獲得登錄到計算機的用戶
使用 Win32_ComputerSystem 可以顯示登錄到特定計算機系統的用戶。此命令只返回登錄到系統桌面的用戶:
Get-WmiObject?-Class?Win32_ComputerSystem?-Property?UserName?-ComputerName?.從計算機獲得本地時間
使用 WMI Win32_LocalTime 類可以在特定計算機上檢索當前本地時間。因為默認情況下此類顯示所有元數據,所以可能需要使用 Select-Object 對這些數據進行篩選:
PS>?Get-WmiObject?-Class?Win32_LocalTime?-ComputerName?.?|?Select-Object?-Property?[a-z]*Day??????????:?15 DayOfWeek????:?4 Hour?????????:?12 Milliseconds?: Minute???????:?11 Month????????:?6 Quarter??????:?2 Second???????:?52 WeekInMonth??:?3 Year?????????:?2006顯示服務狀態
若要查看特定計算機上所有服務的狀態,可以像前面提到的那樣在本地使用 Get-Service cmdlet。對于遠程系統,可以使用 WMI Win32_Service 類。如果還使用 Select-Object 來篩選 Status、Name 和 DisplayName 的結果,則輸出格式將與 Get-Service 的輸出幾乎相同。
Get-WmiObject?-Class?Win32_Service?-ComputerName?.?|?Select-Object?-Property?Status,Name,DisplayName若要允許完整顯示名稱非常長的臨時服務的名稱,可能需要使用帶有 AutoSize 和 Wrap 參數的 Format-Table 命令,以優化列寬并允許長名稱換行而不被截斷:
Get-WmiObject?-Class?Win32_Service?-ComputerName?.?|?Format-Table?-Property?Status,Name,DisplayName?-AutoSize?-Wrap轉載于:https://blog.51cto.com/timefiles/1789522
總結
以上是生活随笔為你收集整理的PowerShell 收集计算机相关信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx中配置react-router
- 下一篇: 2个