我正在尝试搜索多个服务器以查看是否存在特定的注册表项。
看起来下面的代码工作正常,但是当我开始添加密钥的最后部分时,它会停止"查找"东西。我可以开始添加a*
,然后ab*
作为最后一个键,但是一旦我到达第三个字符或者我知道的完整字符串就会出现,它会返回False,表示它确实存在找不到它。
$servers = Get-Content c:\input.txt | `
Select-Object @{l='ComputerName';e={$_}},@{l='KeyExist';e={Test-Path "HKLM:\System\CurrentControlSet\services\*abcdefg*" }}
$servers | Format-Table -AutoSize
答案 0 :(得分:1)
您的问题是您针对每个远程服务器名称针对本地计算机运行Test-Path
。遗憾的是Test-Path
不支持查询远程注册表。
您可以使用WMI:
$RegProv = [wmiclass]"\\$servername\root\default:StdRegProv"
if($RegProv.EnumKey(2147483650,"System\CurrentControlSet\services").sNames -like 'abc*'){
# key starting with abc exists
}
将它包装在您计算的属性中:
@{Name='KeyExists';Expression={[bool](([wmiclass]"\\$_\root\default:StdRegProv").EnumKey(2147483650,"System\CurrentControlSet\services").sNames -like 'abc*')}}
答案 1 :(得分:0)
您可以像这样检查远程注册表:
因此,对于每个服务器,它将获得注册表值,并将值存储在arraylist中并显示最终结果。
目前,在您的代码中,您基本上只在本地进行检查。
sStartDate = hcm.myleaverequest.utils.Formatters.DATE_YYYYMMdd(_oStartEndDates.startDate) + 'T00:00:00';
sEndDate = hcm.myleaverequest.utils.Formatters.DATE_YYYYMMdd(_oStartEndDates.endDate) + 'T00:00:00';
注意:相应地更改占位符