Назад | Перейти на главную страницу

Как экспортировать HIVE реестра (NTUSER.DAT) в PowerShell

Чтобы решить проблему раздувания реестра, вызванную драйверами печати Samsung, мне нужно найти способ экспортировать перемещаемый профиль пользователя NTUSER.DAT Registry Hive в PowerShell. Загрузка и экспорт куста реестра NTUSER.DAT работает в REGEDIT, но пока я не нашел способа сделать это в PowerShell.

Сценарий PowerShell, над которым я работаю, может загружать удаленный куст реестра, удалять ключи и выгружать. Это не дает возможности удалить свободное / пустое пространство из файла куста реестра. Выполняя это вручную в REGEDIT, я смог взять раздутые файлы NTUSER.DAT размером более 150 000 КБ, а затем экспортировать их как новый куст реестра NTUSER_Clean.DAT вплоть до 780 КБ (для пользователя с относительно небольшим количеством настроек) .

Пример кода PowerShell:

Write-Host "Attempting to load the User Roaming Profile Registry HIVE (NTUSER.DAT)."
#Write-Host $strRemoteLocation
reg load "HKU\$strKeyName" $strRemoteLocation
Write-Host $strLine

Write-Host "Attempting to clean the Registry HIVE of Samsung SSPrint Keys."
Clean_Key $strKeyName "spd__"
Clean_Key $strKeyName "spe__"
Clean_Key $strKeyName "ssp6m"
Write-Host $strLine

# Export Registry HIVE to NTUSER_Clean.DAT
Write-Host "This section would export the Registry HIVE to a new file."
Write-Host "At this point I'm not sure how to do this."
Write-Host $strLine

# Unload the Registry HIVE
Write-Host "Attempting to unload the Registry HIVE."
[gc]::collect()
start-sleep -s 3
reg unload "HKU\$strKeyName"

До сих пор я НЕ нашел способ использовать reg (reg.exe) для экспорта в виде файла куста реестра. Насколько мне известно, аргумент "reg EXPORT" генерирует только файлы .reg.

Использование reg export - это не то, что вы хотите использовать для экспорта куста реестра. Я не понимал, но опция «reg save» позволяет вам на самом деле сохранить файл Hive реестра, такой как NTUSER.DAT.

Нашел статью Microsoft о параметрах reg.exe и протестировал ее с помощью reg save: http://technet.microsoft.com/en-us/library/cc742108.aspx

Код PowerShell с использованием reg save:

Write-Host "Attempting to load the User Roaming Profile Registry HIVE (NTUSER.DAT)."
#Write-Host $strRemoteLocation
reg load "HKU\$strKeyName" "$strRemoteHiveSourcePath\NTUSER.DAT"
Write-Host $strLine

Write-Host "Attempting to clean the Registry HIVE of Samsung SSPrint Keys."
Clean_Key $strKeyName "spd__"
Clean_Key $strKeyName "spe__"
Clean_Key $strKeyName "ssp6m"
Write-Host $strLine

# Export Registry HIVE to NTUSER_Clean.DAT
Write-Host "Attempt to save a new version of the Registry Hive."
reg save "HKU\$strKeyName" "$strRemoteHiveSourcePath\NTUSER_Clean.DAT"
Write-Host $strLine

# Unload the Registry HIVE
Write-Host "Attempting to unload the Registry HIVE."
[gc]::collect()
start-sleep -s 3
reg unload "HKU\$strKeyName"
Write-Host $strLine

# Verify that the NTUSER_Clean.DAT is found.
# If found rename NTUSER.DAT to NTUSER_OLD.DAT and then rename NTUSER_Clean.DAT to NTUSER.DAT
# Clean up NTUSER_OLD.DAT once verified that the new NTUSER.DAT is in place.
if (Test-Path "$strRemoteHiveSourcePath\NTUSER_Clean.DAT") {
    Write-Host "The Exported Registry Hive (NTUSER_Clean.DAT) was found."
    Write-Host $strLine

    Write-Host "Renaming the compacted NTUSER.DAT file to NTUSER_OLD.DAT."
    Rename-Item "$strRemoteHiveSourcePath\NTUSER.DAT" "NTUSER_OLD.DAT"

    Write-Host "Renaming the compacted NTUSER_Clean.DAT file to NTUSER.DAT."
    Rename-Item "$strRemoteHiveSourcePath\NTUSER_Clean.DAT" "NTUSER.DAT"

    # Verify we actually have a NTUSER.DAT file before removing the OLD version.
    if (Test-Path "$strRemoteHiveSourcePath\NTUSER.DAT") {
        Write-Host "Deleting the original NTUSER_OLD.DAT"
        Remove-Item "$strRemoteHiveSourcePath\NTUSER_OLD.DAT"
    }

}else {
   Write-Host "The Exported Registry Hive was NOT found."
   Write-Host "The NTUSER.DAT was NOT compacted."
} 
Write-Host $strLine