远程注册表项检查器

时间:2019-03-04 18:07:42

标签: powershell

我正在尝试创建一个脚本,该脚本从文件中获取计算机名称的输入,并检查是否存在注册表项。该脚本从第二行出错,似乎没有从变量中添加计算机名称。如果手动输入计算机名称,则脚本可以正常工作。这是错误:

Exception calling "OpenRemoteBaseKey" with "2" argument(s): "The network path
was not found.
At line:3 char:1
+ $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$lap)

这是脚本:

$laptop = Get-Content -Path 'Laptop.txt'
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$lap")
$RegKey= $Reg.OpenSubKey("SOFTWARE\Status\")
$NetbackupVersion = $RegKey.GetValue("Activated")

foreach ($lap in $laptop) {
    if ($NetbackupVersion -eq "Yes") {
        echo "$lap has the key"
    } else {
        echo "$lap does not have the key"
    }
}

另一个问题是密钥不存在,脚本显示了错误,但仍然回显了机器具有密钥的情况。

1 个答案:

答案 0 :(得分:1)

$lap调用中,OpenRemoteBaseKey()之后有一个虚假的尾随双引号。删除它。另外,注册表查找代码属于foreach循环的主体。循环变量$lap在外部未定义。

更改此:

$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$lap")
$RegKey = $Reg.OpenSubKey("SOFTWARE\Status\")
$NetbackupVersion = $RegKey.GetValue("Activated")

foreach ($lap in $laptop) {
    ...
}

对此:

foreach ($lap in $laptop) {
    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $lap)
    $RegKey = $Reg.OpenSubKey("SOFTWARE\Status\")
    $NetbackupVersion = $RegKey.GetValue("Activated")
    ...
}
相关问题