Командлет Powershell с обязательными параметрами - PullRequest
3 голосов
/ 22 июня 2011

Я пытаюсь создать простой командлет powershell, который бы имел несколько обязательных параметров.Однако для этого я нашел следующий код, но не могу заставить его выполнить:

function new-command() {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
}

new-command

Возвращает следующую ошибку:

Отсутствует закрытие ')' в выражении. "Строка:5 символов: 3 + [<<<< строка] $ Имя </p>

Что я делаю не так?

Ответы [ 5 ]

10 голосов
/ 22 июня 2011

Объяснение заключается в том, что вы запускаете этот скрипт в PowerShell V1.0, и эти атрибуты функций поддерживаются в PowerShell V2.0.Посмотрите переменную $host для вашей версии PowerHhell.

1 голос
/ 07 февраля 2012

У вас будет такое же сообщение об ошибке даже с Powershell v2.0, если Param (...) не был объявлен в начале скрипта (исключая строки комментариев).Пожалуйста, обратитесь к powershell-2-0-param-keyword-error

1 голос
/ 22 июня 2011

В PS 2.0 обязательные параметры управляются через атрибуты CmdLetBinding и Parameter, как показано в других ответах.

function new-command {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
    $Name
}

new-command

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

function new-command {
    param($Name=$(throw "Mandatory parameter -Name not supplied."))
    $Name
}

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

1 голос
/ 22 июня 2011

Попробуйте вместо этого:

function new-command {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
}

new-command

Вам не нужны скобки после имени функции.

0 голосов
/ 26 ноября 2018

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

Param([parameter(Mandatory=$true, HelpMessage="Path to file")] $path)

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