PowerShell创建注册表路径一个班轮?

Vim*_*mes 20 registry powershell

使用old-school reg.exe创建一个注册表值,包括其前面的路径,如果路径已经存在则不会出错:

reg add HKCU\Software\Policies\Microsoft\Windows\EdgeUI /f /v DisableHelpSticker /t reg_sz /d 1
Run Code Online (Sandbox Code Playgroud)

这很简洁.我发现在纯PowerShell中执行此操作的最短路径是两行,如果您不想重复路径,则为三行:

$regPath = 'HKCU:\Software\Policies\Microsoft\Windows\EdgeUI'
New-Item $regPath -Force | Out-Null
New-ItemProperty $regPath -Name DisableHelpSticker -Value 1 -Force | Out-Null
Run Code Online (Sandbox Code Playgroud)

使用纯PowerShell有更简单的方法吗?并且无需添加实用功能.

arc*_*444 23

您可以New-ItemProperty按如下方式将创建行传递给该行,但请注意,该-Force标志New-Item将删除该键的任何预先存在的内容:

New-Item 'HKCU:\Software\Policies\Microsoft\Windows\EdgeUI' -Force | New-ItemProperty -Name DisableHelpSticker -Value 1 -Force | Out-Null
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚了解到New-Item的`-Force`标志会破坏所有子键/值.`-SilentlyContinue`不检索对象.我试图想出一种简单的方法来非破坏性地设置一个值,如果它不存在则创建路径,在一行中没有"if key exists ..."类型的东西.因为这对于单线程来说变得愚蠢.如果您有任何想法,请告诉我. (3认同)
  • 您可以在尝试创建密钥之前使用“ Test-Path”检查它们是否存在,如果确实存在,请检查属性。如果您要多次执行某个函数,那将是值得的。 (3认同)

小智 11

另一种简化 PS 注册表处理的方法是直接调用 .Net 函数SetValue()

[microsoft.win32.registry]::SetValue("HKEY_CURRENT_USER\Software\Test", "Test-String", "Testing")
[microsoft.win32.registry]::SetValue("HKEY_CURRENT_USER\Software\Test", "Test-DW", 0xff)
Run Code Online (Sandbox Code Playgroud)