萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Windows XP 教學

Windows PowerShell 操作 WMI 實戰:從命名空間查詢到系統資訊自動化腳本

WMI 三大核心元素

  • Provider:授權存取管理物件、提供 WMI API。
  • Classes:物件屬性與方法的陳述 (如 Win32_OperatingSystem)。
  • Namespace:類別的邏輯分組 (預設 Root\CIMV2 包含所有 Win32 類別)。

PowerShell 五大 WMI 指令

  1. Get-WmiObject:依命名空間與類別傳回物件 (最常用)。
  2. Invoke-WmiMethod:呼叫 WMI 方法 (常用於靜態方法)。
  3. Register-WmiEvent:訂閱 WMI 事件。
  4. Remove-WmiObject:刪除現有 WMI 類別實例 (不刪除類別本身)。
  5. Set-WmiInstance:建立或更新 WMI 類別實例 (會寫入 WMI 儲存庫,謹慎使用)。

探索 WMI 命名空間與類別

# 本機列出 SecurityCenter 命名空間所有類別
Get-WmiObject -Namespace Root\SecurityCenter -List

# 遠端主機 core 列出同樣內容
Get-WmiObject -Namespace Root\SecurityCenter -List -Computer core

# 使用萬用字元過濾
Get-WmiObject -Namespace Root\SecurityCenter -List *firewall*

# 遠端主機列出 Hyper-V 虛擬化類別
Get-WmiObject -Namespace Root\Virtualization -List -Computer core

提示:亦可用 WMI Explorer 或 Microsoft PowerShell Scriptomatic 等工具輔助查找。

Get-WmiObject 實戰範例

# 作業系統資訊
Get-WmiObject -Class Win32_OperatingSystem

# 電腦系統資訊
Get-WmiObject -Class Win32_ComputerSystem

# 邏輯磁碟資訊
Get-WmiObject -Class Win32_LogicalDisk

# 網路介面卡設定 (含 IP、MAC、閘道、DNS)
Get-WmiObject -Class Win32_NetworkAdapterConfiguration

進階腳本:自動擷取 IP 設定資訊

function Get-IP {
    [CmdletBinding()]
    Param(
        [Alias('dnsHostName')]
        [Parameter(ValueFromPipelineByPropertyName=$true, ValueFromPipeline=$true)]
        [string]$ComputerName = $Env:COMPUTERNAME
    )
    Process {
        $NICs = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='True'" -ComputerName $ComputerName
        foreach ($Nic in $NICs) {
            $myobj = @{
                Name        = $Nic.Description
                MacAddress  = $Nic.MACAddress
                IP4         = $Nic.IPAddress | Where-Object { $_ -match '\d+\.\d+\.\d+\.\d+' }
                IP6         = $Nic.IPAddress | Where-Object { $_ -match '::' }
                IP4Subnet   = $Nic.IPSubnet | Where-Object { $_ -match '\d+\.\d+\.\d+\.\d+' }
                DefaultGWY  = $Nic.DefaultIPGateway | Select-Object -First 1
                DNSServer   = $Nic.DNSServerSearchOrder
                WINSPrimary = $Nic.WINSPrimaryServer
                WINSSecondary = $Nic.WINSSecondaryServer
            }
            $obj = New-Object PSObject -Property $myobj
            $obj.PSTypeNames.Clear()
            $obj.PSTypeNames.Add('BSonPosh.IPInfo')
            $obj
        }
    }
}

此腳本取代 ipconfig,輸出結構化物件便於後續處理。更多 WMI 術語與 Win32 類別列表請參考 Microsoft 官方文件。

什麼是 WMI?

Windows Management Instrumentation (WMI) 定義非專屬、環境獨立的標準,讓管理應用程式共享管理資訊,是改變日常運維效率的利器。

copyright © 萬盛學電腦網 all rights reserved