Powershell 其中,对象必须满足确切的标准,并且语句似乎作为或工作

Powershell 其中,对象必须满足确切的标准,并且语句似乎作为或工作,powershell,filter,Powershell,Filter,我可能犯了一个基本的错误,几乎每一篇文章我都在网上浏览过,但这让我发疯。我使用where对象来获取必须明确满足条件的对象 数据集 mail department version tuser1@tdomain.com finance 1.0 tuser2@tdomain.com finance 1.1 tuser3@tdomain.com hr 2.0 tuser4@tdomain.com hr

我可能犯了一个基本的错误,几乎每一篇文章我都在网上浏览过,但这让我发疯。我使用where对象来获取必须明确满足条件的对象

数据集

mail                 department version
tuser1@tdomain.com   finance        1.0
tuser2@tdomain.com   finance        1.1
tuser3@tdomain.com   hr             2.0
tuser4@tdomain.com   hr             1.1
tuser5@tdomain.com   hr             1.0
tuser6@tdomain.com   finance        1.1
tuser7@tdomain.com   finance        2.0
我有一个大的数据集,我想通过消除某些标准来导出一部分用户。这只是一个,但如果我能让它工作,将会有更多

到目前为止我已经试过了

$Data | select-object mail, department, version |  Where-Object {$_.Department -ne 'Finance' -and $_.version -ne '1.0'}

$Data | select-object mail, department, version |  Where-Object {($_.Department -ne 'Finance') -and ($_.version -ne '1.0')}

$Data | select-object mail, department, version |  Where-Object {($_.Department -ne 'Finance' -and $_.version -ne '1.0')}
这应该是直接从我读到的,但它的行为是奇怪的。我发现的是-AND函数几乎像-OR函数一样工作。如果我运行上面的任何一个,它不会对两个对象作为一个对象执行过滤器。我发现它没有选择部门不等于财务的任何用户(正确,这是我想要的)或版本不等于1.0的任何用户(不正确,当然它仍然应该选择HR用户版本1.0?)。我假设-AND函数的全部要点是两个参数都需要匹配?除非我弄错了

就像我说的,我可能会做一些非常愚蠢的事情,但我已经在网上搜索了很多次,我似乎找不到任何暗示我在这里做错了什么的东西。谢谢你的帮助


谢谢

如果我理解正确,这是一个逻辑问题。也许在问题中提出你想要的结果。不包括同时具有“finance”和“1.0”的行。由于运算符优先级,括号是必需的

import-csv file.csv | 
where {-not ($_.Department -eq 'Finance' -and $_.version -eq '1.0')}

department version
---------- -------
finance    1.1
hr         2.0
hr         1.1
hr         1.0
finance    1.1
finance    2.0
这实际上在逻辑上等同于“-或“不”-和”。我认为第一种方法比较容易混淆

import-csv file.csv | 
where {$_.Department -ne 'Finance' -or $_.version -ne '1.0'}

department version
---------- -------
finance    1.1
hr         2.0
hr         1.1
hr         1.0
finance    1.1
finance    2.0

您的数据集不显示
givenName
公司
,或
邮件
。[咧嘴笑]所以。。。这些字段是如何进入您的数据的?另外,请用代码格式包装您的代码。现在,像下划线这样的东西正在被文本格式所使用[它们切换斜体模式]。Hi Lee,这就是一个例子。我发布的数据集是过滤器关注的内容。我认为发布额外数据没有多大意义。我会更新我想知道为什么会被注释掉的代码。我在代码周围加了三个反引号。由于某些原因,下划线不会以其他方式显示。现在应该更新代码