gpt4 book ai didi

powershell - 位置参数之前的动态开关可能无法按预期工作

转载 作者:行者123 更新时间:2023-12-03 16:50:18 26 4
gpt4 key购买 nike

这是演示问题的代码。 cmdlet Set-Location拥有
动态开关ReadOnly如果提供者是 FileSystem .

# provider that does not have the dynamic -ReadOnly
Set-Location env:

# case 1: works because we explicitly specify FileSystem
Get-ChildItem C:\ -ReadOnly

# case 2: fails even though we explicitly specify FileSystem
Get-ChildItem -ReadOnly C:\

通常,开关参数在命令中的位置无关紧要。这不
动态开关的情况。案例 2 失败并出现以下错误:
Get-ChildItem : A parameter cannot be found that matches parameter name 'ReadOnly'.

发生什么了?我认为在创建动态参数的那一刻
还不知道 ReadOnly是开关。因此,PowerShell 将其视为
常规参数及其参数 C:\C:\因此不被视为
一个位置参数。结果, Get-ChildItem认为位置
未指定并使用当前 env: .提供者 Environment
不提供动态开关 ReadOnly ,因此最终命令失败
由于语法不正确,即使它有些正确(相同的命令
如果当前提供者是 FileSystem 则有效)。

问题:
  • 我对问题的理解正确吗?
  • 此功能是否记录在某处?
  • 有什么解决方法吗?

  • 最后一个问题更多的是关于使用动态参数开发的用户命令。
    该问题最初被注意到并描述为 Invoke-Build Issue #4 .
    目前这个问题只是记录在案。但我仍然对解决方法感兴趣。

    结论
  • 存在所描述的问题。
  • 它没有这样记录。
  • 解决方法,每种都解决了问题:
  • 在位置参数参数后指定动态开关
  • 明确指定动态开关参数:-ReadOnly:$true
  • 不要将位置参数与动态开关一起使用,即指定参数名称。

  • 打开的错误: 960194

    最佳答案

    你的理解完全正确。

    参数绑定(bind)器没有很好地记录,因为它非常复杂。语言规范 ( http://www.microsoft.com/en-us/download/details.aspx?id=36389 ) 可能是我们拥有的最好的文档,但它不完整,我不认为涵盖这种情况。

    我能想到的唯一解决方法是指定 switch 参数的参数,例如

    Get-ChildItem -ReadOnly:$true C:\

    随意打开一个错误。它可能不会得到修复,但它至少让团队有机会讨论它。

    我想修复将类似于“如果参数绑定(bind)失败并且存在动态参数,请返回并假设未知参数是开关参数并重试”。这可以一次完成一个未知参数,或者一次完成,无论哪种方式,如果有许多未知参数,参数绑定(bind)可能会非常慢。

    关于powershell - 位置参数之前的动态开关可能无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25560038/

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