目的:了解如何使用Powershell使用WMI Provider
目標:1、經由Powershell Console呼叫WMI Provider來修改rigistry key和設定其default value。
2、經由Powershell Script呼叫WMI Provider來修改rigistry key和設定其default value。
WMI Provider簡介
WMI是Windows system的資訊database,經由 WMI Service連結到database來query database的資訊。
經由以下的步驟可以經由開啟WMI Control Properties來看到 WMI的詳細資訊(Name space)
1、經由Administrative Tools打開 "Computer Management"
2、展開 "Services and Applications."
3、Right-click "WMI Control" 和選擇Properties.
WMI Namespace 底下包含許多classes, class則由properties和methods所組成。我們可以經由PowerShell 來使用WMI 的class做一些系統環境的設定。
以下顯示如何使用Get-WmiObject cmdlet來list出 Namespace的classes
Example:使用Get-WmiObject cmdlet來list出root\ cimv2的classes
Get-WmiObject -List -Namespace "root\ cimv2 "
EExample:List出WMI Class的Properties和Methods
using the "Get-Member" cmdlet來list出Win32_Processor class的Properties和Methods
Get-WmiObject -Class "Win32_Processor" -Namespace "root\CIMV2" | Get-Member
Note:
或使用以下的方式
Note:
Win32 classes,例如 Win32_NetworkAdapter 或Win32_Process是在monitor和manage 系統的hardware和features。 一般而言,這些classes是屬於root\cimv2 WMI namespace。
而Win32_Processor WMI class 顯示一個device能夠interpret一系列在電腦執行的windows OS指令,在multiprocessor computer,, 每一個processor都存在一個Win32_Processor 的instance。
以下的syntax包含Win32_ Processor WMI class的所有inherited properties和MEMBER。
Syntax
[Provider("CIMWin32")]class Win32_Processor : CIM_Processor
{
uint16 AddressWidth;
uint16 Architecture;
uint16 Availability;
string Caption;
uint32 ConfigManagerErrorCode;
boolean ConfigManagerUserConfig;
uint16 CpuStatus;
string CreationClassName;
uint32 CurrentClockSpeed;
…
…
…
string SystemCreationClassName;
string SystemName;
string UniqueId;
uint16 UpgradeMethod;
string Version;
uint32 VoltageCaps;
};
Members
The Win32_Processor class has these types of members:
Methods
The Win32_Processor class has these methods.
Method
|
Description
|
Reset
|
Not implemented. For more information about how to implement this method, see the Reset method in CIM_Processor.
|
SetPowerState
|
Not implemented. For more information about how to implement this method, see the SetPowerState method in CIM_Processor.
|
Rigistry key的WMI Provider為何
System Registry Provider
The System Registry provider enables management applications to retrieve and modify data in the system registry, and receive notifications when changes occur. The registry can be located on a local or remote computer. The _Win32Provider instance name is RegProv; the property provider name is RegPropProv; and the event provider name is RegistryEventProvider. For more information, see Modifying the System Registry.
The provider has the following __Win32Provider instances:
l "RegProv"
l "RegistryEventProvider"
l "RegPropProv"
Event class
|
Description
|
Abstract class from which the other registry event classes are derived.
| |
Represents changes to a specific registry key.
| |
Represents changes to a specific key or its subkeys.
| |
Represents changes to a single value of a specific key.
| |
Contains methods that manipulate system registry keys and values.
|
StdRegProv class
The StdRegProv class contains methods that manipulate system registry keys and values. StdRegProv is preinstalled in the WMI namespaces root\default and root\cimv2.
Syntax
[Provider("RegProv"), Dynamic]class StdRegProv
{
};
Members
The StdRegProv class has these types of members:
Methods
The StdRegProv class has these methods.
Method
|
Description
|
Verifies that the user has the specified access permissions.
| |
Creates a subkey.
| |
Deletes a subkey.
| |
Deletes a named value.
| |
Enumerates subkeys.
| |
Enumerates the named values of a key.
| |
Gets the binary data value of a named value.
| |
Gets the DWORD data value of a named value.
| |
Gets the expanded string data value of a named value.
| |
Gets the multiple string data values of a named value.
| |
Gets the QWORD data values of a named value.
Windows Server 2003 and Windows XP: This method is not available.
| |
Gets the security descriptor for a key.
Windows Server 2003 and Windows XP: This method is not available.
| |
Gets the string data value of a named value.
| |
Sets the binary data value of a named value.
| |
Sets the DWORD data value of a named value.
| |
Sets the expanded string data value of a named value.
| |
Sets the multiple string values of a named value.
| |
Sets the QWORD data values of a named value.
Windows Server 2003 and Windows XP: This method is not available.
| |
Sets the security descriptor for a key.
Windows Server 2003 and Windows XP: This method is not available.
| |
Sets the string value of a named value.
|
Remarks
StdRegProv supplies only methods
Example:使用Get-WmiObject cmdlet來list出root\default的classes
Get-WmiObject -List -Namespace "root\default"
Note:
StdRegProv 必須下以下的command(額外加-list),才能使用GET-MEMBER
Along with creating instance of a WMI class, the Get-WMIObject cmdlet can also used for listing the WMI classes using the -list parameter. Once we have that list, we can filter any of the specific classes we want through this list.
Powershell如何使用WMI Provider
使用以下的sample來示範,主要為呼叫WMI Provider的StdRegProv class來新增registry key和設定default的value。
l Method1、使用Powershell console
1、設定變數
Note:
變數也可以使用以下的方式宣告
看變數的宣告值為何
讀取單一的變數值
2、connect到WMI的StdRegProv class
使用$objService = [WMIClass] "root\default: StdRegProv"
或則
$objService = Get-WmiObject -class StdRegProv -Namespace "root\default″ -list
或則
$objService = Get-WmiObject –Namespace "root\default" –List | where-object { $_.Name –eq "StdRegProv" }
或則
$objService =new-object System.Management.ManagementClass "Root\default:StdRegProv"
Note:
連結到StdRegProv class,可以使用get-member來查看method
3、新增一個registry sub Key
Note:
return value為0,才算成功。
如果不適使用administraor權限來執行,會得到以下的return value。
4、新增一個registry value Key和設定default value
Note:
如果下以下的語法,則會新增一個registry key (MyValueName)
5、結果如下:
l Method2、使用power shell script
###$regKey = @{ "HKEY_CLASSES_ROOT" = 2147483648; "HKEY_CURRENT_USER" = 2147483649;
###"HKEY_LOCAL_MACHINE" = 2147483650; "HKEY_USERS" = 2147483651; "HKEY_CURRENT_CONFIG" = ###2147483653 }
###$strComputer = "."
HKEY_LOCAL_MACHINE" = 2147483650
$strSubkeyname = "SOFTWARE\MyKey"
$strValue=" MyValue"
###$objService = Get-WmiObject –Namespace "root\default" –List | where-object { $_.Name –eq ###"StdRegProv" }
###$objService = [WMIClass] "root\default: StdRegProv"
###$objService = Get-WmiObject –class StdRegProv -Namespace "root\CIMV2″ -ComputerName $strComputer
$objService = [WMIClass] "root\default: StdRegProv"
$objService.CreateKey($HKEY_LOCAL_MACHINE, $strSubkeyname)
$objService.SetStringValue($HKEY_LOCAL_MACHINE, $strSubkeyname, "", $strValue)
2、使用powershell console執行script檔。
沒有留言:
張貼留言