我有两个PowerShell脚本,它们有switch参数:
编译tool1.ps1:
[CmdletBinding()]
param(
[switch]$VHDL2008
)
Write-Host "VHDL-2008 is enabled: $VHDL2008"
compile.ps1:
[CmdletBinding()]
param(
[switch]$VHDL2008
)
if (-not $VHDL2008)
{ compile-tool1.ps1 }
else
{ compile-tool1.ps1 -VHDL2008 }
如何在不编写大的if..then..else
或case
语句的情况下将switch参数传递给另一个PowerShell脚本?
我不想将$VHDL2008
的参数compile-tool1.ps1
转换为bool
类型,因为这两个脚本都是前端脚本(由用户使用)。后者是多个compile-tool*.ps1
脚本的高级包装器。
您可以使用冒号语法在开关上指定$true
或$false
:
compile-tool1.ps1 -VHDL2008:$true
compile-tool1.ps1 -VHDL2008:$false
所以只需传递实际值:
compile-tool1.ps1 -VHDL2008:$VHDL2008
尝试
compile-tool1.ps1 -VHDL2008:$VHDL2008.IsPresent
另一种方法。如果使用默认值$ false声明参数:
[switch] $VHDL2008 = $false
然后,以下(没有值的-VHDL2008选项)将$ VHDL2008设置为$ true:
compile-tool1.ps1 -VHDL2008
如果您省略-VHDL2008选项,则强制$ VHDL2008使用默认的$ false值:
compile-tool1.ps1
这些示例在从bat脚本调用Powershell脚本时非常有用,因为从bat传递$ true / $ false bool到Powershell是很棘手的,因为bat会尝试将bool转换为字符串,从而导致错误:
Cannot process argument transformation on parameter 'VHDL2008'.
Cannot convert value "System.String" to type "System.Management.Automation.SwitchParameter".
Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.