Динамические массивы PowerShell - PullRequest
0 голосов
/ 21 ноября 2018

Я тестировал что-то новое, что узнал недавно в Powershell, создавая динамические массивы.Поэтому моей первоначальной идеей было создать массивы на основе групп AD и их членов, а затем что-то сделать с этой информацией.Тогда я спросил себя, может ли powershell сделать это для меня из поиска AD.Ответ был да, и я использовал код ниже, чтобы сделать это.

$Groups = (Get-ADGroup -Filter  {name -Like 'My_Group*'}).name

foreach ($Group in $Groups) {
    New-Variable -Name "$($group)" -Value (Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SAMAccountName)
}

Это идеально, так как создает массивы в powershell с именем группы AD в качестве имени массива, а элементы массива являются членами этой группы.Теперь у меня вопрос: как я могу ссылаться на группы, созданные в сценарии, если я на самом деле не знаю названия групп?

Я все еще довольно новичок в PowerShell, так что это может быть просто глупой идеей, но это было то, что я хотел знать независимо от этого.Приветствия

1 Ответ

0 голосов
/ 21 ноября 2018

Вместо переменных используйте хеш-таблицу!

Хеш-таблица - это неупорядоченный словарь, идеально подходящий для хранения вещей по имени:

# Create an empty hashtable
$GroupMembers = @{}

# populate it with the relevant samaccountname values:
foreach($Group in (Get-ADGroup -Filter {Name -like 'My_Group*'}).Name) {
    $GroupMembers["$Group"] = Get-ADGroupMember -Identity $Group -Recursive |Select -Expand SAMAccountName
}

Теперь у вас будет ссылка на все имена групп через список $GroupMembers.Keys, так что выможет легко обнаружить их всех снова:

foreach($GroupName in $GroupMembers.Keys){
    "$GroupName contains the members: $($GroupMembers[$GroupName] -join ', ')"
}
...