Powershell, имя переключателя ParameterSets - PullRequest
0 голосов
/ 31 октября 2019

Оригинальный вопрос - Обновление ниже - Окончательный код в отмеченном ответе

Надеюсь, более или менее простой вопрос, но мой мозг зажарен. Я пытаюсь написать модуль для установки разрешений раздела реестра с именем «Set-RegistryPermissions», и у меня возникла небольшая проблема с именованием моих ключей и созданием приемлемых наборов параметров. Я придумал следующее, но дошел до последней строчки и был озадачен.

    # -Recurse                  Sets Permissions for supplied key and subkeys (entire tree)

    # -Inherit                  Sets Inheritance for supplied key
    # -SubkeyInherit            Sets Inheritance for only subkeys (entire subkey tree)

    # -Inherit -Recurse         Sets Inheritance for supplied key and subkeys (entire tree)
    # -SubkeyInherit -Recurse   Sets Permissions for supplied key and Inheritance for subkeys (entire subkey tree)

Чем больше я на это смотрю, тем больше я запутался. Возможно, я мог бы объединить -Inherit & -SubkeyInherit вместо -Inherit -Recurse или, возможно, начать заново и получить что-то вроде SetSuppliedKey, Recurse, Set ... Аааа, я снова запутался. Любые предложения, пожалуйста?

---- Обновление ----

В ответ на комментарий @Scepticalist я предложил следующее, которое также позволяет мне добавить '-Permissions -Subkeys'.

Я действительно думал, что могу изменить' -Permissions -Recurse 'на' -Permissions -All ', но это звучит сложнее для понимания, или я мог бы изменить' -Inherit -All 'на' -Inherit -Recurse 'и уберите переключатель -Все, но это может сбить с толку последний вариант, например, вы пытаетесь получить все разрешения, а также наследовать.

Может быть, я просто слишком обдумываю это или пытаюсь сделать слишком много водна команда. Возможно, было бы проще, если бы команда была запущена дважды, установите Разрешения, а затем установите Наследование.

Пожалуйста, дайте мне знать ваши мысли, если вы видите какие-либо проблемы или считаете, что это слишком сложно. Спасибо.

# -Permissions (Parameter)
# -Recurse (Switch)
# -Inherit (Switch)
# -Subkeys (Switch)
# -All (Switch)

# -Permissions              Sets Permissions for supplied key
# -Permissions -Subkeys     Sets Permissions for only subkeys (entire subkey tree)
# -Permissions -Recurse     Sets Permissions for supplied key and subkeys (entire tree)

# -Inherit                  Sets Inheritance for supplied key
# -Inherit -Subkeys         Sets Inheritance for only subkeys (entire subkey tree)
# -Inherit -All             Sets Inheritance for supplied key and subkeys (entire tree)

# -Permissions -Inherit -Subkeys    Sets Permissions for supplied key and Inheritance for subkeys (entire subkey tree)
# -Permissions -Inherit -All        Sets Permissions for supplied key and Inheritance for entire tree

Это будут единственные допустимые комбинации, примером недопустимой комбинации может быть -Permissions -Subkeys -Recurse или -Permissions -Subkeys -All

[РЕДАКТИРОВАТЬ]

Прочитав его, я думаю, я мог бы изменить «Подключи» на «InheritSubkeys» и убрать переключатель «Все», чтобы последние 4 строки были прочитаны,

# -InheritSubkeys           Sets Inheritance for only subkeys (entire subkey tree)
# -Inherit -InheritSubkeys  Sets Inheritance for supplied key and subkeys (entire tree)

# -Permissions -InheritSubkeys            Sets Permissions for supplied key and Inheritance for subkeys (entire subkey tree)
# -Permissions -Inherit -InheritSubkeys   Sets Permissions for supplied key and Inheritance for entire tree

1 Ответ

0 голосов
/ 04 ноября 2019

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

Получить-Помощь отображается правильно, завершение вкладки работает правильно, и только после ввода тире отображаются только действительные параметры.

Я до сих пор не до конца понимаю, как все это работает, но это работает, и это все, что меня волнуето сейчас.

Итак, мои окончательные наборы имен и параметров:

# -User          (Mandatory)
# -RegKey        (Mandatory)
# -Rights        (Allow | Deny)
# -Permissions   (Validateset)
# -Recurse       (Switch)
# -SubkeysOnly   (Switch)
# -Inherit       (SingleKey | All | Subkeys)

# -Permissions -Rights                    Sets Permissions for supplied key
# -Permissions -Rights -Recurse           Sets Permissions for supplied key and subkeys (entire tree)
# -Permissions -Rights -SubkeysOnly       Sets Permissions for only subkeys (entire subkey tree)

# -Inherit SingleKey                      Sets Inheritance for supplied key
# -Inherit Subkeys                        Sets Inheritance for only subkeys (entire subkey tree)
# -Inherit All                            Sets Inheritance for supplied key and subkeys (entire tree)

# -Permissions -Rights -Inherit Subkeys   Sets Permissions for supplied key and Inheritance for subkeys (entire subkey tree)
# -Permissions -Rights -Inherit All       Sets Permissions for supplied key and Inheritance for entire tree 

function Set-RegistryPermissions
{
    param(
    [Parameter(Mandatory=$true, ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [string]$User,

    [Parameter(Mandatory=$true, ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [string]$RegKey,

    [Parameter(ParameterSetName = 'PermissionsInherit', Mandatory = $true)]
    [Parameter(ParameterSetName = 'SubKeysOnly', Mandatory = $true)]
    [Parameter(ParameterSetName = 'Recurse', Mandatory = $true)]
    [Parameter(ParameterSetName = 'PermissionsRights', Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [Validateset("ChangePermissions","CreateSubKey","Delete","EnumerateSubKeys","ExecuteKey","FullControl", ``
                 "Notify","QueryValues","ReadKey","ReadPermissions","SetValue","TakeOwnership","WriteKey")]
    [string[]]$Permissions,

    [Parameter(ParameterSetName = 'Recurse', Mandatory = $true)]
    [Switch]$Recurse,

    [Parameter(ParameterSetName = 'SubKeysOnly', Mandatory = $true)]
    [Switch]$SubKeysOnly,

    [Parameter(ParameterSetName = 'Inherit', Mandatory = $true)]
    [Parameter(ParameterSetName = 'PermissionsInherit', Mandatory = $true, ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [Validateset("SingleKey","All","Subkeys")]
    [string]$Inherit,

    [Parameter(ParameterSetName = 'SubKeysOnly', Mandatory = $true)]
    [Parameter(ParameterSetName = 'Recurse', Mandatory = $true)]
    [Parameter(ParameterSetName = 'PermissionsInherit', Mandatory = $true)]
    [Parameter(ParameterSetName = 'PermissionsRights', Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [Validateset("Allow","Deny")]
    [string]$Rights
    )
}

Get-Help Set-RegistryPermissions

Если вы хотите скопировать и протестировать, в разрешениях ValidateSet должен быть только один знак обратной черты (`). Мне пришлось добавить секунду, чтобы он отображался прямо здесь.

Результат от Get-Help

SYNTAX
Set-RegistryPermissions -User <string> -RegKey <string> -Permissions {ChangePermissions | CreateSubKey | Delete | EnumerateSubKeys | ExecuteKey | FullControl | Notify | QueryValues | ReadKey | ReadPermissions | SetValue | TakeOwnership | WriteKey} 
-Rights {Allow | Deny}  [<CommonParameters>]

Set-RegistryPermissions -User <string> -RegKey <string> -Permissions {ChangePermissions | CreateSubKey | Delete | EnumerateSubKeys | ExecuteKey | FullControl | Notify | QueryValues | ReadKey | ReadPermissions | SetValue | TakeOwnership | WriteKey} 
-Recurse -Rights {Allow | Deny}  [<CommonParameters>]

Set-RegistryPermissions -User <string> -RegKey <string> -Permissions {ChangePermissions | CreateSubKey | Delete | EnumerateSubKeys | ExecuteKey | FullControl | Notify | QueryValues | ReadKey | ReadPermissions | SetValue | TakeOwnership | WriteKey} 
-SubKeysOnly -Rights {Allow | Deny}  [<CommonParameters>]

Set-RegistryPermissions -User <string> -RegKey <string> -Permissions {ChangePermissions | CreateSubKey | Delete | EnumerateSubKeys | ExecuteKey | FullControl | Notify | QueryValues | ReadKey | ReadPermissions | SetValue | TakeOwnership | WriteKey} 
-Inherit {SingleKey | All | Subkeys} -Rights {Allow | Deny}  [<CommonParameters>]

Set-RegistryPermissions -User <string> -RegKey <string> -Inherit {SingleKey | All | Subkeys}  [<CommonParameters>]

Набор разрешений ValidateSet может сделать его немного трудным для чтения, но это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...