我正在尝试创建一个脚本,该脚本从文件中获取计算机名称的输入,并检查是否存在注册表项。该脚本从第二行出错,似乎没有从变量中添加计算机名称。如果手动输入计算机名称,则脚本可以正常工作。这是错误:
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"
}
}
另一个问题是密钥不存在,脚本显示了错误,但仍然回显了机器具有密钥的情况。
答案 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")
...
}