Using Powershell 5.1, I am trying to create a registry value under:
HKLM:\SOFTWARE\Classes\.
(Note trailing period)
Unfortunately Set-ItemProperty appears to ignore the trailing . and creates the value under:
HKLM:\SOFTWARE\Classes
instead.
I'm running Powershell ISE as admin, and tested all sorts of quotes, Path & LiteralPath, back-tick escape and trailing / to no avail.
I've tried the following under a different key in case there is anything weird with Classes...
$PSVersionTable.PSVersion
New-Item -Path 'HKLM:\SOFTWARE\aTest\.' -ItemType RegistryKey -Force -ErrorAction SilentlyContinue > $null
New-Item -Path 'HKLM:\SOFTWARE\aTest\`.' -ItemType RegistryKey -Force -ErrorAction SilentlyContinue > $null
Set-ItemProperty -LiteralPath HKLM:\SOFTWARE\aTest\. -Name 'Test01' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\aTest\.' -Name 'Test02' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath "HKLM:\SOFTWARE\aTest\." -Name 'Test03' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path HKLM:\SOFTWARE\aTest\. -Name 'Test04' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path 'HKLM:\SOFTWARE\aTest\.' -Name 'Test05' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path "HKLM:\SOFTWARE\aTest\." -Name 'Test06' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath HKLM:\SOFTWARE\aTest\`. -Name 'Test07' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\aTest\`.' -Name 'Test08' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath "HKLM:\SOFTWARE\aTest\`." -Name 'Test09' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path HKLM:\SOFTWARE\aTest\`. -Name 'Test10' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path 'HKLM:\SOFTWARE\aTest\`.' -Name 'Test11' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path "HKLM:\SOFTWARE\aTest\`." -Name 'Test12' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath HKLM:\SOFTWARE\aTest\.\ -Name 'Test13' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\aTest\.\' -Name 'Test14' -Value 'emptyFile' -Verbose;
Set-ItemProperty -LiteralPath "HKLM:\SOFTWARE\aTest\.\" -Name 'Test15' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path HKLM:\SOFTWARE\aTest\.\ -Name 'Test16' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path 'HKLM:\SOFTWARE\aTest\.\' -Name 'Test17' -Value 'emptyFile' -Verbose;
Set-ItemProperty -Path "HKLM:\SOFTWARE\aTest\.\" -Name 'Test18' -Value 'emptyFile' -Verbose;
but the output shows it ignores the . unless literally escaped (when it creates a key with the back-tick in it...
Major Minor Build Revision
----- ----- ----- --------
5 1 17134 228
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test01".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test02".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test03".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test04".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test05".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test06".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test07".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\`. Property: Test08".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test09".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test10".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\`. Property: Test11".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest Property: Test12".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\ Property: Test13".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\ Property: Test14".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\ Property: Test15".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\ Property: Test16".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\ Property: Test17".
VERBOSE: Performing the operation "Set Property" on target "Item: HKEY_LOCAL_MACHINE\SOFTWARE\aTest\ Property: Test18".
Please what am I missing?
Think about the following examples:
Apparently, Powershell's
Registry
provider takes an alone period (and doubled period as well) used as a key path component by analogy to suitableFileSystem
's directory component as described in Naming Conventions:However,
reg.exe
allows to create, read, set or delete registry keys and values including.
and..
keys, see the following examples:Please note use of
HKCU
instead ofHKLM
in the latter examples for obvious reasons (security).