注册表上的复制项 + 排除



由于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
}

最新更新