将参数传递给多个PowerShell脚本

时间:2016-12-22 19:27:51

标签: powershell parameter-passing

我的最终目标是使用PowerShell从Active Directory配置Office 365中的电子邮件。第一个脚本调用第二个,第二个调用第三个和第四个,第四个调用第五个和第四个脚本。最后的剧本。我需要将参数传递给第一个脚本,参数需要在最终脚本中完成(完成所有工作)但我遇到的问题是将它们传递给所有脚本以最终到达最终脚本。

每个脚本在脚本开头包含以下内容以接收参数:

param(
    [string]$empl_status, 
    [string]$emplid, 
    [string]$union_cd, 
    [string]$location, 
    [string]$job_function, 
    [string]$dn, 
    [string]$cn
)

要将参数传递给下一个脚本,每个脚本对下一个脚本的调用如下所示:

. "c:\rsa\connectexch.ps1" -empl_status="$empl_status" -emplid="$emplid" -union_cd="$union_cd" -location="$location" -job_function="$job_function" -dn="$dn" -cn="$cn"

我一直在搜索互联网但是没有找到任何可以通过5个脚本传递参数的文档。我显然做错了,因为最终脚本刚刚结束,因为它没有要处理的参数。我猜这是一个我不知道名字的过程,因为我对PowerShell还不熟悉。

这是我发现的一篇文章,它将我送到了上面的方向 - How to pass a variable (array of strings) to other PowerShell scripts。我还与另外两位重要的PowerShell用户进行了交谈,他们已经确认这是如何将参数传递给多个脚本的。

希望这对某人有意义,我可以得到一些帮助。我不知道还有什么地方可以寻求帮助......

1 个答案:

答案 0 :(得分:0)

我用来测试我的解决方案的脚本

param(
[Parameter(Mandatory=$true)]
$p1,

[Parameter(Mandatory=$true)]
$p2,

$stop
)


Write-Verbose "P1: $p1" -Verbose
Write-Verbose "P1: $p2" -Verbose

if(!$stop)
{
. .\connectexch.ps1 @PSBoundParameters -stop $true
}

所以解决方案是:

. "c:\rsa\connectexch.ps1" @PSBoundParameters

这称为喷溅。 PSBoundParameters是提供给函数的所有参数的内置哈希表(调用ps1就像处理函数一样。)