tralveller
Goto Top

Powershell: Registry Sichern und wiederherstellen (ohne reg.exe oder regedit.exe)

Hallo zusammen,

ich versuche momentan bestimmte Registry-Schlüssel und Werte zu sichern, kann aber nicht auf reg.exe oder regedit.exe zurückgreifen.

Bisher konnte ich nur die Werte exportieren:
get-Childitem 'HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles' -recurse | Export-CliXML C:\Temp\Test.xml  

Wie kann ich die exportieren Werte nun wieder importieren?

Danke vielmals und Grüße
Tralveller

Content-Key: 367223

Url: https://administrator.de/contentid/367223

Printed on: April 19, 2024 at 19:04 o'clock

Member: Kraemer
Kraemer Mar 07, 2018 at 22:03:24 (UTC)
Goto Top
Member: colinardo
Solution colinardo Mar 08, 2018 updated at 21:18:03 (UTC)
Goto Top
function Export-RegTree([string]$regkey,[string]$exportpath){
    $data = @()
    $createobject = {
        param($k,$n)
        [pscustomobject] @{
            Name = @{$true='(Default)';$false=$n}[$n -eq '']  
            Value = $k.GetValue($n)
            Path = $k.PSPath
            Type = $k.GetValueKind($n)
        }
    }
    get-item $regkey -PipelineVariable key| %{
        $key.GetValueNames() | %{$data += . $createobject $key $_}
    }
    gci $regkey -Recurse -Force -PipelineVariable key | %{
        $key.GetValueNames() | %{$data += . $createobject $key $_}
    }
   $data | Export-Clixml $exportpath
}

function Import-RegTree([string][ValidateScript({Test-Path $_})]$xmlfile){
    Import-Clixml $xmlfile | %{
        if (!(Test-Path $_.Path)){md $_.Path -Force | out-null}
        New-ItemProperty -Path $_.Path -Name $_.Name -Value $_.Value -PropertyType $_.Type -Force
    }
}

# Export
Export-RegTree 'HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles' 'D:\export.xml'  
# Import
Import-RegTree 'D:\export.xml'  
Grüße Uwe
Member: tralveller
tralveller Mar 08, 2018 updated at 21:13:47 (UTC)
Goto Top
Hallo @colinardo,

ich hatte gehofft, dass es irgendwie in einem "Einzeiler" machbar ist, aber das scheint dann ohne reg bzw. regedit doch nicht so trivial zu sein.

Super, dein Entwurf war sehr hilfreich und hat die Lösung gebracht. face-smile

Ich habe noch einen kleinen Fehler ausgemerzt, es in 2 Skripte aufgeteilt und das Ganze so erweitert, dass man Registry-Pfad und Speicherort beim Start des Skripts mit angeben kann (dann muss man nicht im Skript selber "rumfrimeln" face-wink)

Das Export-Skript sieht nun so aus:
[CmdletBinding()]
param (
	[Parameter(Mandatory = $true)]
	[String]$RegKey,
	[Parameter(Mandatory = $true)]
	[String]$ExportPath
)

function Export-RegTree([string]$RegKey,[string]$ExportPath){
    $data = @()
    $createobject = {
        param($k,$n)
        [pscustomobject] @{
            Name = @{$true='(Default)';$false=$n}[$n -eq '']  
            Value = $k.GetValue($n)
            Path = $k.PSPath
            Type = $k.GetValueKind($n)
        }
    }
    get-item $RegKey -PipelineVariable key| %{
        $key.GetValueNames() | %{$data += . $createobject $key $_}
    }
    gci $RegKey -Recurse -Force -PipelineVariable key | %{
        $key.GetValueNames() | %{$data += . $createobject $key $_}
    }
   $data | Export-Clixml $ExportPath
}

# Export
Export-RegTree "$RegKey" "$ExportPath"  

Und wird z.B. gestartet via:
PowerShell.exe -executionpolicy unrestricted -Command ".\Reg_Export.ps1 -RegKey 'HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles' -ExportPath 'C:\temp\test.xml'"  

Das Import-Skript sieht so aus:
[CmdletBinding()]
param (
	[Parameter(Mandatory = $true)]
	[String]$XmlFile
)

function Import-RegTree([string][ValidateScript({Test-Path $_})]$XmlFile){
    Import-Clixml $XmlFile | %{
        if (!(Test-Path $_.Path)){md $_.Path -Force | out-null}
        New-ItemProperty -Path $_.Path -Name $_.Name -Value $_.Value -PropertyType $_.Type -Force
    }
}
# Import
Import-RegTree "$XmlFile"  

Und wird z.B. gestartet via:
PowerShell.exe -executionpolicy unrestricted -Command ".\Reg_Import.ps1 -XmlFile 'C:\temp\test.xml'"  


Danke an alle für die Hilfe.

Viele Grüße
Tralveller
Member: colinardo
colinardo Mar 08, 2018 updated at 21:15:24 (UTC)
Goto Top
Ich habe noch die kleinen Fehler ausgemerzt
Was für Fehler, ich sehe da keinen Unterschied? Du hast es nur mit Parametern an deine Bedürfnisse erweitert sonst nüscht face-smile.
Naja dann allzeit frohes Shellen ...
Member: tralveller
tralveller Mar 08, 2018 at 21:17:06 (UTC)
Goto Top
Simmt, sorry, es war ein kleiner "Fehler" mit dem doppelten Anführungszeichen, wenn überhaupt.
Import-RegTree 'D:\export.xml"  
Danke dir vielmals face-smile
Member: colinardo
colinardo Mar 08, 2018 updated at 21:20:41 (UTC)
Goto Top
Upps, OK das war dann ein Glas zuviel face-big-smile, ist korrigiert.

Keine Ursache und schönen Abend noch.