程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 【探索PowerShell 】【十三】WMI對象

【探索PowerShell 】【十三】WMI對象

編輯:關於.NET

我記得在xp時代,經常使用的工具有一個叫做WMI Administrative Tools,是微軟官方提供的用來查看、編輯WMI對象的,只是現在好似不支持新的系統了。但是,在Win7、Server 2008下,這些功能都可以方便的通過PowerShell來完成。

首先,先來認識一下什麼是WMI對象:

WMI是作為一個基本的數據庫存在於Windows系統中的。我們可以連接到WMI服務請求查詢其中所包含的信息。WMI包括了系統方方面面的信息,包括:

•  機器信息:制造商、型號、序列號等

•  BIOS信息

•  OS信息

•  CPU信息:種類、制造商、速度、版本

•  服務器內存總量

•  磁盤信息:容量、格式等

•  網絡信息:MAC、IP等

•  其他

可以看出WMI內容是多麼的豐富,幾乎包括了計算機的方方面面。

利用PowerShell查看WMI成員

在PowerShell中通過以下命令列出WMI對象:

get-wmiObject -list -namespace “root\CIMV2″ <enter>

需要具體查看某個類的成員,使用下面的命令(例如類"win32_process"):

get-wmiobject -class win32_process -namespace "root\cimv2" | get-member

可以看到每個有的成員是屬性(Property),而有的則是方法(Method)。

那麼,有兩個問題:

為什麼要使用-namespace "root\cimv2"? 

cimv2是WMI的一個命名空間,每個命名空間下有不同的WMI對象成員。cimv2是其默認設置。可以按照以下步驟進行修改:

控制面板 -> 管理工具 -> 計算機管理 -> 服務和應用程序 -> 右鍵"WMI控制" -> 屬性 -> 高級

參數"-namespace"並非必須,但是,使用它有兩個好處,一是保證我們能准確的查看指定命名空間下的WMI對象,因為有時默認命名空間並非我們所希望查看的;二是如果不指定命名空間,被設置過的計算機可能拒絕我們的訪問請求。

注:因為我使用英文版系統,上述步驟中個別名稱可能不准確。

在如上圖所示的界面,即可修改默認路徑。

另一個問題是,查看成員的類型有什麼用?

如果一個成員是方法,那麼,我們可以調用它。如果一個成員是屬性,我們則可以查看它的值。但是,需要注意的是,不同的屬性成員有不同的數據結構,有的是"System.String",有的是"System.UInt32",有的則是"System.String[ ]",在使用時,應當注意數據格式,否則會報錯的。

如果我們需要管理網絡中的計算機,則需要指定計算機名稱:

get-wmiObject -list -namespace “root\CIMV2″ -computername 計算機名 <enter>

好了,現在來具體操作,查看具體信息。

例:

查看BIOS信息

get-wmiobject -class win32_bios -namespace "root\cimv2" <enter>

運行結果:

查看服務信息

get-wmiobject -class win32_service -namespace "root\cimv2" | format-list * <enter>

查看機器信息

get-wmiobject -class win32_computersystem | format-list * <enter>

在網絡管理環境中的多數情況下,我們可能要查看不同的計算機信息,因此,就需要使用計算機這一參數,例如:

查詢本地計算機的網絡信息

$name="."

$items = get-wmiObject -class win32_NetworkAdapterConfiguration '
-namespace "root\CIMV2" -ComputerName $name | where{$_.IPEnabled -eq “True”}

foreach($obj in $items) {
Write-Host "DHCP Enabled:" $obj.DHCPEnabled
Write-Host "IP Address:" $obj.IPAddress
Write-Host "Subnet Mask:" $obj.IPSubnet
Write-Host "Gateway:" $obj.DefaultIPGateway
Write-Host "MAC Address:" $ojb.MACAddress
}

如果查詢對象是其他機器,只需給變量"$name"賦與其他值即可。

例如:

$name=read-host "Enter Computer Name"
write-host "Computer:"$name

$items = get-wmiObject -class win32_NetworkAdapterConfiguration '
-namespace "root\CIMV2" -ComputerName $name | where{$_.IPEnabled -eq “True”}

foreach($obj in $items) {
Write-Host "DHCP Enabled:" $obj.DHCPEnabled
Write-Host "IP Address:" $obj.IPAddress
Write-Host "Subnet Mask:" $obj.IPSubnet
Write-Host "Gateway:" $obj.DefaultIPGateway
Write-Host "MAC Address:" $ojb.MACAddress
}

配合更多的查詢命令,便可以方便的寫出一個查詢計算機信息的腳本,在本教程的結束部分,我會盡可能多的提供各種常用腳本。本節內容就先寫到這裡。

出處http://marui.blog.51cto.com/1034148/296083

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved