首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell Operators -like

Powershell Operators -like
EN

Stack Overflow用户
提问于 2017-07-14 23:23:26
回答 2查看 375关注 0票数 1

是否有其他运算符可以用来过滤出我的客户端版本列?我试过使用下面的代码。我所做的是过滤掉我的某些操作系统,然后我希望将我的客户端版本列过滤到版本12。

代码语言:javascript
复制
$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?

EN

回答 2

Stack Overflow用户

发布于 2017-07-14 23:50:39

如果我没看错您的问题,那么这是因为您使用的是-or操作符,而不是-and,这是您的主要问题。

您是否可以尝试以下操作(包含用于匹配多个字符串的调整和用于可读性的小清理):

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2017-07-14 23:53:23

只需解决这一行来解决您所请求的问题:

代码语言:javascript
复制
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子句然后在客户端版本上过滤该列表:

代码语言:javascript
复制
*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.*"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45106575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档