【发布时间】:2020-08-07 02:18:13
【问题描述】:
第一次在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。所以它正在删除正确数量的对象,而不是预期的对象。我在这里做错了什么?由于我正在从我正在比较的确切数组中提取数据,因此我想不出任何其他标准,它将搜索将返回意外匹配。我还尝试在比较之前按相同的属性对每个数组进行排序,因为我正在掌握但正如预期的那样并没有解决它。
提前致谢!
【问题讨论】:
-
您在 array1 前面缺少一个美元符号:
$Array2 = Array1 | where-object Username -like '*\a*'。我使用 get-aduser 但使用 name 属性进行了尝试,它对我有用。我没有用户名属性,也没有包含反斜杠的名称。如果不分配 $array3,比较对象的输出看起来正确吗? -
用户名中只有一个反斜杠对吗?
dom/joe/abelCompare-object 查看 aduser 对象或 DistinguishedName 的字符串版本。它不是在查看用户名属性。
标签: arrays powershell compare compareobject