4

我有这个调用自身的 powershell 脚本(因为脚本的第 1 阶段是在 GAC 中加载程序集,所以我需要刷新 AppDomain)。如何将开关参数传递给 self. 目前我正在这样做:

if ($provisionsites -eq $true)
{
    powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites
}
else
{
    powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env
}

这对我来说似乎太冗长了。如果我试试这个:

powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites

它失败了:

无法将值“System.String”转换为类型“System.Management.Automation.SwitchParameter”

4

1 回答 1

3

大概powershell.exe根本不需要调用。将其替换为 operator &,即在同一会话中调用脚本,避免参数转换和相关问题。这些问题是可以解决的,但最好首先避免。也就是说,做

& $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites

至于问题。在传入外部应用程序之前$provisionsites转换为字符串(Trueor False、 not $trueor )。$false因此,结果实际参数看起来像-provisionsites:True。然后在一个新的 powershell 会话中,它将这样一个参数传递给脚本Deploy.ps1。它失败是因为字符串TrueFalse不是预期的,需要一个布尔值。

一种可能的解决方法是添加转义$

powershell $currentDirectory/Deploy.ps1 ... -provisionsites:`$$provisionsites

但考虑删除呼叫powershell及其问题。

于 2012-10-23T10:09:48.523 回答