如何在名称中使用正斜杠创buildregistry项

我需要创build以下registryHKLM:\software\bmc software\control-m/agent但由于在“代理程序”之前的正斜杠,

我没有问题创build一个没有正斜杠的条目例如:

 PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-mXXXagent' 

但用正斜杠创build失败。

 PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-m/agent' 

New-Item:指定path的registry项不存在。 在行:1 char:10 + new-item <<<< -path'HKLM:\ software \ bmc software \ control-m / agent'+ CategoryInfo:InvalidArgument:(HKEY_LOCAL_MACHINE; tware \ control-m:String) [New-Item],ArgumentExceptio n + FullyQualifiedErrorId:System.ArgumentException,Microsoft.PowerShell.Commands.NewItemCommand

而使用PowerShell的“转义字符”也无济于事。

 PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-m`/agent' 

New-Item:指定path的registry项不存在。 在行:1 char:10 + new-item <<<< -path'HKLM:\ software \ bmc software \ control-m /agent' + CategoryInfo : InvalidArgument: (HKEY_LOCAL_MACH...ware\control-m :String) [New-Item],ArgumentExceptio n + FullyQualifiedErrorId:System.ArgumentException,Microsoft.PowerShell.Commands.NewItemCommand

和build议,将不胜感激。 谢谢

Solutions Collecting From Web of "如何在名称中使用正斜杠创buildregistry项"

这是Ansgar指出的这个帖子的一个小小的修改:

 new-item -path 'HKLM:\software\bmc software' $key = (get-item HKLM:\).OpenSubKey("SOFTWARE\bmc software", $true) $key.CreateSubKey('control-m/agent') $key.Close() 

这将使用实际的/ char(0x2F)创建密钥。

\之外的任何可打印字符在注册表项中都是有效的,但正斜杠在注册表路径中不起作用的原因是PowerShell接受正斜杠作为路径分隔符。 所以, New-Item -Path 'HKLM:\software\bmc software\control-m/agent'New-Item -Path 'HKLM:\software\bmc software\control-m\agent' ,将名为代理的密钥添加到HKLM:\ software \ bmc software \ control-m中 ,该密钥不存在。

你有几个选择来解决这个问题。

如果你只想要一些看起来像正斜杠的东西,并且有一个真正的ASCII正斜杠字符并不重要,那么最简单的办法就是替换unicode除法。 你可以插入到一个双引号的字符串,如下所示:

 New-Item -Path 'HKLM:\software\bmc software' -Name "control-m$([char]0x2215)agent" 

(如果你把所有的东西放在-Path参数中,这也是有效的,但是这样做可能是一个好习惯,所以你不必担心路径其余部分的特殊字符。)

如果需要ASCII正斜杠,可以使用Ansgar Wiechers链接的方法,由Keith Hill详细阐述,也可以使用.NET创建子项:

 ([Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $env:COMPUTERNAME)).CreateSubKey('Software\bmc software\control-m/agent') 
  • OpenRemoteBaseKey方法的第一个参数指定注册表配置单元。 对于HKCU中的密钥,将LocalMachine更改为CurrentUser
  • 第二个参数指定指定要访问其注册表的计算机的名称。 如果远程注册表服务正在该计算机上运行,​​则可以指定远程计算机。

您可能需要在PowerShell中嵌入DOS命令。

 $PathCMD = "HKEY_LOCAL_MACHINE\Software\BMC Software" $command = 'cmd.exe /C reg.exe add "$PathCMD\control-m/agent"' Invoke-Command -Command $ExecutionContext.InvokeCommand.NewScriptBlock($command) 

以下详细说明如何将注册表项(包括正斜杠)串起来:

 $value = "2048" $value1 = "0" $regpath = "hklm:\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters" $name = "MaxCmds" $name1 = "RequireSecuritySignature" $PropertyType = "Dword" New-ItemProperty -path $regpath -name $name -value $value -PropertyType $PropertyType Set-ItemProperty -path $regpath -name $name1 -value $value1 

因此,为了您的要求做到以下几点:

 $name1 = "something with a /"