Expanded strings are strings that can include variables; these variables are resolved when an application or a service uses the value. For example, the value of an entry that references a file might include the variable %systemroot%. When a service, such as the Event Log, references the entry, the %systemroot% variable is replaced by the name of the directory containing the Windows system files (for example, C:\Windows). On a different computer, one with Windows installed on drive D, this same registry value might be replaced by D:\Windows.
If you need to create an entry that includes a value that might change, such as the path environment variable or the location of the current user’s profile, you can use the SetExpandedStringValue method.
The Create Expanded String Values VBScript sample uses WMI to create an expanded string value under the HKLM\SOFTWARE\System Admin Scripting Guide portion of the registry.
The following VBScript code example shows how to use the SetExpandedStringValue method. The script first creates a new key then creates a new expanded string value under the key.
Example
Do not run below example code just to see what happens next. Many methods seriously affect your system. Always make sure you actually understand what the method and the code do.
param
(
[Parameter(Mandatory)]
[UInt32]
$hDefKey,
[Parameter(Mandatory)]
[String]
$sSubKeyName,
[Parameter(Mandatory)]
[String]
$sValue,
[Parameter(Mandatory)]
[String]
$sValueName
)
Invoke-CimMethod -ClassName StdRegProv -MethodName SetExpandedStringValue -Arguments $PSBoundParameters
To run this method on one or more remote systems, use New-CimSession
:
param
(
[Parameter(Mandatory)]
[UInt32]
$hDefKey,
[Parameter(Mandatory)]
[String]
$sSubKeyName,
[Parameter(Mandatory)]
[String]
$sValue,
[Parameter(Mandatory)]
[String]
$sValueName,
[String[]]
$ComputerName,
[PSCredential]
$Credential
)
$session = New-CimSession -ComputerName $ComputerName -Credential $Credential
Invoke-CimMethod -ClassName StdRegProv -MethodName SetExpandedStringValue -Arguments $PSBoundParameters -CimSession $session
Remove-CimSession -CimSession $session
Learn more about
Invoke-CimMethod
and invoking WMI methods.
Syntax
uint32 SetExpandedStringValue(
[in] uint32 hDefKey = HKEY_LOCAL_MACHINE,
[in] string sSubKeyName,
[in] string sValueName,
[in] string sValue =
);
Parameters
Name | Type | Description |
---|---|---|
hDefKey | UInt32 | Optional parameter that specifies the tree that contains the sSubKeyName path. The default value is HKEY_LOCAL_MACHINE (0x80000002). The following trees are defined in Winreg.h: HKEY_CLASSES_ROOT (0x80000000) HKEY_CURRENT_USER (0x80000001) HKEY_LOCAL_MACHINE (0x80000002) HKEY_USERS (0x80000003) HKEY_CURRENT_CONFIG (0x80000005) HKEY_DYN_DATA (0x80000006) Note that HKEY_DYN_DATA is a valid tree for Windows 95 and Windows 98 computers only. |
sSubKeyName | String | Specifies the key that contains the named value to be set. |
sValue | String | Specifies an expanded string data value. The environment variable specified in the string must exist for the string to be expanded when you call GetExpandedStringValue. |
sValueName | String | Specifies the named value whose data value you are setting. You can specify an existing named value (update) or a new named value (create). Specify an empty string to set the data value for the default named value. |
hDefKey
[Flags()]Enum StdRegProvhDefKey
{
HKEY_CLASSES_ROOT = 2147483648 #
HKEY_CURRENT_USER = 2147483649 #
HKEY_LOCAL_MACHINE = 2147483650 #
HKEY_USERS = 2147483651 #
HKEY_CURRENT_CONFIG = 2147483653 #
}
Return Value
Returns a value of type UInt32. Typically, a value of 0 indicates success.
See Also
Additional methods implemented by StdRegProv:
CheckAccess()
CheckAccess() verifies that the user has the specified access permissions.
CreateKey()
CreateKey() creates a subkey.
DeleteKey()
DeleteKey() deletes a subkey.
DeleteValue()
DeleteValue() deletes a named value.
EnumKey()
EnumKey() enumerates subkeys.
EnumValues()
EnumValues() enumerates the named values of a key.
GetBinaryValue()
GetBinaryValue() gets the binary data value of a named value.
GetDWORDValue()
GetDWORDValue() gets the DWORD data value of a named value.
GetExpandedStringValue()
GetExpandedStringValue() gets the expanded string data value of a named value.
GetMultiStringValue()
GetMultiStringValue() gets the multiple string data values of a named value.
GetQWORDValue()
GetQWORDValue() gets the QWORD data values of a named value.
GetSecurityDescriptor()
GetSecurityDescriptor() gets the security descriptor for a key.
GetStringValue()
GetStringValue() gets the string data value of a named value.
SetBinaryValue()
SetBinaryValue() sets the binary data value of a named value.
SetDWORDValue()
SetDWORDValue() sets the DWORD data value of a named value.
SetMultiStringValue()
SetMultiStringValue() sets the multiple string values of a named value.
SetQWORDValue()
SetQWORDValue() sets the QWORD data values of a named value.
SetSecurityDescriptor()
SetSecurityDescriptor() sets the security descriptor for a key.
SetStringValue()
SetStringValue() sets the string value of a named value.
Requirements
To use StdRegProv, the following requirements apply:
PowerShell
Get-CimInstance
was introduced with PowerShell Version 3.0, which in turn was introduced on clients with Windows 8 and on servers with Windows Server 2012.
If necessary, update Windows PowerShell to Windows PowerShell 5.1, or install PowerShell 7 side-by-side.
Operating System
StdRegProv was introduced on clients with Windows Vista and on servers with Windows Server 2008.
Namespace
StdRegProv lives in the Namespace Root/CIMv2. This is the default namespace. There is no need to use the -Namespace parameter in Get-CimInstance
.
Implementation
StdRegProv is implemented in Stdprov.dll and defined in RegEvent.mof. Both files are located in the folder C:\Windows\system32\wbem
:
explorer $env:windir\system32\wbem
notepad $env:windir\system32\wbem\RegEvent.mof