#powershell
#powershell
Вопрос:
В настоящее время я беру созданную вручную хэш-таблицу, чтобы я мог перебирать
$aceList = @{
"Domainjdoe" = "Change, Submit, GetPassword"
"Domainssmith" = "Change, Submit, GetPassword"
"Domainmsmith" = "Submit"
}
Однако это не позволяет мне абстрагироваться от нее больше.
В идеале я хотел бы что-то вроде этого без необходимости устанавливать $acl = @{}
внешнюю часть функции?
function Set-HashTable {
Param(
[String]$Identity,
[String]$Access,
[Hashtable]$ACL
)
$ACL.Add($Identity, $Access)
return $ACL
}
$acl = @{}
$acl = Set-ACL -Identity "Domainjdoe" -Access "Change, Submit, GetPassword" -ACL $acl
$acl = Set-ACL -Identity "Domainssmith" -Access "Change, Submit, GetPassword" -ACL $acl
$acl = Set-ACL -Identity "Domainmsmith" -Access "Submit" -ACL $acl
Комментарии:
1. вы пробовали добавить функциональный тест, чтобы проверить, существует ли уже хеш-таблица? [ усмешка ]
2. Я. Я только что сделал это, все, что мне нужно сделать, это убедиться, что я очистил хеш-таблицу позже, чтобы избежать ее перегрузки.
3. похоже, вы просто меняете «сделать его 1-м» на «очистить его последним». [ усмешка ] я подозреваю, что у меня были бы
New-AclTable
иAdd-ToAclTalbe
… или просто сделайте это без какой-либо функции вообще.4.
[Hashtable]$ACL
->[Hashtable]$ACL = @{}
5. Кстати, я полагаю
Set-ACL
, что в вашем фрагменте кода это действительно должно бытьSet-HashTable
? Потому что вы не должны переопределять встроенные командлеты.
Ответ №1:
Присвойте параметру $ACL
значение по умолчанию, и вы сможете избежать передачи начальной пустой хеш-таблицы:
function Set-HashTable {
Param(
[String]$Identity,
[String]$Access,
[Hashtable]$ACL = @{}
)
$ACL.Add($Identity, $Access)
return $ACL
}
$acl = Set-HashTable -Identity 'Domainjdoe' -Access 'Change, Submit, GetPassword'
$acl = Set-HashTable -Identity 'Domainssmith' -Access 'Change, Submit, GetPassword' -ACL $acl
$acl = Set-HashTable -Identity 'Domainmsmith' -Access 'Submit' -ACL $acl
С учетом сказанного я не вижу преимущества инкапсуляции такой операции, как добавление пар ключ / значение в хеш-таблицу в функции. Сделать это напрямую гораздо проще, например:
$acl = @{}
$acl.Add('Domainjdoe', 'Change, Submit, GetPassword')
$acl.Add('Domainssmith', 'Change, Submit, GetPassword')
$acl.Add('Domainmsmith', 'Submit')
или вот так:
$acl = @{}
$acl['Domainjdoe'] = 'Change, Submit, GetPassword'
$acl['Domainssmith'] = 'Change, Submit, GetPassword'
$acl['Domainmsmith'] = 'Submit'