Проверочные параметры Powershell для аргументов командной строки - PullRequest
0 голосов
/ 26 апреля 2018

Я не понимаю этого. Если я поместил параметр в верхнюю часть моего скрипта, затем запустил скрипт с командной строкой и указал имя пользователя, имя пользователя присваивается $UserName

Param([string]$UserName)

Если я оберну его в функцию, запустим ее из командной строки:

Например: ./Script.ps1 -UserName BLAH

Это не присваивается $UserName

Function MainFunction
{
  Param([string]$UserName)
}
#Call Mainfunction
MainFunction;

Почему это?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Ваш код помещает параметр в область действия функции. При запуске Script.ps1 -UserName BLAH этот параметр будет передан в область действия скрипта.

Если вы хотите передать переменную вниз, вам понадобятся два блока параметров, один для скрипта и один для функции. Затем передайте имя пользователя сценария функции в качестве аргумента функции.

Param([string]$UserName)

Function MainFunction {
    Param([string]$UserName)
}

MainFunction -UserName "Chuck Norris"

В качестве альтернативы вы можете использовать имя пользователя из области действия скрипта внутри функции, используя $script: для использования переменной из этой области.

Param([string]$UserName)

Function MainFunction {
    Write-Output "Example use of $script:UserName"
}

MainFunction
0 голосов
/ 26 апреля 2018

Решение:

Function MainFunction
{
  Param([string]$UserName)
  Write-Host $UserName
}
#Call Mainfunction
MainFunction  -UserName $args[0]

Вызов из CMD:

powershell -File "Script.ps1" "Chuck Norris"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...