Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 多查找powershell阵列_Arrays_Powershell - Fatal编程技术网

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行匹配。这要简单得多:)