For a legacy application, I need to create a registry key with a name in the format c:/foo/bar/baz
. (Note: forward slashes, not backslashes.) To be clear: that is a single key's name, with forward slashes, that otherwise looks like a Windows path. Because I need to script this against lots of servers, PowerShell seems like a great option.
The problem is that I cannot figure out how to create a key in that format via PowerShell. New-Item -Path HKLM:\SOFTWARE\Some\Key -Name 'c:/foo/bar/baz'
errors out with PowerShell thinking I'm using /
as a path separator and failing to find the path HKLM:\Software\Some\Key\c:\foo\bar
, which does indeed not exist (and shouldn't). I can't find any other way to (ab)use New-Item
to get what I want.
Is there something I'm missing, or should I give up and just generate and load a registry dump the old-fashioned way?
You need to do two things. First you need to get a writable RegistryKey
object, otherwise you can't modify anything anyway. Second, use the CreateSubKey
method on the RegistryKey
object directly.
$writable = $true
$key = (get-item HKLM:\).OpenSubKey("SOFTWARE", $writable).CreateSubKey("C:/test")
$key.SetValue("Item 1", "Value 1")
After you create the key you use the resulting object to add values to it.
来源:https://stackoverflow.com/questions/16149175/creating-a-registry-key-with-path-components-via-powershell