熱點推薦:
您现在的位置: 電腦知識網 >> 網絡技術 >> 正文

WMI中的Windows PowerShell腳本使用方法

2022-06-13   來源: 網絡技術 
    Windows Management Instrumentation(WMI)是能夠改變你日常生活的工具之一雖然自年代初期它就已經存在但是由於WMI的復雜性其推廣速度非常緩慢Windows PowerShell打破了這個障礙它讓WMI的使用更容易這也改變了IT行業的面貌
    在我們著重於鑽研如何用PowerShell來簡化WMI之前先讓我們來看一看什麼是WMI這是個最簡單的術語你可以認為WMI是一個充滿了查提供一致且可靠的各種格式數據的資料庫
    維基百科解釋說WMI旨在規定一個獨立環境標准的非專有設置它讓管理應用程序之間能共享管理信息這是一個相當抽象的解釋而WMI可能已經開始在做環境獨立的嘗試現在情況已經改變這些天開始思考下WMI會變成什麼樣子吧當你今天聽說WMI時它通常是通過內置供應程序用於微軟的WMI實施環境中這也是本文將要關注的點
    WMI由三種基礎元素組成
    Provider 批准訪問管理對象並提供有效的WMI API
    Classes 對象有屬性和方法的WMI陳述
    Namespace 類的邏輯分組
    那麼PowerShell是如何做到讓WMI的訪問更加容易的呢?
    首先讓我們來了解一下PowerShell為WMI提供的工具總體來說有個PowerShell 命令集這讓WMI的使用簡單容易這裡我將把它們都列出來但是我接下來只會著重講其中一個(GetWMIObject)
    GetWmiObject—— 基於命名空間和提供的類別返回對象
    InvokeWmiMethod——調用WMI程序(通常用於執行靜態程序)
    RegisterWmiEvent——用於訂閱WMI事件
    RemoveWmiObject 刪除一個現有的WMI類的實例(要清楚它實際並沒有刪除類本身而是在內存中這個類的實例)
    SetWmiInstance 創建或更新一個現有WMI類的實例(要謹慎地使用它因為它實際上會寫入WMI庫)
    現在讓我們來解決WMI中最大的難題搞清楚它究竟是什麼並且能提供什麼數據
    你可以依靠下面的代碼來寫程序
    $Root = \\\ROOT:__namespace
    $WMIProv = NewObject SystemManagementManagementClass
    ($Root)
    $WMIProvGetInstances() | Select Name(但是這比其它任務更復雜些幸運的是你不用經常這麼做
    下面是你通過特定命名空間列出提供類的方法(默認是Root\CIM它包括所有的Microsoft Win類)
    # On local machine
    GetWmiObject –Namespace Root\SecurityCenter –List
    # On Remote machine
    GetWmiObject –Namespace Root\SecurityCenter –List
    –Computer core
    # To filter you can use wildcards
    GetWmiObject –Namespace Root\SecurityCenter –List
    *firewall*
    # To list the classes for HyperV on remote server
    GetWmiObject –Namespace Root\Virtualization –List
    –Computer core(這很艱難但是你可以通過WMI浏覽器或微軟的PowerShell Scriptomatic等免費工具來作弊
    現在是時候坐下來了解一下GetWMIObject的不尋常之處了它是五個命令集中最有用的一個工具箱裡有了它你幾乎與所有你能想到的任一塊數據(微軟相關的系統)都只有一線之隔有超過個Win用來顯示CPU內存磁盤進程網絡BIOS和USB等信息激動嗎?等一下你就會知道它有多簡單
    獲取操作系統的信息
    GetWmiObject –class win_OperatingSystem獲取計算機系統的信息
    GetWmiObject –class win_ComputerSystem獲取磁盤信息
    GetWmiObject –class Win_LogicalDisk獲取網絡信息
    GetWmiObject –class Win_NetworkAdapterConfiguration只要嘗試一下 就是那麼簡單
    讓我們看一個使用WMI獲取IP信息的例子下面有效的腳本代替了ipconfig和它通常的awful輸出
    function GetIP
    {
    [Cmdletbinding()]
    Param(
    [alias(dnsHostName)]
    [Parameter(ValueFromPipelineByPropertyName=$trueValueFromPipeline=
    $true) [string]$ComputerName = $Env:COMPUTERNAME
    )
    process
    {
    $NICs = GetWmiObject
    Win_NetworkAdapterConfiguration Filter
    IPEnabled=$True ComputerName $ComputerName
    foreach ($Nic in $NICs)
    {
    $myobj = @{
    Name = $NicDescription
    MacAddress = $NicMACAddress
    IP = $NicIPAddress | where{$_
    match
    \d+\\d+\\d+\\d+}
    IP = $NicIPAddress | where{$_
    match \:\:}
    IPSubnet = $NicIPSubnet | where{$_
    match
    \d+\\d+\\d+\\d+}
    DefaultGWY = $NicDefaultIPGateway |
    Select First
    DNSServer = $NicDNSServerSearchOrder
    WINSPrimary = $NicWINSPrimaryServer
    WINSSecondary = $NicWINSSecondaryServer
    }
    $obj = NewObject PSObject Property $myobj
    $objPSTypeNamesClear()
    $objPSTypeNamesAdd(BSonPoshIPInfo
    $obj
    }
    }
    }你可以在微軟的網站上找到更多的關於WMI的信息還能看到WMI術語和Win類的列表
From:http://tw.wingwit.com/Article/Network/201311/30090.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.