将参数从另一个 powershell 脚本传递给一个 powershell 脚本

To pass argument to one powershell script from another powershell script

我有两个 powershell 脚本 a.ps1 & b.ps1。我在 a.ps1 脚本中调用 b.ps1 脚本。 我需要将两个变量作为参数从 a.ps1 传递到 b.ps1 ,如下所示。

//a.ps1 Script starts here
 $variable1 ="This is Variable1"
 $variable2 ="This is Variable2"

注意:我在这个 a.ps1 脚本中调用 b.ps1 脚本,如下所示,并将上述变量作为参数传递给 b.ps1

. C:\filepath\b.ps1 $variable1 $variable2 //Calling b.ps1 script

//b.ps1 contains below code
$getVariable1= $args[0]
$getVariable2= $args[1]
echo $getVariable1

但是来自 b.ps1 的上述 echo 命令没有打印任何内容。上述参数传递有什么问题?

有 2 个可能的问题:

  • 行注释前缀是#(而不是//
  • 执行策略(尤其是它们的默认值)可能会阻止您的脚本 b.ps1 被调用。详细信息是 this MS article(不过,在尝试从命令行执行 运行 a.ps 后,powershell 会提示您阅读这篇文章)。
    链接的文章还详细介绍了如何正确设置策略(简而言之,从命令行执行:Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

b.ps1 调用中的额外 space 是什么?

一旦我纠正了这个问题,我就得到了预期的结果。此外,如果您所做的只是发送到屏幕,则您永远不需要 Write-* (echo)。默认输出到屏幕。

最后,这里的注释不需要 //,# 和 <##> 在这个网站上工作得很好,如下所示。

环境

$PSVersionTable

<#
Name                           Value
----                           -----
PSVersion                      5.1.17763.503
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0, 5.0, 5.1.17763.503}
BuildVersion                   10.0.17763.503
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
#>

Get-ExecutionPolicy
RemoteSigned

内容

# a.ps1
'running a.ps1 script, calling b.ps1'
$variable1 = "This is Variable1"
$variable2 = "This is Variable2"

.\b.ps1 $variable1 $variable2

内容

# b.ps1
'running b script'
'Showing output from a.ps1 variables'
$getVariable1= $args[0]
$getVariable2= $args[1]

$getVariable1

结果

 .\a.ps1
running a.ps1 script, calling b.ps1
running b script
Showing output from a.ps1 variables
This is Variable1