如何处理具有某些对偶值的哈希 Table?使用字符串

How to Handle Hash Table with Some Dual Values? Working with Strings

我的任务是在 AD 中查找用户部门,然后将它们与查找 CSV 交叉引用文件中的部门手册进行匹配。他们每个部门都有 1 个代码,映射到 1 个手册,但在某些情况下,一个部门可能会得到 2 个不同的手册。

文件 1:

Code    Manual
A   Administrative
B   Ambulatory Care
C   Anatomic Pathology & Clinical Laboraties

文件 2:

AD Departments  Code
300P RENEWAL    A3
ACCOUNTING OPERATIONS   A11
ACCOUNTS PAYABLE    A11
ACCREDITATION   A
ADVANCED LUNG DISEASE   B
AGING ADULT SERVICES    A3
ANESTHESIA  A6
APP - INPATIENT A3
B2  A3
BENEFITS MANAGEMENT A11
BLOOD TRANSFUSION SERVICES  A3
BMT SERVICE LINES   B
Business Development    V
BUSINESS OPS&STRATEGIC INIT V
BW DIGESTIVE HEALTH CENTER  B, V

如果一个部门与文件一对一映射,此代码工作正常,但在 AD 部门有 2 个代码(用于 2 个不同的手册)的情况下,它似乎只获取第一个。有没有一种简单的方法可以像上次 BW 消化健康中心那样列出两者,他们需要手册 B 和 V?理想情况下,$DeptMan 可以在需要的地方列出 2 个值。

这是我目前的情况:

$Depts | ForEach-Object {
    $Table1[$_.'AD Departments'] = $_
}

$Manuals | ForEach-Object {
    $Table2[$_.Code] = $_
}

$Managers = Get-ADUser -Filter {some filter} -pr SamaccountName,GivenName,Initials, SN,Company,Title,Department

foreach ($Man in $Managers) {
    $Dept    = $Man.Department 
    $Code    = $Table1.Item("$Dept")
    $CodeMap = $Code.code
    $Manual  = $Table2.Item("$CodeMap")
    $DeptMan = $Manual.Manual

    $Man |
        select @{Name="SID";Expression={$Man.SamAccountName}},
            @{Name="FirstName";Expression={$Man.givenName}},
            @{Name="Initials";Expression={$Man.Initials}},
            @{Name="LastName";Expression={$Man.sn}},
            @{Name="Department";Expression={$Man.Department}},
            @{Name="Email";Expression={$Man.Mail}},
            @{Name="Manual";Expression={$DeptMan}} |
        Export-Csv C:\output.csv -NoType -Append
}

好吧,我终于明白了。您必须重置 foreach 循环中的变量,并将 $codes 更改为字符串,否则它们不会计算为 True 或 False。一旦我进入 If 块,我就重新创建了新的手动变量,它似乎可以工作。我在初始脚本开头发布的所有其他内容都没有改变。希望这可以帮助某人。

foreach ($Man in $Managers) {

    $DeptMan = $Null
    $DeptMan1 = $Null

    $Dept = $Man.Department 

    $Code = $Table1.item("$Dept")

    [string]$CodeMap = $code.code

    $Manual = $Table2.item("$CodeMap")

    $DeptMan = $Manual.Manual

    if ($CodeMap -like "*,*") {$CodeMap1 = $code.code.Split(", ",[System.StringSplitOptions]::RemoveEmptyEntries) 

                                [string]$CodeMap2 = $CodeMap1[0] 

                                [string]$CodeMap3 = $CodeMap1[1]

                                $Manual1 = $Table2.item("$CodeMap2")

                                $Manual2 = $Table2.item("$CodeMap3")

                                $DeptMan = $Manual1.Manual

                                $DeptMan1 = $Manual2.Manual

                                }

   $Man | select @{Name="SID";Expression={$Man.SamAccountName}},
                 @{Name="FirstName";Expression={$Man.givenName}},
                 @{Name="Initials";Expression={$Man.Initials}},
                 @{Name="LastName";Expression={$Man.sn}},
                 @{Name="Department";Expression={$Man.Department}},
                 @{Name="Email";Expression={$Man.Mail}},
                 @{Name="Manual1";Expression={$DeptMan}},
                 @{Name="Manual2";Expression={$DeptMan1}}| export-csv C:\Scripts-Manuals_$((Get-Date).ToString('MM-dd-yyyy')).csv -NoTypeInformation -append 


    }