如何将参数或变量从一个PowerShell脚本传递到另一个?

如何将参数或变量从一个PowerShell脚本传递到另一个?

问题描述:

在cmd中,我可以通过在待运行的bat文件被声明之后列出它们来将参数从一个蝙蝠传递到另一个蝙蝠。然后,待运行的蝙蝠将它们接收为%1,%2,%3等。这可以在Powershell中完成吗?如何将参数或变量从一个PowerShell脚本传递到另一个?

我有一个ps1脚本,脚本1,提示用户的位置。该脚本已被照顾。该位置存储为变量; $同上。在第一个脚本中,有一点意味着用户可以选择一个将运行另一个ps1脚本的选项,脚本2具有更多的选项。我想从script1将$ loc传递给script2。

在SCRIPT1我曾尝试以下:

param ($loc) 
start-process "\script2.ps1" -ArgumentList $loc 
start-process "\script2.ps1" -$loc 
start-process "\script2.ps1" 

然后就是脚本2

args[0] 
$loc 

我知道,我可能只是不理解传递参数。事情是另一个选项称为蝙蝠脚本。那一个我使用-ArgumentList $ loc,它通过罚款。我在蝙蝠脚本中使用“Set loc =%1”选择该参数

+0

我忘了添加,我用启动进程运行它,因为我想在一个单独的窗口中运行它。有没有更好的方法,它传递变量,在与已经运行的窗口分开的窗口中启动脚本。 – user3377627 2014-11-08 05:44:36

+1

可能重复的[从另一个PowerShell脚本加载变量](http://stackoverflow.com/questions/1864128/load-variables-from-another-powershell-script) – 2016-02-04 20:12:32

在Variables.ps1中声明的变量位于“Script Scope”中。那就是你不能在声明它们的脚本范围之外看到它们。将Variables.ps1中的变量引入main.ps1范围的一种方法是“点源”Variables.ps1。实际上,这在main.ps1的作用域中运行Variables.ps1。要做到这一点,只要坚持一段时间和空间的脚本调用之前:

. .\Variables.ps1 
$var1 
$var2 
+0

你应该参考原始答案http://stackoverflow.com /一个/52277分之1864262 – 2016-02-04 20:10:38

param ($loc) 

.ps1脚本定义脚本参数的顶部,所以称其为

 
    PathToMyScript\MyScript.ps1 -loc ValueOfLoc 

所有attributes you can apply,包括在一个脚本函数工作param语句中使用[CmdletBinding()]为好。

您不需要Start-Process从另一个PowerShell脚本运行一个PowerShell脚本。只需拨打你想要的任何参数,第二脚本:

# script1.ps1 

$loc = Read-Host 'Enter location' 

C:\path\to\script2.ps1 $loc 'other parameter' 

中,第二脚本参数列表例如可以通过$args阵列访问:

# script2.ps1 

Write-Host $args[0] 
Write-Host $args[1] 

你也可以定义一个名为参数,这样:

# script2.ps1 

Param($Location, $Foo) 

Write-Host $Location 
Write-Host $Foo 

或(更完整的)是这样的:

# script2.ps1 

[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$true)] 
    [string]$Location, 
    [Parameter(Mandatory=$false)] 
    [string]$Foo 
) 

Write-Host $Location 
Write-Host $Foo 

定义命名参数允许你传递参数,而不必担心他们的订单:

C:\path\to\script2.ps1 -Foo 'other parameter' -Location $loc 

或自动带参数validated而不必实现在函数体中检查:

# script2.ps1 

Param(
    [ValidateSet('a', 'b', 'c')] 
    [string]$Location, 
    [ValidatePattern('^[a-z]+$')] 
    [string]$Foo 
) 

Write-Host $Location 
Write-Host $Foo 

如果传递的参数数多于命名参数,则将这些附加参数存储在$args数组中:

PS C:\>cat test.ps1 
Param($Foo) 

Write-Host $Foo 
Write-Host $args[0] 
PS C:\>.\test.ps1 'foo' 'bar' 
foo 
bar

欲了解更多信息,请参阅Get-Help about_Functions_Advanced_Parameters