Windows PowerShell 是一種命令行外殼程序和腳本環境,使命令行用戶和腳本編寫者可以利用 .NET Framework 的強大功能。它引入了許多非常有用的新概念,從而進一步擴展了您在 Windows 命令提示符和 Windows Script Host 環境中獲得的知識和創建的腳本。本教程就為大家講解WMI中的WindowsPowerShell腳本使用.
WMI由三種基礎元素組成:
1.Provider -- 批准訪問管理對象並提供有效的WMI API
2.Classes -- 對象有屬性和方法的WMI陳述
3.Namespace -- 類的邏輯分組
那麼PowerShell是如何做到讓WMI的訪問更加容易的呢?
首先,讓我們來了解一下PowerShell為WMI提供的工具。總體來說有5個PowerShell 命令集,這讓WMI的使用簡單容易。這裡我將把它們都列出來,但是我接下來只會著重講其中一個(Get-WMIObject):
1.Get-WmiObject—— 基於命名空間和提供的類別返回對象
2.Invoke-WmiMethod——調用WMI程序(通常用於執行靜態程序)
3.Register-WmiEvent——用於訂閱WMI事件
4.Remove-WmiObject -- 刪除一個現有的WMI類的實例(要清楚,它實際並沒有刪除類本身,而是在內存中這個類的實例)
5.Set-WmiInstance -- 創建或更新一個現有WMI類的實例(要謹慎地使用它,因為它實際上會寫入WMI庫)
現在讓我們來解決WMI中最大的難題,搞清楚它究竟是什麼,並且能提供什麼數據。
你可以依靠下面的代碼來寫程序:
$Root = "\\.\ROOT:__namespace"
$WMIProv = New-Object System.Management.ManagementClass
($Root)
$WMIProv.GetInstances() | Select Name(但是,這比其它任務更復雜些。幸運的是,你不用經常這麼做。)
下面是你通過特定命名空間列出提供類的方法(默認是Root\CIM2,它包括所有的Microsoft Win32類):
# On local machine
Get-WmiObject –Namespace Root\SecurityCenter –List
# On Remote machine
Get-WmiObject –Namespace Root\SecurityCenter –List
–Computer core
# To filter you can use wildcards
Get-WmiObject –Namespace Root\SecurityCenter –List
*firewall*
# To list the classes for HyperV on remote server
Get-WmiObject –Namespace Root\Virtualization –List
–Computer core(這很艱難,但是你可以通過WMI浏覽器或微軟的PowerShell Scriptomatic等免費工具來作弊。) 上一頁12下一頁共2頁
現在是時候坐下來了解一下Get-WMIObject的不尋常之處了,它是五個命令集中最有用的一個。工具箱裡有了它,你幾乎與所有你能想到的任一塊數據(微軟相關的系統)都只有一線之隔。有超過600個Win32類,用來顯示CPU、內存、磁盤、進程、網絡、BIOS和USB等信息。激動嗎?等一下你就會知道它有多簡單。
獲取操作系統的信息:
Get-WmiObject –class win32_OperatingSystem獲取計算機系統的信息
Get-WmiObject –class win32_ComputerSystem獲取磁盤信息:
Get-WmiObject –class Win32_LogicalDisk獲取網絡信息:
Get-WmiObject –class Win32_NetworkAdapterConfiguration只要嘗試一下 - 就是那麼簡單。
讓我們看一個使用WMI獲取IP信息的例子。下面有效的腳本代替了ipconfig和它通常的awful輸出。
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{$_
-match
"\d+\.\d+\.\d+\.\d+"}
IP6 = $Nic.IPAddress | where{$_
-match "\:\:"}
IP4Subnet = $Nic.IPSubnet | where{$_
-match
"\d+\.\d+\.\d+\.\d+"}
DefaultGWY = $Nic.DefaultIPGateway |
Select -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
}
}
}你可以在微軟的網站上找到更多的關於WMI的信息,還能看到WMI術語和Win32類的列表。
看了這麼多,也許你還不了解什麼是WMI,小編順便幫你講解下, Windows Management Instrumentation(WMI)是能夠改變你日常生活的工具之一。維基百科解釋說WMI旨在“規定一個獨立環境標准的非專有設置,它讓管理應用程序之間能共享管理信息。”
上一頁12 下一頁共2頁