如果我错过了一项社会规范,则首先在stackoverflow上发表文章,以便提前道歉。
我在PowerShell中有一个数组,其中包含数千个对象。每个对象具有属性(例如用户名,登录时间,他们登录的计算机等)的标准内容。然后,我用名称以A开头的用户从第一个数组中分离出少量对象:
$Array2 = $Array1 | where-object Username -like '*\a*'
这按预期工作。
我想建立一个仅包含$ Array1中不在$ Array2中的对象的第三个数组。换句话说,只有用户名不以A开头的用户组成的数组。
这似乎是要走的路:
$Array3 = compare-object $Array1 $Array2 | select-object -expandproperty InputObject
期望:
$Array3 | where-object Username -like '*\a*'
结果一无所获
我得到的是很多结果。奇怪的是,如果我查看每个数组的.count,则数学计算出结果。 Array1减去Array2等于Array3。因此,它正在删除正确数量的对象,而不是预期的对象。我在这里做错了什么?由于我正在从要比较的确切数组中提取数据,因此我想不出其他任何条件,因此搜索该条件将返回意外的匹配。在比较之前,我还尝试按相同的属性对每个数组进行排序,因为我掌握了,但是按预期无法解决问题。
提前致谢!
最佳答案
简单的方法是执行相同的-like
分配,但使用相反的运算符-notlike
例如:
$Array2 = $Array1 | where-object Username -like 'a*'
$Array3 = $Array1 | where-object Username -notlike 'a*'
注意:
(不确定匹配问题是否为错字:
'*\a*'
),匹配项应为a*
,并且在“a
”字符后仅加一个星号。您想将所有以“a
”和“*
”开头的内容都匹配(例如,仅匹配“Alex”,而不匹配“Brad”)。
关于arrays - 比较对象返回无效结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61392605/