gpt4 book ai didi

powershell - 使用 PowerShell 调用 (&) 运算符调用带开关参数的 PowerShell 脚本

转载 作者:行者123 更新时间:2023-12-04 02:16:04 27 4
gpt4 key购买 nike

假设我们有以下SwitchTest.ps脚本

param(
[switch]$Flag = $false
)

echo "Flag: $Flag"

以下按预期工作:

& ".\SwitchTest.ps1" -Flag
Flag: True

然而这不是

& ".\SwitchTest.ps1" "-Flag"
Flag: False

此外,如果我们将 SwitchTest.ps 修改为如下所示:

param(
[switch]$Flag = $false,
[string]$Str = $null
)

echo "Flag: $Flag"
echo "Str: $Str"

我们得到了预期的行为:

& ".\SwitchTest.ps1" -Flag
Flag: True
Str:

还有这个意想不到的:

& ".\SwitchTest.ps1" "-Flag"
Flag: False
Str: -Flag

我试过-Flag true-Flag $true-Flag:$true...没有雪茄。看起来 switch 参数在引用时被“跳过”(即当它是一个正确的字符串时) - 为什么?如果我想以编程方式构建 "-Flag",我该怎么办?

最佳答案

你问了一个很好的问题,并且已经建立了一个很好的测试用例。让 flag 不带参数,因此它默认为 $Null。当您单独指定 -Flag 时,PowerShell 使用 switch 参数。但是,PowerShell 将 "-Flag" 解释为字符串,因此会尝试查找与字符串变量匹配的参数并传递该字符串(包括 -,因为它是 double 的quotes) 匹配 [String] 类型的参数。最后,由于您向字符串变量发送了一个字符串 "-Flag",因此 Flag 变量保留为其默认值,即 $Null$False。好问题。

这是您可以用来测试的代码。

#Put this in a script file, e.g. ParamTest.ps1
Flag: False
Str: -Flag

param(
[switch]$Flag,
[string]$Str = $null
)

Write-Output "Flag: $Flag"
Write-Output "Str: $Str"

像上面那样执行:

 & ".\SwitchTest.ps1" "-Flag"

但现在您已经了解了 PowerShell 如何分配传入的参数,请尝试以下操作来触发 Flag 参数,就像您最初打算做的那样:

& .\ParamScript.ps1 "-Flag" -Flag

关于powershell - 使用 PowerShell 调用 (&) 运算符调用带开关参数的 PowerShell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36164888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com