Я пытаюсь написать функцию в powershell, которая примет один или два аргумента.Наборы параметров Powershell того же типа
В одном наборе параметров принимается имя и фамилия , а другой - имя пользователя. Очевидно, что все три из них являются строками, но я хочу, чтобы пользователь мог просто ввести
Get-Info <Username>
или
без названия параметров. НО, если они НАЗНАЧИЛИ параметры, они могли бы потенциально поставить только имя FirstName или только LastName, что было бы хорошо. , например.
Get-Info -FirstName John
Get-Info -LastName Doe
Любые советы о том, как получить Powershell по умолчанию в правильном случае без именованных параметров в команде?
Пример кода с ошибкой:
clear-host
function Get-Info {
[CmdletBinding(DefaultParameterSetName='Username',PositionalBinding=$true)]
param (
[Parameter(ParameterSetName='Username', Position=0)]
[string]$Username
,
[Parameter(ParameterSetName='Name', Position=0)]
[string]$FirstName
,
[Parameter(ParameterSetName='Name', Position=1)]
[string]$LastName
)
process {
"Username: $Username"
"FirstName: $FirstName"
"LastName: $LastName"
}
}
Get-Info "myUsername"
Get-Info "myFirst" "myLast" #this doesn't work, as myFirst is bound to Username, and the Username parameterset has no second parameter
Get-Info -Username "Username by Param Name"
Get-Info -FirstName "FirstOnly"
Get-Info -LastName "LastOnly"
Это не работает так, как ожидалось. Как с примером в вопросе (Спасибо @JohnLBevan!) При предоставлении 'Get-Info firstname lastname' возвращается ошибка, которая не может быть найдена с помощью позиционного параметра _A, который принимает аргумент 'lastname'_ , потому что это привязка' firstname 'к Username parameter –