Powershell类运算符

Powershell类运算符,powershell,Powershell,是否有其他运算符可用于筛选出“客户端版本”列?我已尝试使用以下代码。我所做的是过滤掉我的某些操作系统,然后我希望将我的客户机版本列过滤到版本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","Com

是否有其他运算符可用于筛选出“客户端版本”列?我已尝试使用以下代码。我所做的是过滤掉我的某些操作系统,然后我希望将我的客户机版本列过滤到版本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?

如果我正确理解了您的问题,那么当您使用-或运算符而不是-时,就会发生这种情况,这是您的主要问题

您可以尝试以下方法(包含用于匹配多个字符串的调整和用于可读性目的的少量清理):


如果我正确理解了您的问题,那么当您使用-或运算符而不是-时,就会发生这种情况,这是您的主要问题

您可以尝试以下方法(包含用于匹配多个字符串的调整和用于可读性目的的少量清理):


仅解决这一行以解决您要求的问题:

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

仅解决这一行以解决您要求的问题:

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

那么也许你想要
-和
。另外请注意,PowerShell的最新版本中有
-in
,因此您不必使用更笨拙的
-contains
$。“客户端版本”-匹配“^(12 | 14)\”
,然后您可能需要使用
-和
。还请注意,PowerShell的最新版本中有
-in
,因此您不必使用更笨拙的
-contains
$。“客户端版本”-匹配“^(12 | 14)\。