如何在 PowerShell 数组中反转横向

How do I reverse transversal in a PowerShell array

给定 PowerShell array hashtable1 类似于以下内容:

$dept= @{
     'Sales' = @{
        'SAM' = 'Manager'
        'SAP' = 'Person'
    }
    'IT' = @{
        'ITM' = 'Manager'
        'ITS' = 'Specialist'
        'ITT' = 'Technician'
        'ITC' = 'Consultant'     
    }
}

如果在控制台输入以下内容:

$dept.it.itc
$dept.sales.sam

我得到:

Consultant
Manager

符合预期。

不过,我想做的是

write-host $dept.itc
write-host $dept.sam

并得到

IT Consultant
Sales Manager

在 return.

我正在寻找一个排序函数来执行数组的 'reverse traversal',因为 'IT'、'Sales' 等是我需要将新用户放入的 OU。为了简洁起见,我删除了更多的 OU。


[1] array 只是一个值列表,而 hashtable 是key/value 对的集合,类似于 Javascript 的 JSON 或 Python 的 dict.

值得注意的是,您的对象不是 Array。在 PowerShell 中 @{}Hashtable。您可以阅读有关使用哈希表的更多信息 here

如果您有我将要为您部门 OU 中的每个角色调用的唯一 角色代码 ,您要做的就是匹配 Key嵌套的哈希表来找到你的部门。最简单的方法是创建一个快速帮助函数来处理多个调用,除非您只是循环遍历数组或字符串列表。

以下是如何提取所需字符串的示例:(如果您没有唯一键,则可能需要添加额外的过滤)

$Departments = @{
    'Sales' = @{
        'SAM' = 'Manager'
        'SAP' = 'Person'
    }
    'IT'    = @{
        'ITM' = 'Manager'
        'ITS' = 'Specialist'
        'ITT' = 'Technician'
        'ITC' = 'Consultant'     
    }
}

function Get-DepartmentOU {
    Param (
        [CmdletBinding()]
        [Parameter(Mandatory = $true)]
        [System.String]
        $RoleCode
    )

    # Get the DictionaryEntry in the main Hashtable where the nested Hashtable value matches the role you are looking for.
    $Department = $script:Departments.GetEnumerator() | Where-Object { $_.Value.ContainsKey($RoleCode) }
    
    # Print the name of the DictionaryEntry (Your department) and retrieve the value from the Hashtable for the role.
    Write-Output ("{0} {1}" -f $Department.Name, $Department.Value[$RoleCode])
}

然后你可以通过运行函数和指定代码来获取它们。

PS > Get-DepartmentOU -RoleCode ITC
IT Consultant