我有两个阵列
$Array1 = Get-Disabledusers SIDS
$Array2 = %Unnecessarytext(SIDS).VHDX
我需要比较Array1
和Array2
,并且只输出Array2
中包含Array1
的内容。问题是,当我比较两个对象时,它返回的值不相等,因为它们不完全匹配。
如何输出Array2中包含匹配的残疾人用户SIDS的项目?我应该运行foreach循环并比较数组的一部分吗?
我发现了这个:如何找到Powershell数组是否包含另一个数组的对象
然而,这并没有帮助,因为它将返回不平等。
澄清问题:
有一个文件夹,其中有VHDX。VHDX是根据用户的SID命名的。然而,在SID之前和之后都有一堆不必要的文本。
在Array1中,我运行:
Get-ADUser -Filter {Enabled -eq $false} | FT SID
为了检索禁用用户的列表并筛选出他们的SID。
在Array2中,我列出VHDX文件夹中的文件名,如下所示:text SID text
。我想比较两者,并返回VHDX文件夹中哪些文件包含禁用用户的SIDS。
你可以这样做,首先从所有禁用的用户那里获得SID值的列表,并将它们存储在一个变量中,然后由于文件或文件夹(对此不清楚(不是确切的SID,你需要首先检查它们是否包含有效的SID,这可以使用正则表达式和-match
运算符来完成,如果它们包含,然后我们可以使用自动变量$Matches
来检查SID是否是-in
,即禁用用户的SID数组,如果是,我们可以输出该文件或文件夹并将其存储在$result
:中
$re = 'S-1-[0-59]-d{2}-d{8,10}-d{8,10}-d{8,10}-[1-9]d{2,3}'
$sids = (Get-ADUser -Filter "Enabled -eq '$false'").SID.Value
$result = foreach($item in Get-ChildItem -Path pathtosomething) {
if($item.Name -match $re) {
if($Matches[0] -in $sids) {
$item
}
}
}
$result # => has all the files or folders existing in `$sids`
使用的正则表达式取自此答案,仅需要更改d{2,3}
的最后一个d{3}
以匹配任何有效SID。