2015-06-16 35 views
2

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*"} 

} 

回答

2

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

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