由于PS 2.0不支持REG_NONE值类型,我在复制整个键及其内容时遇到了一些困难。
$key = "HKCU:SoftwareMicrosoftOffice14.0Outlook"
需要将其全部内容复制到 HKCU 配置单元中的不同位置,例如:$key 2 = "HKCU:\Backup"
所以基本上它应该像以下一样简单:
Copy-Item -Path $key -Destination $key2 -Force -Recurse
但是,当 PS 尝试复制此部分时,会发生空值错误:
HKCU:SoftwareMicrosoftOffice14.0OutlookAutoDiscover
我坚持从复制项目中排除密钥的这一特定部分。
Copy-Item -Path $key -Destination $key2 -Exclude "HKCU:SoftwareMicrosoftOffice14.0OutlookAutoDiscover" -Force -Recurse
任何善良的灵魂都可以给我一个提示如何做到这一点:)?我正在寻找示例,但没有成功 atm。
Ps. 抱歉文字不那么干净。从手机编写。
问题是 Copy-Item 无法处理具有空值的二进制值,这已在版本 3 中得到解决。
跳过并记录无法复制的任何密钥的方法可能是:
$Key1 = 'HKCU:SoftwareMicrosoftOffice14.0Outlook'
$Key2 = 'HKCU:Backup'
# IF Key2 doesnt exist, create it
if(-Not (Test-Path -Path $Key2)) {
New-Item -ItemType Key -Path $Key2
}
# Get references
$SourceKey = Get-Item -Path $Key1
$TargetKey = Get-Item -Path $Key2
# List all key recursively
$FailedKeys = @(Get-ChildItem -Path $Key1 -Recurse | Foreach-Object {
# Store sourcepath
$Source = $_.PSPath
# Determine target path
$Destination = $_.PSPath.Replace($SourceKey.PSPath, $TargetKey.PSPath)
Try
{
# Try to copy
Copy-Item -Path $_.PSPath -Destination $Destination -ErrorAction Stop
}
Catch
{
# If copy fails, output the sourcepath
Write-Output $Source
}
})
if($FailedKeys.Count -gt 0) {
Write-Warning -Message 'Failed to copy the following keys:'
$FailedKeys
}