Como criar um arquivo de seção de registro a partir de um backup .reg

0

Para encurtar a história, eu acidentalmente atropelei meu diretório HKLM \ SYSTEM tentando corrigir as permissões do WinApps que foram alteradas com um patch de segurança do Windows.

A partir de agora, meu sistema é completamente incapaz de inicializar com uma mensagem BSOD de " dispositivo de inicialização inacessível " causada por minhas alterações. Eu tentei

  • alterando valores de chaves do Registro para ativar o AHCI
  • Modo de segurança
  • sfc / scannow + chkdsk
  • Verificando pacotes pendentes no DISM
  • Mover arquivos do Regback para / config
  • importando meu backup de trabalho de SYSTEM.reg para o registro no prompt de comando de recuperação do Windows e WinPE

    Um deles normalmente funcionaria, mas meu problema é causado por um registro de sistema de lixo eletrônico.

Eu preciso criar um arquivo SYSTEM HIVE do meu backup .REG do diretório HKLM \ SYSTEM .

Eu achei que essa seria uma solução muito simples, mas a única coisa que consegui encontrar sobre esse tópico é uma postagem aleatória do MSDN de anos atrás que parece que ela realizaria o que eu quero, mas não posso faça o script funcionar. ( link )

  • Tentando executar o script como um .bat retorna um erro informando: function' is not recognized as an internal or external command, operable program or batch file.
  • Tentando executar o .bat em retornos do powershell: merge.bat : The term 'merge.bat' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Se alguém souber como colocar o script PowerShell acima para funcionar, informe-nos.

    
por Toast 25.07.2018 / 21:43

1 resposta

2

O script que você vinculou é um script do PowerShell, ele precisa ser salvo com uma extensão .ps1 e executado no PowerShell.

Você pode tentar salvá-lo como um arquivo .ps1 e executá-lo? Isso resolve seus problemas?

Editar:

O conteúdo do seu arquivo .ps1 deve ser:

function ConvertTo-RegistryHive
{
<#
.SYNOPSIS
Convert a registry-exported  text (contents of a .reg file) to a binary registry hive file.

.EXAMPLE
PS> ConvertTo-RegistryHive -Text (Get-Content my.reg) -Hive my.hive
#>
    param(
        ## The contents of registry exported (.reg) file to convert into the hive.
        [string[]] $Text,
        ## The hive file name to write the result to.
        [parameter(Mandatory=$true)]
        [string] $Hive
    )

    $basefile = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())
    $regfile = $basefile + ".reg"
    $inifile = $basefile + ".ini"
    $subkey = [System.Guid]::NewGuid().ToString()

    &{
        foreach ($chunk in $Text) {
            foreach ($line in ($chunk -split "'r")) {
                $line -replace "^\[\w*\\w*","[HKEY_LOCAL_MACHINE\$subkey"
            }
        }
    } | Set-Content $regfile

    # Since bcdedit stores its data in the same hives as registry,
    # this is the way to create an almost-empty hive file.
    bcdedit /createstore $Hive
    if (!$?) { throw "failed to create the new hive '$Hive'" }

    reg load "HKLM\$subkey" $Hive
    if (!$?) { throw "failed to load the hive '$Hive' as 'HKLM\$subkey'" }

    try {
        # bcdedit creates some default entries that need to be deleted,
        # but first the permissions on them need to be changed to allow deletion
@"
HKEY_LOCAL_MACHINE\$subkey\Description [1]
HKEY_LOCAL_MACHINE\$subkey\Objects [1]
"@ | Set-Content $inifile
        regini $inifile
        if (!$?) { throw "failed to change permissions on keys in 'HKLM\$subkey'" }
        Remove-Item -LiteralPath "hklm:\$subkey\Description" -Force -Recurse
        Remove-Item -LiteralPath "hklm:\$subkey\Objects" -Force -Recurse

        # now import the file contents
        reg import $regfile
        if (!$?) { throw "failed to import the data from '$regfile'" }
    } finally {
        reg unload "HKLM\$subkey"
        Remove-Item -LiteralPath $inifile -Force
    }

    Remove-Item -LiteralPath $regfile -Force
}

ConvertTo-RegistryHive -Text (Get-Content C:\MyHive.reg) -Hive HiveName

Em seguida, altere esse C:\MyHive.reg para apontar para o arquivo .reg e HiveName para o nome da seção a ser criada.

    
por 26.07.2018 / 00:49