检查远程计算机中是否存在注册表路径

时间:2012-04-23 05:14:38

标签: powershell remote-access

我使用Power Shell使用此命令检查路径是否存在。 powershell测试路径“HKCU:\ Software \ Microsoft \ Windows”现在如何将其扩展到远程计算机。如果我想在远程计算机中测试注册表路径,我尝试了 powershell test-path“\\ machinename \ HKCU:\ Software \ Microsoft \ Windows”,并且它无效。建议一些方法来测试它。

4 个答案:

答案 0 :(得分: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,并有效地运行与在本地盒子上运行的命令相同的命令。

答案 1 :(得分:0)

您无法连接到远程计算机的当前用户配置单元。以下是使用Remote Regitry模块检查远程服务器的hklm配置单元中是否存在远程密钥的示例。该模块可以在codeplex上找到:psremoteregistry.codeplex.con

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

答案 2 :(得分:0)

This网站帮助了我。代码基本上检查一个密钥,然后检查另一个密钥,如果第一个密钥不存在。它还会在尝试从中读取值之前验证该子项是否存在。如果两者都不存在,那么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"
}

答案 3 :(得分: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"}

您还可以将scriptblock内容放入* .ps1文件({}内的所有内容,然后使用以下命令调用它:Invoke-Command -ComputerName NetBiosName -FilePath&#34; FQLP &#34;