在尝试使用powershell进行操作时,我发现了这种交互。当使用具有以下代码的脚本时:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
然后使用以下命令调用它:
param(
[switch]$testSwitch = $false,
[String[]]$names = "ABC","DEF")
echo "names: $names"
echo "test: $testSwitch"
对我来说,期望的回报是名称不变,并且testSwitch返回True-因为这是独立于输入实际值的开关的默认值(至少是我的理解)。 实际的回报是:
.\testScript.ps1 -testSwitch true
testSwitch的值对我来说并不奇怪,但是名称的值被testSwitch中输入的值覆盖。我正在努力理解为什么要这么做。 所以我的问题是,为什么在拥有命名参数的同时,某个参数的值输入会覆盖一个完全不同的参数?
这似乎只发生在switch上,同一示例使用int32而不是switch,并输入1且默认参数为0,将返回预期结果。
答案 0 :(得分:2)
由于-testSwitch
是一个切换参数,如果指定它后没有任何值,则将其设置为true。
因为您使用了字符串true
作为尝试为其设置的值,而不是$true
,而是将字符串'true'放入了其他参数。
此外,要向开关参数发送特定值,请在:
之后指定它。这将达到您的期望:
.\testScript.ps1 -testSwitch:$true
请注意,这仅对于开关参数值是必需的(但是,如前所述,通常不必指定值,因为仅使用它就可以使它成为真)。