首页 文章

如何在名称中创建带正斜杠的注册表项

提问于
浏览
7

我需要创建以下注册表项 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 回答

  • 0

    下面详细介绍了如何将包含正斜杠的注册表项串在一起的示例:

    $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 /"
    
  • 1

    这是对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)创建密钥 .

  • 5

    除 ** 之外的任何可打印字符在注册表项的名称中都有效,但正斜杠在注册表路径中不起作用的原因是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斜杠 . 您可以将其插入到双引号字符串中,如下所示:

    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 .

    • 第二个参数指定指定将访问其注册表的计算机的名称 . 如果远程注册表服务正在该计算机上运行,则可以指定远程计算机 .

  • -1

    您可能需要在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)
    

相关问题