2017-07-14 41 views
1

是否有其他运营商我可以用来过滤掉我的客户端版本列?我已经尝试使用下面的代码。什么我做的是过滤掉我的某些操作系统,然后我期待我的客户端版本列过滤到版本12Powershell运营商 - 如

$csv = Import-Csv 'C:\Users\eh3599\Desktop\SEPM Exports\Computer Status Export 7_13_2017.csv' 
$csv | Select "Version", "Operating System","Client Version","Policy Version","Computer Name","Computer Domain Name","Current login domain", "Current User" | 
Where{"Windows 7 Enterprise Edition","Windows 10 Enterprise Edition","Windows 7 Professional Edition" -contains $_.'Operating System' -or  $_."Client Version" -like "12.1.*"} | 
Export-Csv "C:\Users\eh3599\Desktop\SEPM Exports\$(get-date -f yyyy-MM-dd)-Computer Status Export.csv" -NoTypeInformation 

每当我运行整个脚本,它给了我一些版本14的呢?

+1

然后,也许你想要' - 和'。还要注意最近版本的PowerShell有'-in',所以你不必使用更笨拙的'-contains'。 –

+0

'$ _。“客户端版本”-match'^(12 | 14)\。'' –

回答

0

如果我正确地读你的问题,那么这是因为你正在使用-or操作符而不是 - 而这是你的主要问题。

你可以试试以下(包含匹配多个字符串,一点点清理为了提高可读性一个调整):

#setup a list of keyword searches 
$keywords= @('Windows 7 Enterprise Edition', 'Windows 10 Enterprise Edition', 'Windows 7 Professional Edition') 
#setup regex to match multi when called 
$concatOrRegex = [string]::Join('|', $keywords) 
#columns you want 
$columns = "Version", "Operating System","Client Version","Policy Version","Computer Name","Computer Domain Name","Current login domain", "Current User" 
#output file 
$outputFile = "C:\Users\eh3599\Desktop\SEPM Exports\$(get-date -f yyyy-MM-dd)-Computer Status Export.csv" 
#imput file 
$csv = Import-Csv 'C:\Users\eh3599\Desktop\SEPM Exports\Computer Status Export 7_13_2017.csv' 

#filter and export 
$csv | Select $columns | Where{ $_.'Operating System' -match $concatOrRegex -and $_."Client Version" -like "12.1.*"} | Export-Csv $outputFile -NoTypeInformation 
0

就解决这一行来解决您的要求的问题:

Where{"Windows 7 Enterprise Edition","Windows 10 Enterprise Edition","Windows 7 Professional Edition" -contains $_.'Operating System' -or  $_."Client Version" -like "12.1.*"} | 

随着您的逻辑编写,您将获得与您所提供的列表无关的操作系统匹配的任何对象,而与“客户端版本”无关。然后,您将获得其“客户端版本”为“12.1。*”的任何对象。然后,-Or子句会告诉PowerShell基本上返回这两个组合的列表。

正如Jeroen Mostert指出的那样,您需要使用 - 而不是 - 或。或者,你可以使用2 where子句来更容易理解代码。这里第一个where子句产生一个由OS过滤的列表,第二个where子句然后过滤客户端版本上的列表:

*Your_CSV_output* | Where {"Windows 7 Enterprise Edition","Windows 10 Enterprise Edition","Windows 7 Professional Edition" -contains $_.'Operating System' } | Where { $_."Client Version" -like "12.1.*"}