我正在尝试使用带有Copy-Item
和-Recurse
参数的Powershell -Force
命令行开关从一个注册表项复制设置,并在另一个键中覆盖相同的设置(如果存在)。如果我在文件系统上使用相同的命令,那么源和目标中存在的任何文件夹都将被覆盖在目标中。
但是,在注册表上使用此命令时,如果目标中存在密钥,则会将源密钥复制为子项。例如:
开始状态:
HKCU:Software\OldVendor\Program
HKCU:Software\OldVendor\Program\Setting1
HKCU:Software\OldVendor\Program\Setting2
HKCU:Software\NewVendor\Program
HKCU:Software\NewVendor\Program\Setting1
HKCU:Software\NewVendor\Program\Setting2
现在,如果我运行此命令:
Copy-Item -Path "HKCU:Software\OldVendor\Program" -Destination "HKCU:Software\NewVendor" -Recuse -Force
我希望保持相同的结构。实际上,NewVendor下的结构如下所示:
HKCU:Software\NewVendor\Program
HKCU:Software\NewVendor\Program\Setting1
HKCU:Software\NewVendor\Program\Setting1\Setting1
HKCU:Software\NewVendor\Program\Setting2
HKCU:Software\NewVendor\Program\Setting2\Setting2
有谁能告诉我如何让Powershell覆盖现有的注册表项,而不是复制到子项?
答案 0 :(得分:-1)
在我看来,你想要复制项目及其值,这些是属性,而不是键。您可以按如下方式列出它们:
get-itemproperty "HKCU:Software\NewVendor\Program"
或者您可以使用别名并省略引号:
gp HKCU:Software\NewVendor\Program
另一种更好的方法,它不会查看PowerShell特定的属性:
Get-Item HKLM:\SOFTWARE\NewVendor\Program | select -ExpandProperty Property
因此,如果您想将所有属性从一个键复制到另一个键:
Get-Item HKLM:\SOFTWARE\Program | select -ExpandProperty Property | % {Copy-ItemProperty -Path HKLM:\SOFTWARE\Program -Destination HKLM:\SOFTWARE\AnotherProgram -Name $_ -Verbose}
您必须使用foreach循环,因为Copy-ItemProperty cmdlet只能复制一个已指定的属性。