PowerShell Where-Object $_.name -like -in $list

3
我是PowerShell的新手,遇到了一些问题。我试图从多个服务器中提取程序名称和版本信息。
我有一个包含程序名称的$list变量,但程序名称中也包含版本号。我只将程序名称存储在列表变量中,不包括版本号。
我正在尝试找出一种方法,在Where-Object cmdlet中同时使用-like和-in参数,以便将完整的程序条目名称(例如AdToUserCacheSync 1.10.1.10)与$list变量中的条目(例如AdToUserCacheSync)匹配。
我该怎么做?
$list = Get-Content "\\server\c$\temp\list.txt"
$storeTestServers = Get-Content "\\server\c$\temp\testStores.txt"

foreach ($server in $storeTestServers) {

    Get-WmiObject -Class Win32_Product -ComputerName $server |
    Select-Object -Property PSComputerName, Name, Version |
    Where-Object {$_.pscomputername -like "940*" -and $_.name -like -in "*$list*"}
}
2个回答

5

Where-Object筛选脚本块只是返回$true$false或什么都不返回的脚本块 - 你可以在其中执行各种疯狂的操作,包括循环遍历数组以查看是否存在通配符匹配项:

Where-Object {
    $ProductName = $_.Name
    $_.pscomputername -like "940*" -and (
        $list | ForEach-Object {
            if($ProductName -like "*$_*"){ return $true }
        }
    )
}

1
我通过PowerShell找到了Adobe版本:
Get-WmiObject -Class Win32_Product -ComputerName 127.0.0.1 |
Select-Object -Property PSComputerName, Name, Version |
Where-Object {$_.Name -like "Adobe*"} | Out-File Adobe_Log.log

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接