是否有其他运算符可以用来过滤出我的客户端版本列?我试过使用下面的代码。我所做的是过滤掉我的某些操作系统,然后我希望将我的客户端版本列过滤到版本12。
$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?
发布于 2017-07-14 23:50:39
如果我没看错您的问题,那么这是因为您使用的是-or操作符,而不是-and,这是您的主要问题。
您是否可以尝试以下操作(包含用于匹配多个字符串的调整和用于可读性的小清理):
#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发布于 2017-07-14 23:53:23
只需解决这一行来解决您所请求的问题:
Where{"Windows 7 Enterprise Edition","Windows 10 Enterprise Edition","Windows 7 Professional Edition" -contains $_.'Operating System' -or $_."Client Version" -like "12.1.*"} |在编写逻辑时,您将获得其OS与您提供的列表匹配的任何对象,而不管“客户端版本”是什么。那么您将获得任何‘客户端版本’为"12.1.*“的对象。然后,-Or子句本质上告诉PowerShell返回这两个列表的组合。
正如Jeroen Mostert所指出的,您需要使用-and而不是-or。或者,您可以使用2个where子句来更容易地理解代码。这里,第一个where子句生成一个按操作系统过滤的列表,第二个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.*"}https://stackoverflow.com/questions/45106575
复制相似问题