gpt4 book ai didi

powershell - 你能在 PowerShell 中使用位置参数吗?

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

PowerShell 是否支持位置参数的飞溅而不是命名参数?

最佳答案

PowerShell 的 争吵 (参见 Get-Help about_Splatting )提供了两种基本选择:

  • 通过哈希表 : 适用于 仅命名参数 (例如,-Path C:\Windows
  • 通过类似数组的值 : 适用于 仅位置参数 (例如,C:\Windows ) - 除了通过 @args 将所有 [未绑定(bind)] 参数传递给另一个命令的非高级函数(即,通过喷射包含所有未绑定(bind)参数的 automatic $args array variable),在这种情况下,也支持命名参数,因为 @args 中内置了魔法。只要。

  • 注意:当将参数传递给 PowerShell cmdlet/函数(带有声明的参数)时,这种二分法适用,而外部程序执行它们自己的参数解析,这可能会或可能不会解释按命名传递的参数集。 [1]
    也就是说, 您可以将任一形式与常规的单个参数传递 - 使用单个位置参数、单个命名参数、哈希表喷溅和数组喷溅的任意组合。
    在这两种情况下,源数据结构必须是:
  • 预先存储在变量中。
  • 引用 印记@ 而不是 $ .

  • 注意: future 的增强功能,详见 RFC , 可能会带来直接 splat 表达式的能力,而不需要中间变量,尽管从 PowerShell Core 7 开始尚不清楚何时实现。

    示例 :
    # Positional binding via *array*. 
    # Note that a function's / script block's parameters are by default positional.
    PS> $posArgs = 'one', 'two'; & { param($foo, $bar) "`$foo: $foo"; "`$bar: $bar" } @posArgs
    $foo: one
    $bar: two


    # Named binding via *hashtable*
    PS> $namedArgs=@{bar='two';foo='one'}; & { param($foo, $bar) "`$foo: $foo"; "`$bar: $bar" } @namedArgs
    $foo: one
    $bar: two

    # *Combining* hashtable splatting with a regular, positional argument
    PS> $namedArgs=@{bar='two'}; & { param($foo, $bar) "`$foo: $foo"; "`$bar: $bar" } @namedArgs one
    $foo: one
    $bar: two

    [1] 与 发生冲突外部程序 :
    通常,调用外部程序时不需要 splatting,因为:
  • 您可以按原样传递数组(使用通常的 $ 印记)
  • 唯一的异常(exception)是如果您想包含 %-- ,停止解析符号(见 Get-Help about_Parsing ,在参数数组中;您确实需要在该事件中使用 @ 印记。
  • 使用单个数组元素来满足外部程序的语法要求,包括其命名参数(如果有)
    (例如,$args = '/c', 'ver'; cmd $args 执行 cmd /c ver )。

  • 哈希表 splat 被翻译成命令行标记的方式可能会或可能不会被外部程序识别:
  • 具体来说,带有键 <paramName> 的哈希表条目和值(value)<value>被转换为格式为 -<paramName>:<value> 的单个参数- 很少有外部命令行实用程序能够识别的格式。

  • 关于powershell - 你能在 PowerShell 中使用位置参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219038/

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