我有自己调用的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
答案 0 :(得分:3)
根本不需要调用powershell.exe
。将其替换为运算符&
,即在同一会话中调用脚本并避免参数转换和相关问题。问题是可以解决的,但最好首先避免。就是这样做
& $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites
至于问题。在传入外部应用程序之前,$provisionsites
会转换为字符串(True
或False
,而不是$true
或$false
)。因此,结果实际参数看起来像-provisionsites:True
。然后在新的PowerShell会话中,它将这样的参数传递给脚本Deploy.ps1
。它失败,因为不期望字符串True
或False
,预期会有布尔值。
可能的解决方法是添加转义$
powershell $currentDirectory/Deploy.ps1 ... -provisionsites:`$$provisionsites
但请考虑删除powershell
及其问题的调用。