1

我正在尝试使用Copy-Item带有-Recurseand-Force参数的 Powershell 命令行开关从一个注册表项复制设置并覆盖另一个注册表项中的相同设置(如果它们存在)。如果我在文件系统上使用相同的命令,那么源和目标中存在的任何文件夹都将在目标中被覆盖。

但是,在注册表上使用此命令时,如果目标中存在存在的键,则源键将被复制为子键。例子:

起始状态:

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 覆盖现有的注册表项,而不是复制到子项?

4

1 回答 1

-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 只能复制指定的一个属性。

于 2014-05-20T18:42:25.090 回答