Check if a Registry Path Exists in Remote Machine

拟墨画扇 提交于 2020-01-05 02:32:32

问题


I have used Power Shell to check if a path exists using this command . powershell test-path "HKCU:\Software\Microsoft\Windows" now how can the same be extended to remote machine. What is the syntax if i want to test a registry path in Remote machine, i tried powershell test-path "\\machinename\HKCU:\Software\Microsoft\Windows" and its not working. Suggest some way to test it.


回答1:


You can access it as outlined here: 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()

An alternative is to enable PSRemoting and use invoke-command on the remote machine and effectively run the same command as what you would run on the local box.




回答2:


You cannot connect to the current user hive of a remote computer. Here's an example of using the Remote Regitry module to check if a remote key exists in the hklm hive of a remote server. The module can be found on codeplex: psremoteregistry.codeplex.con

Test-RegKey -ComputerName server1 -Key software\microsoft\winows -Hive LocalNachine




回答3:


This site helped me. The code basically checks for one key and then checks for another one if the first one does not exist. It also verifies that the subkey exists before trying to read a value from it. If neither exist a try / catch can help deal with that.

   $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"
}



回答4:


So much of the Q&A is 3 years old or older. I suspect the newer versions of Powershell must have cleaned up a lot of this. Having said that, there is still not a direct command to check the registry on a remote computer (to the best of my knowledge). This works - it checks if .NET 4.6.2 is installed (is it simpler than the other answers though?)

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

You can also put the scriptblock content into a *.ps1 file (everything inside the {} and then invoke it with: Invoke-Command -ComputerName NetBiosName -FilePath "FQLP"



来源:https://stackoverflow.com/questions/10275133/check-if-a-registry-path-exists-in-remote-machine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!