PowerShell передает параметр командной строки в основной сценарий во второй сценарий - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть два скрипта PowerShell.Первый сценарий берет два параметра из командной строки и передает их второму сценарию.

Script1.ps1:

Write-Output ($args)  
Write-Output ($args.Length)
. ./Script2.ps1 $args

Script2.ps1:

Write-Output ($args)
Write-Output ($args.Length)

Называя это как

Script1.ps1 hi script1

Выход Script1.ps1:

hi
script1
2

Выход Script2.ps1:

System.Object[]
1

Вопросы:

  1. Почему я не могу использовать $args непосредственно на Script2.ps1 (равно нулю)?
  2. Почему $args прошло, хотя Script1.ps1 представляет собой одну строкув Script2.ps1?

Это отлично работает в PowerShell 2.0.

1 Ответ

1 голос
/ 25 сентября 2019

Вы запускаете второй скрипт из PowerShell.Из-за этого массив $args не расширяется до своих элементов, а передается как один аргумент массива.Используйте splatting , чтобы PowerShell передавал элементы массива в качестве отдельных аргументов.

.\Script2.ps1 @args

Примечание: использование оператора выбора точки (.) для вызова сценария не требуется, если тольковам нужно, чтобы скрипт выполнялся в том же контексте, что и скрипт, из которого он был вызван.

...