在迭代另一个变量时匹配变量

时间:2016-02-29 09:54:09

标签: powershell

有两个变量$applicants$students。我希望遍历$applicants,获取ApplicantLocation的值以及与$students中该申请人姓名匹配的父级名称。尝试到目前为止,但在最后一步无法得到父母的名字。如何在$student的for循环中调用$applicants

在此示例中,$applicants包含名称,位置,地址等。

Applicant:John Taylor
Location: Newyork
Address: 7737 NW Inn

Applicant: Mark David
Location: Washington
Address: 101 S Parkway

$students(姓名与上述申请人相同):

Name: John Taylor
ParentName: Brian Taylor 
age:7

Name: Mark David
ParentName:  David Smith 
age:18

依旧......

脚本:

$students = Get-Object admin
$students
$applicants = Get-Object admin
$applicants
$applicants | Select Applicant,
                     Location,
                     @{n='Parent';e={$students[$_.ParentName]}}

输出:

Applicant: John Taylor
Location: Newyork
Parent:

1 个答案:

答案 0 :(得分:0)

$applicants列表中的对象没有属性ParentName,因此$_.ParentName的评估结果为$null。此外,$students首先不是哈希表,因此查找$students[...]无论如何都不会返回任何内容。因此,计算出的属性Parent仍为空。

你可能想要这样的东西:

$applicants | Select-Object Applicant, Location, @{n='Parent';e={
    $name = $_.Applicant;
    $students | Where-Object { $_.Name -eq $name } |
        Select-Object -Expand ParentName
}}

如果您希望能够使用$students[$_.Applicant]这样的查找,则需要使用学生姓名作为关键字将学生列表放在哈希表中:

$students_ht = @{}
$tmp | ForEach-Object { $students_ht[$_.Name] = $_ }
$applicants | Select-Object Applicant, Location,
    @{n='Parent';e={$students_ht[$_.Applicant].ParentName}}