PowerShell Создать Hashtable, если не существует, и добавить значения - PullRequest
0 голосов
/ 14 апреля 2019

В настоящее время я беру хэш-таблицу, созданную вручную, поэтому я могу перебрать

$aceList = @{
    "Domain\jdoe" = "Change, Submit, GetPassword"
    "Domain\ssmith" = "Change, Submit, GetPassword"
    "Domain\msmith" = "Submit"
}

Однако это не позволяет мне абстрагироваться от нее больше.

В идеале мне бы хотелосьчто-то вроде этого без необходимости устанавливать $acl = @{} вне функции?

function Set-HashTable {
    Param(
        [String]$Identity,
        [String]$Access,
        [Hashtable]$ACL
    )
    $ACL.Add($Identity, $Access)
    return $ACL
}

$acl = @{}
$acl = Set-ACL -Identity "Domain\jdoe" -Access "Change, Submit, GetPassword" -ACL $acl
$acl = Set-ACL -Identity "Domain\ssmith" -Access "Change, Submit, GetPassword" -ACL $acl
$acl = Set-ACL -Identity "Domain\msmith" -Access "Submit" -ACL $acl

1 Ответ

1 голос
/ 15 апреля 2019

Дайте параметру $ACL значение по умолчанию, и вы можете избежать передачи начальной пустой хеш-таблицы:

function Set-HashTable {
    Param(
        [String]$Identity,
        [String]$Access,
        [Hashtable]$ACL = @{}
    )
    $ACL.Add($Identity, $Access)
    return $ACL
}

$acl = Set-HashTable -Identity 'Domain\jdoe' -Access 'Change, Submit, GetPassword'
$acl = Set-HashTable -Identity 'Domain\ssmith' -Access 'Change, Submit, GetPassword' -ACL $acl
$acl = Set-HashTable -Identity 'Domain\msmith' -Access 'Submit' -ACL $acl

С учетом вышесказанного я не вижу преимущества инкапсуляции такой операции, как добавление ключа /пары значений для хеш-таблицы в функции.Делать это напрямую гораздо проще, например:

$acl = @{}
$acl.Add('Domain\jdoe', 'Change, Submit, GetPassword')
$acl.Add('Domain\ssmith', 'Change, Submit, GetPassword')
$acl.Add('Domain\msmith', 'Submit')

или вот так:

$acl = @{}
$acl['Domain\jdoe']   = 'Change, Submit, GetPassword'
$acl['Domain\ssmith'] = 'Change, Submit, GetPassword'
$acl['Domain\msmith'] = 'Submit'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...