Объединение параметров по умолчанию и наборов параметров - PullRequest
0 голосов
/ 18 июня 2020

У меня есть сценарий PowerShell, который извлекает данные хоста, указанного в csv, и, если задан переключатель reboot, также пытается перезагрузить хост. Следовательно, и только в случае перезагрузки требуются учетные данные.

Мой блок параметров выглядит так:

[CmdletBinding(DefaultParametersetName = 'None')] 
Param(
  [Parameter(Mandatory = $false)]
  [ValidateNotNullOrEmpty()]
  [ValidateScript( {
      if ( -Not ($_ | Test-Path) ) {
        throw "Source $_ does not exist"
      }
      return $true
    })]
  $path= $(Join-Path $PWD.Path "sources.csv"),
  [Parameter(ParameterSetName = 'Extra', Mandatory = $false)]
  [switch]$reboot,
  [Parameter(ParameterSetName = 'Extra', Mandatory = $true)]
  [ValidateNotNullOrEmpty()]
  [System.Management.Automation.PSCredential] $credential = $(Get-Credential -UserName myUser)

)

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

Я полагаю, это как-то связано со значением по умолчанию.

1 Ответ

0 голосов
/ 21 июня 2020

Здесь вам вообще не нужны наборы параметров. Просто используйте пустые учетные данные для инициализации параметра $credential с помощью:

[CmdletBinding()] 
Param(
  [ValidateNotNullOrEmpty()]
  [ValidateScript( {
      if ( -Not ($_ | Test-Path -PathType Leaf) ) {
            throw "Source $_ does not exist"
      }
    return $true
    })]
    $path = $(Join-Path $PWD.Path "sources.csv"),

    [switch]$reboot,

    [ValidateNotNullOrEmpty()]
    [System.Management.Automation.PSCredential]$credential = [System.Management.Automation.PSCredential]::Empty
)

# if no credential is given prompt for it
if ($credential -eq [System.Management.Automation.PSCredential]::Empty) {
    $credential = Get-Credential -UserName myUser -Message 'Please enter your username and password'
}

# rest of your code goes here

Надеюсь, что это поможет

...