Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описаны различные типы параметров, которые можно объявить в командлетах. Параметры командлета могут быть позициональными, именованными, обязательными, необязательными или [switch] параметрами.
Позиционные и именованные параметры
Все параметры командлета — это именованные или позиционные параметры. Именованный параметр требует ввода имени и аргумента параметра при вызове командлета. Позиционный параметр требует только тип аргументов в относительном порядке. Затем система сопоставляет первый неименованный аргумент с первым позициальным параметром. Система сопоставляет второй неименованный аргумент с вторым неименованным параметром и т. д. По умолчанию все параметры командлета называются параметрами.
Чтобы определить именованный параметр, опустите ключевое слово Position в объявлении атрибута параметра , как показано в следующем объявлении параметра.
[Parameter(ValueFromPipeline=true)]
public string UserName
{
get { return userName; }
set { userName = value; }
}
private string userName;
Чтобы определить позиционный параметр, добавьте ключевое слово Position в объявление атрибута параметра, а затем укажите позицию. В следующем примере параметр UserName объявлен как позиционный параметр с позицией 0. Это означает, что первый аргумент вызова автоматически привязан к этому параметру.
[Parameter(Position = 0)]
public string UserName
{
get { return userName; }
set { userName = value; }
}
private string userName;
Примечание.
При запуске командлета рекомендуется объявить наиболее используемые параметры в качестве позиционных параметров, чтобы пользователю не нужно вводить имя параметра при запуске командлета.
Позиционные и именованные параметры принимают один аргументы или несколько аргументов, разделенных запятыми. Допускается несколько аргументов, только если параметр принимает коллекцию, например массив строк. Вы можете смешивать позиционные и именованные параметры в одном командлете. В этом случае система сначала извлекает именованные аргументы, а затем пытается сопоставить оставшиеся неименованные аргументы с позициальными параметрами.
В следующих командах показаны различные способы указания одного и нескольких аргументов для параметров командлета Get-Command. Обратите внимание, что в последних двух примерах -Name не нужно указывать, так как параметр Name определяется как позиционный параметр.
Get-Command -Name Get-Service
Get-Command -Name Get-Service,Set-Service
Get-Command Get-Service
Get-Command Get-Service,Set-Service
Обязательные и необязательные параметры
Можно также определить параметры командлета как обязательные или необязательные параметры. (Необходимо указать обязательный параметр, прежде чем среда выполнения PowerShell вызывает командлет.) По умолчанию параметры определяются как необязательные.
Чтобы определить обязательный параметр, добавьте ключевое слово Mandatory в объявление атрибута параметра и задайте для него значение true, как показано в следующем объявлении параметра.
[Parameter(Position = 0, Mandatory = true)]
public string UserName
{
get { return userName; }
set { userName = value; }
}
private string userName;
Чтобы определить необязательный параметр, опустите ключевое слово Mandatory в объявлении атрибута параметра , как показано в следующем объявлении параметра.
[Parameter(Position = 0)]
public string UserName
{
get { return userName; }
set { userName = value; }
}
private string userName;
параметры [switch]
PowerShell предоставляет тип System.Management.Automation.SwitchParameter, позволяющий определить параметр, значение по умолчанию которого false, если параметр не указан при вызове командлета. По возможности используйте [switch] параметры вместо логических параметров.
Рассмотрим следующий пример. Многие командлеты PowerShell возвращают выходные данные. Однако эти командлеты имеют PassThru[switch] параметр, который переопределяет поведение по умолчанию. При использовании параметра PassThru командлет возвращает выходные объекты в конвейер.
В следующем примере показано, как определить [switch] параметр:
[Parameter()]
public SwitchParameter GoodBye
{
get { return goodbye; }
set { goodbye = value; }
}
private bool goodbye;
Чтобы выполнить действия командлета с параметром при его указании, используйте следующую структуру в одном из методов обработки входных данных.
protected override void ProcessRecord()
{
WriteObject("Switch parameter test: " + userName + ".");
if (goodbye)
{
WriteObject(" Goodbye!");
}
} // End ProcessRecord
По умолчанию [switch] параметры исключаются из позиционных параметров.
можно переопределить, что в атрибуте параметра, но может запутать пользователей.
Проектируйте [switch] параметры таким образом, чтобы использование параметра изменило поведение команды по умолчанию на менее распространенный или более сложный режим. Самое простое поведение команды должно быть поведением по умолчанию, которое не требует использования [switch] параметров. Базовое поведение, управляемое [switch] параметром, по значению параметра, а не его присутствию.
Существует несколько способов проверки наличия [switch] параметра:
-
MyInvocation.BoundParametersсодержит[switch]имя параметра в качестве ключа -
PSCmdlet.ParameterSetName[switch]Если параметр определяет уникальный набор параметров
Например, можно указать явное значение для коммутатора с помощью -MySwitch:$false или сплетирования. Если вы проверяете только наличие параметра, команда ведет себя так, как если значение переключателя $true вместо $false.
См. также
PowerShell