Arrays 多查找powershell阵列
拥有一个包含组织数据的数组 像这样:Arrays 多查找powershell阵列,arrays,powershell,Arrays,Powershell,拥有一个包含组织数据的数组 像这样: org_id org_name parent_id 1 Company NULL 2 HR 1 3 MARKETING 2 4 FINANCE 1 5 IT 4 $Company =
org_id org_name parent_id
1 Company NULL
2 HR 1
3 MARKETING 2
4 FINANCE 1
5 IT 4
$Company = [PsCustomObject]@{ org_id = 1; org_name = 'Company'; parent_id = $null },
[PsCustomObject]@{ org_id = 2; org_name = 'HR'; parent_id = 1 },
[PsCustomObject]@{ org_id = 3; org_name = 'MARKETING'; parent_id = 2 },
[PsCustomObject]@{ org_id = 4; org_name = 'FINANCE'; parent_id = 1 },
[PsCustomObject]@{ org_id = 5; org_name = 'IT'; parent_id = 4 }
因此,结构是:
[Company]
|- HR
| |- MARKETING
|- FINANCE
| |- IT
我试图弄清楚如何查询一个组织为特定用户拥有的父组织
因此,如果用户定义了他们属于它,我想匹配组织名称中的字符串并获取父级id。然后将父级id与组织id匹配,最后获取组织名称,在本例中为财务。如果我正确理解这个问题,您的组织数组如下所示:
org_id org_name parent_id
1 Company NULL
2 HR 1
3 MARKETING 2
4 FINANCE 1
5 IT 4
$Company = [PsCustomObject]@{ org_id = 1; org_name = 'Company'; parent_id = $null },
[PsCustomObject]@{ org_id = 2; org_name = 'HR'; parent_id = 1 },
[PsCustomObject]@{ org_id = 3; org_name = 'MARKETING'; parent_id = 2 },
[PsCustomObject]@{ org_id = 4; org_name = 'FINANCE'; parent_id = 1 },
[PsCustomObject]@{ org_id = 5; org_name = 'IT'; parent_id = 4 }
有了这个你可以做到
$department = 'IT'
$parentId = ($Company | Where-Object { $_.org_name -eq $department}).parent_id
$orgName = ($Company | Where-Object {$_.org_id -eq $parentId }).org_name
在此之后,$orgName
包含财务
如果您所关注的部门是HR
或FINANCE
,它将返回Company
如果您搜索部门
营销
,您将得到人力资源
等。使用此cmdlet(另请参见:),您可以使用其自连接功能创建交叉引用:
$List = ConvertFrom-SourceTable '
org_id org_name parent_id
1 Company NULL
2 HR 1
3 MARKETING 2
4 FINANCE 1
5 IT 4' # https://www.powershellgallery.com/packages/ConvertFrom-SourceTable
$Reference = FullJoin $List parent_id -eq org_id '', 'parent'
$Reference | Format-Table # Show what's in the $Reference
org_id org_name parent_id parentorg_id parentorg_name parentparent_id
------ -------- --------- ------------ -------------- ---------------
1 Company NULL
2 HR 1 1 Company NULL
3 MARKETING 2 2 HR 1
4 FINANCE 1 1 Company NULL
5 IT 4 4 FINANCE 1
3 MARKETING 2
5 IT 4
选择组织的父组织:
$Organization = 'IT'
($Reference | Where-Object org_name -eq $Organization).parentorg_name
FINANCE
$Parent = 'Company'
($Reference | Where-Object parentorg_name -eq $Parent).org_name
HR
FINANCE
反之亦然:选择父组织的组织:
$Organization = 'IT'
($Reference | Where-Object org_name -eq $Organization).parentorg_name
FINANCE
$Parent = 'Company'
($Reference | Where-Object parentorg_name -eq $Parent).org_name
HR
FINANCE
谢谢这工作做得很好。开始执行一些while循环以查找特定行,然后将该行索引与父id行匹配。这要简单得多:)