使用多个参数从PowerShell脚本调用PowerShell脚本

时间:2018-09-21 07:02:00

标签: powershell

我知道,这个问题已经被问过几次了,但是我似乎无法使其正常工作。基本上,我使用了多个ps1文件,因此我不必具有非常大的脚本,在这种情况下,它的两个文件(到目前为止):

Migration-Main.ps1

Migration-Companies.ps1

我想使用调用表达式从 Migration-Main.ps1 调用 Migration-Companies.ps1 ,但这似乎仅在目标中只有一个参数的情况下有效脚本,以我为例,有两个:

param (
    [parameter(mandatory=$false )]
    [datetime]$CompanyDateCull,  
    [parameter(mandatory=$false )]
    [string]$CompanyManagerCull
)

Write-Output $CompanyDateCull

因此,如果我尝试这样调用脚本:

Invoke-Expression "$Script_Companies -CompanyDateCull $CompanyDateCull -CompanyManagerCull "Fred""

我将得到以下结果:

Invoke-Expression : A positional parameter cannot be found that accepts argument 'Fred'.
At C:\Users\user\OneDrive\Scripts\Migrations\Imports\FastTrack-Migration-Main.ps1:282 char:1
+ Invoke-Expression "$Script_Companies -CompanyDateCull $CompanyDateCul ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand

但是如果我删除第二个参数

Invoke-Expression "$Script_Companies -CompanyDateCull $CompanyDateCull"

有效:

Saturday, 21 September 2013 12:00:00 AM

我也尝试使用其他命令来运行文件,例如仅调用PowerShell.exe:

PowerShell.exe -file $Script_Companies -CompanyDateCull $CompanyDateCull -CompanyManagerCull $CompanyManagerCull

但这会阻止我的任何基于点的函数都无法被调用的脚本访问,这是必需的。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于第一个查询,您需要使用backtick(`)转义双引号:

Invoke-Expression "$Script_Companies -CompanyDateCull $CompanyDateCull -CompanyManagerCull `"Fred`""