将参数传递到远程脚本块

问题描述

我有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