将参数从另一个 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
我有两个 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