我知道,这个问题已经被问过几次了,但是我似乎无法使其正常工作。基本上,我使用了多个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
但这会阻止我的任何基于点的函数都无法被调用的脚本访问,这是必需的。
任何帮助将不胜感激。
答案 0 :(得分:1)
对于第一个查询,您需要使用backtick(`)转义双引号:
Invoke-Expression "$Script_Companies -CompanyDateCull $CompanyDateCull -CompanyManagerCull `"Fred`""