如何在 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
给定 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