组合默认参数和参数集
Combining Default Parameter and Parameter Sets
我有一个 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
时,系统才会提示用户输入凭据。
但是无论给定什么参数,都会显示凭据弹出窗口。
我假设这与默认值有关。
您在这里根本不需要参数集。只需使用 Empty 凭据来初始化 $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
希望对您有所帮助
我有一个 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
时,系统才会提示用户输入凭据。
但是无论给定什么参数,都会显示凭据弹出窗口。
我假设这与默认值有关。
您在这里根本不需要参数集。只需使用 Empty 凭据来初始化 $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
希望对您有所帮助