2012-04-23 29 views
2

Power Shellを使用して、このコマンドを使用してパスが存在するかどうかを確認しました。 powershellのテストパス "HKCU:\ Software \ Microsoft \ Windows"これはリモートマシンにどのように拡張できますか?リモートマシンでレジストリパスをテストする場合の構文は何ですか。テストパス「\\ machinename \ HKCU:\ Software \ Microsoft \ Windows」とそれが動作しません。テストする方法を提案してください。ここに概説されているようレジストリパスがリモートマシンに存在するかどうかの確認

答えて

3

あなたはそれにアクセスすることができます。http://powershell.com/cs/blogs/tips/archive/2011/02/15/accessing-registry-remote.aspx

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', 'server123') 
$key = $reg.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall') 

$key.GetSubKeyNames() | ForEach-Object { 
    $subkey = $key.OpenSubKey($_) 
    $i = @{} 
    $i.Name = $subkey.GetValue('DisplayName') 
    $i.Version = $subkey.GetValue('DisplayVersion') 
    New-Object PSObject -Property $i 
    $subkey.Close() 
} 

$key.Close() 
$reg.Close() 

代替PSRemotingを有効にして、リモートマシン上でinvoke-commandを使用し、効果的にあなたがローカルボックス上で実行するだろうかと同じコマンドを実行することです。

+0

thts gr8..howは、私はこの方法を使用してチェックしますか存在をCHKする唯一の方法はです例外を使用します。これを行うための他の直接的な方法はありますか? – sriram

+0

呼び出しコマンドは私の目的のためにクールです。 – sriram

0

リモートコンピュータの現在のユーザーハイブに接続することはできません。リモートレジストリモジュールを使用して、リモートサーバーのhklmハイブにリモートキーが存在するかどうかを確認する例を次に示します。モジュールは、CodePlexの上で見つけることができます。Microsoft \ winows -Hive LocalNachine

0

Thisサイト\ psremoteregistry.codeplex.con

テスト-レジストリキーに-ComputerNameサーバー1 -Keyソフトウェアが助けてくれました。コードは基本的に1つのキーをチェックし、最初のキーが存在しない場合は別のキーを確認します。また、サブキーが値を読み取ろうとする前に存在することを確認します。どちらも存在しない場合、try/catchはそれに対処できます。

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computerName) 
    $regkey = $reg.OpenSubkey("SOFTWARE\\Symantec\\Symantec Endpoint Protection\\AV\\Storages\\Filesystem\\RealTimeScan") 

if(-not $regkey) { 
$regkey = $reg.OpenSubkey("SOFTWARE\\Wow6432Node\\Symantec\\Symantec Endpoint Protection\\AV\\Storages\\Filesystem\\RealTimeScan") 
} 

$autoProtectStatus = "" 
$null = "" 

if ($regkey.GetValue("OnOff", $null) -ne $null) { 
    $autoProtectStatus = $regkey.GetValue("OnOff") 
} 

if ($autoProtectStatus -eq 1) { 
    $autoProtectStatus = "Protection On" 
} elseif ($autoProtectStatus -eq 0) { 
    $autoProtectStatus = "Protection Off" 
} else { 
    $autoProtectStatus = "Unknown State" 
} 
0

Q & Aの多くは、3歳以上です。私はPowershellの新しいバージョンがこれをたくさんクリーンアップしたに違いないと思う。それを言っても、リモートコンピュータ上のレジストリを(私が知る限り)チェックする直接のコマンドはまだありません。これは動作します - (?それはしかし他の答えよりも簡単です)、それは、.NET 4.6.2がインストールされているかどうかを確認する

invoke-command -computername <NetBiosName> -scriptblock {test-path -Path 
"HKLM:\Software\Microsoft\.NetFramework\v4.0.30319\SKUs\.NetFramework, 
Version=v4.6.2"} 

あなたはまた、内側(*の.ps1というファイルにすべてをスクリプトブロックの内容を置くことができます{}そして、その後でそれを呼び出します。単独のキーに終了した場合、Invoke-Commandコマンド-ComputerName NETBIOSNAME -FilePath「FQLP

関連する問題