gpt4 book ai didi

powershell - 从对象数组初始化哈希表?

转载 作者:行者123 更新时间:2023-12-05 09:35:08 27 4
gpt4 key购买 nike

我是 Powershell 的新手,不到一天的经验。我有一组从 Get-ADUser 调用返回的对象。我将进行大量查找,因此认为最好从中构建一个哈希表。

是否有一种简写的方法来使用此数组初始化哈希表并指定对象的属性之一用作键?

或者我是否必须循环整个数组并手动添加到集合中?

$adSet = @{}

foreach ($user in $allusers) {

$adSet.add($user.samAccountname, $user)
}

最佳答案

[...] do I have to loop

... the whole array ...

没有

您不必具体化数组并使用循环语句(如 foreach(){...}),您可以使用管道将对象流转换为哈希表同样,使用 ForEach-Object cmdlet - 如果输入源(在下面的示例中为 Get-Service)速度较慢,这可能会更快:

$ServiceTable = Get-Service |ForEach-Object -Begin { $ht = @{} } -Process { $ht[$_.Name] = $_ } -End { return $ht }

作为 -Begin 传递的 block 将执行一次(在开始时),传递给 -Process 的 block 将每个管道输入项执行一次,传递给 -End 的 block 将在接收和处理所有输入后执行一次。

以您的示例为例,它看起来像这样:

$ADUserTable = Get-ADUser -Filter * |ForEach-Object -Begin { $ht = @{} } -Process { $ht[$_.SAMAccountName] = $_ } -End { return $ht }

PowerShell 中的每个“cmdlet”都映射到这个 Begin/Process/End 生命周期,因此使用自定义函数概括此模式非常简单:

function New-LookupTable {
param(
[Parameter(Mandatory, ValueFromPipeline)]
[array]$InputObject,

[Parameter(Mandatory)]
[string]$Property
)

begin {
# initialize table
$lookupTable = @{}
}

process {
# populate table
foreach($object in $InputObject){
$lookupTable[$object.$Property] = $object
}
}

end {
return $lookupTable
}
}

然后像这样使用:

$ADUserTable = Get-ADUser |New-LookupTable -Property SAMAccountName

参见 about_Functions_Advanced document和相关的帮助主题,以获取有关编写高级和支持管道的函数的更多信息

关于powershell - 从对象数组初始化哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067500/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com