2017-07-14 46 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.*"}