PowerShell:将命令行参数从主脚本传递到第二个脚本

时间:2019-09-25 07:12:57

标签: parameter-passing powershell-5.0

我有两个PowerShell脚本。第一个脚本从命令行获取两个参数,并将它们传递给第二个脚本。

error_page 500 502 503 504 /custom_50x.html; location = /custom_50x.html { root /usr/share/nginx/html; internal; }

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 的输出:

hi
script1
2

Script1.ps1的输出:

System.Object[]
1

问题:

  1. 为什么我不能直接在Script2.ps1上使用$args(变成null)?
  2. 为什么Script2.ps1通过$args作为Script1.ps1中的单个字符串来传递?

这在PowerShell 2.0中工作正常。

1 个答案:

答案 0 :(得分:1)

您正在从PowerShell中调用第二个脚本。因此,数组$args不会扩展为其元素,而是作为单个数组参数传递。使用splatting使PowerShell将数组元素作为单独的参数传递。

.\Script2.ps1 @args

旁注:不需要使用点源运算符(.)调用脚本,除非您需要脚本在与调用脚本相同的上下文中运行。