Powershell将switch参数传递给self

时间:2012-10-23 06:57:15

标签: powershell

我有自己调用的powershell脚本(因为脚本的第1阶段是在GAC中加载程序集,所以我需要刷新AppDomain)。如何将switch参数传递给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.Automat ion.SwitchParameter

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

但请考虑删除powershell及其问题的调用。