我需要创建以下注册表项 HKLM:\software\bmc software\control-m/agent
但由于在"agent"之前的正斜杠而出现问题
创建没有正斜杠的条目我没有问题例如:
PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-mXXXagent'
但是使用正斜杠创建失败了 .
PS C:\powershell> new-item -path 'HKLM:\software\bmc software\control-m/agent'
New-Item:指定路径上的注册表项不存在 . 在行:1个字符:10个新项目<<<< -path'HKLM:\ software \ bmc software \ control-m / agent'CategoryInfo:InvalidArgument:(HKEY_LOCAL_MACH ... 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:指定路径上的注册表项不存在 . 在行:1个字符:10个新项目<<<< -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
建议将不胜感激 . 谢谢
4 回答
下面详细介绍了如何将包含正斜杠的注册表项串在一起的示例:
因此,根据您的要求,执行以下操作
这是对Ansgar指出的帖子的略微修改:
这将使用实际
/
char(0x2F)创建密钥 .除 ** 之外的任何可打印字符在注册表项的名称中都有效,但正斜杠在注册表路径中不起作用的原因是PowerShell接受正斜杠作为路径分隔符 . 因此,
New-Item -Path 'HKLM:\software\bmc software\control-m/agent'
与New-Item -Path 'HKLM:\software\bmc software\control-m\agent'
相同,即它尝试将名为 agent 的键添加到 HKLM:\software\bmc software\control-m ,该键不存在 .你有几种方法来解决这个问题 .
如果你只想要一个看起来像正斜杠的东西,并且拥有一个真正的ASCII正斜杠字符并不重要,你可以做的最简单的事就是替换unicode division斜杠 . 您可以将其插入到双引号字符串中,如下所示:
(如果你把所有内容放在 -Path 参数中,那也有效,但它必须担心路径其余部分中的特殊字符 . )
如果它需要是ASCII正斜杠,您可以使用Ansgar Wiechers链接的帖子中的方法并由Keith Hill详细说明,或者您可以使用.NET创建子键:
OpenRemoteBaseKey 方法的第一个参数指定注册表配置单元 . 对于HKCU中的密钥,请将 LocalMachine 更改为 CurrentUser .
第二个参数指定指定将访问其注册表的计算机的名称 . 如果远程注册表服务正在该计算机上运行,则可以指定远程计算机 .
您可能需要在PowerShell中嵌入DOS命令 .