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

时间:2019-05-24 09:15:52

标签: powershell powershell-v2.0 powershell-v3.0

我有两个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 个答案:

答案 0 :(得分:0)

有两个可能的问题:

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

答案 1 :(得分:0)

b.ps1调用中的多余空间是什么?

一旦我纠正了这一点,我就会得到预期的结果。另外,如果您正在做的所有事情都发送到屏幕上,则无需使用Write-*(回显)。默认输出到屏幕。

最后,不需要在这里//进行注释,#和<##>在此站点上可以正常工作,如下所示。

环境

$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