Передача переменной $ args в функцию - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть скрипт tester.ps1; первое, что он делает - это вызывает функцию (определенную в самом скрипте) с именем main.

Мне нужно передать в автоматическую переменную $args, которая была передана в it из командной строки.

Как мне это сделать?

Кажется, что следующее не работает:

#Requires -Version 5.0
#scriptname: tester.ps1
function main($args) {
    Write-Host $args
}
# Entry point
main $args

Когда я сохраняю этот tester.ps1 и вызываю его, функция не видит переданный параметр?

PS> . .\tester.ps1 hello world
From entry point: hello world
From Function:

Ответы [ 2 ]

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

На основании комментария Йеруна Мостерта *; решение ниже. По сути, я неправильно пытался «перегрузить» или «затенить» встроенную переменную $ arg. Мне просто нужно иметь параметр с другим именем, например:

 #Requires -Version 5.0
    function main($my_args) {
        write-host "From Function:" $my_args 
    }
    # Entry point
    write-host "From entry point:" $args
    main $args

> . .\tester.ps1 hello world
From entry point: hello world
From Function: hello world
0 голосов
/ 09 ноября 2018

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

Однако имейте в виду, что если вы хотите передать параметры по имени, вам нужно вызвать main с оператором разбрызгивания @, например:

#Requires -Version 5.0
#scriptname: tester.ps1
function main($myString, $otherVar) {
    Write-Host $myString
}
# Entry point
Write-Host "Not using splatting: " -NoNewline
main $args

Write-Host "Using splatting: " -NoNewline
main @args

Выход:

PS> . .\test.ps1 -myString "Hi World" -otherVar foobar
Not using splatting: -myString Hi World -otherVar foobar
Using splatting: Hi World

Подробнее об операторе разбрызгивания @ здесь

...