2016-07-23 10 views
1

私は少し前にレジストリキーの値を取得できないので、変更を加えてから変更後の値を収集して確認します変更は成功しました。リモートサーバ上のレジストリキーの値から前と後を作成する

私は正しい値を取得しますが、私がLogMaxHistoryまたはLogLevelに行った変更を反映していない次のコードを使用しています。

私は間違ったことをしていますか?あなたはRegquery

を使用することができます

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

いくつか検索した後、私は[こちら]上陸(http://powershell.com/cs/ forums/t/15009.aspx)には、レジストリの変更が1行で表示されます。同じ1行のアプローチを使用して、私は 'SetValue'の代わりに' GetValue'を使って変更前の値を取得します。 – user4317867

答えて

0

$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

私はReg Queryを知っていましたが、可能であればPowerShellのみを保持したいと思っていました。 – user4317867

+0

あなたのPowerShellコマンド – DisplayName

0

は(:MSDNを参照してください)あなたはRegistryKeyPermissionCheckタイプとRegistryKeyPermissionCheck.ReadWriteSubTree引数でオーバーロードされたメソッドOpenSubKeyを試してみましたか?

別のaproachは、以下のように(簡略化され、あなたがキーとプロパティを変更する必要があります)レジストリドライブを使用することです:

$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

がうまくいかない、私はInvoke-Commandを使用できません。私は時間が何かを働かせることができるようにこれを再訪しなければならないでしょう。 – user4317867

+0

少し調べた後、レジストリキーをエクスポートして比較するための記事を読んで、何か簡単に起こった。値を文字列にダンプするだけです。 '$ LogLevelAfter =($ RegSubKey.GetValue( 'LogLevel'))。tostring()' – user4317867

関連する問題