如何查找Powershell数组是否包含另一个数组的一部分



我有两个阵列

$Array1 = Get-Disabledusers SIDS
$Array2 =  %Unnecessarytext(SIDS).VHDX

我需要比较Array1Array2,并且只输出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。

相关内容

  • 没有找到相关文章

最新更新