测试路径PowerShell问题

时间:2017-02-23 16:07:21

标签: powershell

我正在尝试搜索多个服务器以查看是否存在特定的注册表项。

看起来下面的代码工作正常,但是当我开始添加密钥的最后部分时,它会停止"查找"东西。我可以开始添加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

2 个答案:

答案 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';

注意:相应地更改占位符