2016-07-23 19 views
1

Ich bin ein wenig verloren, warum ich nicht in der Lage, einen Registrierungsschlüssel Wert vor, eine Änderung dann sammeln Sie den Wert nach der Änderung zu bestätigen Die Änderung war erfolgreich.Erstellen eines Vorher und Nachher von einem Registrierungsschlüssel Wert auf einem Remote-Server

Ich verwende den folgenden Code, der die richtigen Werte erhält, aber keine Änderungen an LogMaxHistory oder LogLevel widerspiegelt.

Mache ich etwas falsch?

foreach ($server in $servers) { 
    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $server) 

    $RegSubKey = $Reg.OpenSubKey("SOFTWARE\\Microsoft\\CCM\\Logging\\@Global", $true) 

    $LogLevelBefore  = $RegSubKey.GetValue('LogLevel') 
    $LogMaxHistoryBefore = $RegSubKey.GetValue('LogMaxHistory') 

    $RegSubKey = $Reg.SetValue('LogLevel', '0', [Microsoft.Win32.RegistryValueKind]::DWORD) 
    $RegSubKey = $Reg.SetValue('LogMaxHistory', '6', [Microsoft.Win32.RegistryValueKind]::DWORD) 

    $RegCheck = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $server) 
    $RegCheck = $RegCheck.OpenSubKey("SOFTWARE\\Microsoft\\CCM\\Logging\\@Global") 

    $LogLevelAfter  = $RegCheck.GetValue('LogLevel') 
    $LogMaxHistoryAfter = $RegCheck.GetValue('LogMaxHistory') 

    [pscustomobject]@{ 
     ComputerName  = $server 
     LogLevelBefore  = $LogLevelBefore 
     LogMaxHistoryBefore = $LogMaxHistoryBefore 
     LogLevelAfter  = $LogLevelAfter 
     LogMaxHistoryAfter = $LogMaxHistoryAfter 
    } 
    $Reg.Close() 
    $RegCheck.Close() 
    GSV -ComputerName $server -Name CcmExec | Restart-Service 
} 
+0

Nach einigem Suchen habe ich gelandet [hier] (http://powershell.com/cs/ Foren/t/15009.aspx), die die Änderung der Registrierung in einer Zeile zeigt. Bei Verwendung der gleichen Ein-Zeilen-Methode erhalte ich den Wert vor der Änderung mit 'GetValue' anstelle von 'SetValue' und alles funktioniert wie gewünscht. – user4317867

Antwort

0

Sie Regquery

Beispiel

$before=reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" /ve /s 

$after=reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" /ve /s 

write-host "registry value $before and $after" -F green 
+0

Ich wusste Reg Query aber wollte es nur PowerShell nur, wenn überhaupt möglich. – user4317867

+0

hat Sie nicht bekommen, seine Powershell-Befehl – DisplayName

0

Haben Sie versucht, überladene Methode OpenSubKey mit RegistryKeyPermissionCheck Art und RegistryKeyPermissionCheck.ReadWriteSubTree Argument verwenden können (siehe: MSDN)?

Ein weiterer aproach ist Registry-Laufwerke wie folgt zu verwenden (vereinfacht, müssen Sie Schlüssel und Eigenschaften ändern):

$server = '.' 
Invoke-Command -ComputerName $server { 
    $before = Get-ItemProperty HKLM:\SOFTWARE\PDProgs -Name Property1 
    Set-ItemProperty HKLM:\SOFTWARE\PDProgs -Name Property1 -Value (Get-Random) 
    $after = Get-ItemProperty HKLM:\SOFTWARE\PDProgs -Name Property1 
    [psobject]@{Before = $before.Property1; After = $after.Property1} 
} ` 
    | % { "Before = $($_.Before), After = $($_.After)" } 
+0

Sieht gut aus mit einer Ausnahme, ich kann Invoke-Command nicht verwenden. Ich werde das noch einmal überprüfen müssen, da die Zeit es erlaubt, etwas zum Laufen zu bringen. – user4317867

+0

Nachdem ich mich ein wenig umgeschaut habe und einen Artikel gelesen habe, in dem erwähnt wurde, dass ich den Registrierungsschlüssel zum Vergleichen exportieren soll, ist mir etwas leichter gefallen. Werfen Sie den Wert einfach auf eine Zeichenfolge ab. '$ LogLevelAfter = ($ RegSubKey.GetValue ('LogLevel')). Tostring()' – user4317867