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

dav*_*zur 3 powershell

我是 PowerShell 的新手,遇到了一些障碍。我正在尝试从多个服务器中提取程序名称和版本信息。

我在 $list 变量中有一个程序名称列表,但程序名称中还包含版本号。我只是在没有版本号的列表变量中存储程序的名称。

我试图找出一种方法,将 -like 和 -in 参数与Where-Object cmdlet 一起使用,以便将完整的程序条目名称(例如 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*"}
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 5

Where-ObjectFilterScript块只是一个脚本块是返回$true$false或没有-你可以做各种里面疯狂的事情,包括遍历数组,看是否存在的一个条目的通配符匹配:

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