Короче говоря, я случайно поцарапал мой каталог реестра HKLM\SYSTEM, пытаясь исправить разрешения WinApps, которые были изменены с помощью патча безопасности Windows.

На данный момент моя система полностью не может загрузиться с сообщением BSOD о « недоступном загрузочном устройстве », вызванном моими изменениями. я пробовал

  • изменение значений ключей реестра для включения AHCI
  • Безопасный режим
  • SFC / SCANNOW + CHKDSK
  • Проверка наличия пакетов в DISM
  • Перемещение файлов из Regback в / config
  • импортировать мою рабочую резервную копию SYSTEM.reg в реестр в командной строке восстановления Windows и WinPE

    Один из них, как правило, будет работать, но моя проблема вызвана нежелательным системным реестром.

Мне нужно создать файл SYSTEM HIVE из моего .Резервная копия REG каталога HKLM\SYSTEM .

Я думал, что это будет очень простое решение, но единственное, что мне удалось найти по этой теме, - это случайный пост MSDN, сделанный несколько лет назад, который, кажется, достиг бы того, чего я хочу, но я не могу получить скрипт работать. (https://blogs.msdn.microsoft.com/sergey_babkins_blog/2014/11/10/how-to-create-a-brand-new-registry-hive/)

  • Попытка запустить свой сценарий как .bat возвращает ошибку, в которой говорится: function' is not recognized as an internal or external command, operable program or batch file.
  • Попытка запустить .bat в 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.

Если кто-нибудь знает, как заставить работать вышеуказанный скрипт powershell, пожалуйста, дайте мне знать.

1 ответ1

2

Сценарий, который вы связали, является сценарием PowerShell, его необходимо сохранить с расширением .ps1 и выполнить в PowerShell.

Можете ли вы попробовать сохранить его как файл .ps1 и запустить его, решит ли это ваши проблемы?

Редактировать:

Содержимое вашего файла .ps1 должно быть:

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

А затем просто измените этот C:\MyHive.reg чтобы он указывал на ваш файл .reg, а HiveName - на имя создаваемого куста .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .