问题描述
说我有2个脚本。从主脚本调用main-script.ps1和base-script.ps1和base-script。
Clip
#base-script.ps1
Param(
[string]$Site,[string]$Env,[string]$Package,[bool]$New_Variable,[string]$New_Variable2
)
Write-Host "i am in base script"
Write-Host " i am in server " $env:COmpuTERNAME
Write-Host $Site
Write-Host $Env
Write-Host $Package
Write-Host $New_Variable
Write-Host $New_Variable2
现在,随着base-script.ps1中参数的增长,在参数列表中传递的参数变得冗长且难以管理。有一个更好的方法吗。我无法对此进行喷溅工作。
#main-script.ps1
Param(
[string]$SiteName,[string]$Environment,[string]$PackageName
)
Write-Host "I am in main-script"
$new_var = $true
$new_var2 = "Green"
$deployToBaseBlock = get-command '.\Base-script.ps1' | Select-Object -ExpandProperty ScriptBlock
Invoke-Command S1 -ScriptBlock $deployToBaseBlock -ArgumentList $SiteName,$Environment,$PackageName,$new_var,$new_var2
Write-Host "I am back in main. exiting"
但是对于我来说,脚本块是在外部定义的。
start-job -scriptblock { & 'c:\ps\bcpcopy.ps1' @args } -ArgumentList $ARGS
$ arr是参数数组。这似乎不起作用。请提出建议。
解决方法
无论如何,远程端点都将需要重新创建和重新编译脚本块,因此您最好将原始Base-Script.ps1
文件传递给它。
幸运的是,Invoke-Command
已经有一个用于此确切用例的参数:
Invoke-Command -FilePath '.\Base-script.ps1' -ComputerName S1 -ArgumentList $arr