gpt4 book ai didi

powershell - 为什么此代码将开关参数传递给 PowerShell 函数会失败

转载 作者:行者123 更新时间:2023-12-03 00:38:02 25 4
gpt4 key购买 nike

这个问题是关于传递开关参数的。让我们看看代码。我有这个 PowerShell 3.0 功能:

#test1.ps1
param(
[switch] $param1 = $false
)

Write-Host "param1: $($param1.IsPresent)"
Write-Host

我有这个主要的 PowerShell 函数,它以四种不同的方式调用 test.ps1:
#Test0.ps1
cls

$param1 = $True

# 1
.\test1.ps1 -param1

# 2
.\test1.ps1 -param1:$true

# 3
$potato = "-param1:`$$($param1)"
Write-Host "Parameter value: $potato"
.\test1.ps1 $potato

# 4
$command = ".\test1.ps1 -param1:`$$($param1)"
Write-Host "Command: $command"
iex $command

exit

为什么第三种方法会失败? 我知道我可以做第 4 种方法,但我很想了解为什么第 3 种方法会失败。

这是输出。结果所有参数都应为 True 但第三个是 False ...
param1: True

param1: True

Parameter value: -param1:$True
param1: False

Command: .\test1.ps1 -param1:$True
param1: True

最佳答案

会发生什么:

  • 解析器查看提供的参数:"-param1:$true"
  • 绑定(bind)参数失败param1 ,因为您提供的值是 string ,而不是开关/ bool
  • 位置 0 不需要特定的参数类型,参数被忽略

  • 如果您制作 param1位置,您可以看到 PowerShell 如何无法正确绑定(bind)它:
    function test-parambinding {param([Parameter(Position=0)][switch]$param1);$param1.IsPresent}
    test-parambinding "-param1:`$true"

    你会看到一个 ParameterArgumentTransformationException在其他任何事情发生之前抛出

    关于powershell - 为什么此代码将开关参数传递给 PowerShell 函数会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26972743/

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