繁体   English   中英

将参数从另一个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命令什么都不打印。 上述参数传递有什么问题?

有两个可能的问题:

  • 行注释前缀是# (而不是//
  • 执行策略(尤其是其默认值)可能会阻止调用脚本b.ps1 详细信息是这篇MS文章a.ps ,在尝试从命令行运行a.ps之后, a.ps会对此文章进行暗示)。
    链接的文章还详细说明了如何正确设置策略(简而言之,从命令行Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope ProcessSet-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

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

最后,这里不需要// for comments,#和<##>在这个网站上运行正常,如下所示。

环境

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM