gpt4 book ai didi

powershell - 在 powershell 中使用另一个 cmdlet 的参数定义?

转载 作者:行者123 更新时间:2023-12-05 00:51:29 25 4
gpt4 key购买 nike

在 bash 中,我有一堆向现有程序/函数添加参数的别名,例如:

alias grep='grep --color'

我知道这不是最好的比喻,但是在 Powershell 中是否有一种简单的方法可以做到这一点?好像 Set-Alias不允许您指定参数。

You can create an alias for a cmdlet, but you cannot create an alias for a command that consists of a cmdlet and its parameters.



他们建议创建一个新的 cmdlet 来这样做,但我更希望能够传递额外的参数,而不必在新的 cmdlet 中对所有允许的参数进行硬编码(就像 New-ProxyCommand 似乎要求你这样做)。这样,我不必知道代理/别名 cmdlet 参数何时更改并在我的代理 cmdlet 中更改它。

那么最好的解决方案是什么
  • 不静态复制别名/代理 cmdlet 的参数定义。让原始 cmdlet 进行验证或动态引用它。
  • 使用别名/不同命名的 cmdlet,因此您必须执行一些明确的操作才能获得不同的行为
  • 让别名/新 cmdlet 将值传递给别名/代理 cmdlet 中的现有参数

  • 我能想到的最接近的是下面的内容,尽管语法可能是错误的。似乎它不会在管道上发挥最好的作用,但这可能可以以某种方式解决。
    & $proxiedcommand $additionaldefaultparams $rawparamsfromread-host

    或者有什么方法可以将这些东西用于 proxy cmdlets动态实例化如下参数?
    function aliased-cmdlet
    {
    [CmdletBinding((Get-Command Original-Cmdlet)._cmdletBindingsettings_)]
    Param(
    (Get-Command Original-Cmdlet)._paramsettings_)
    )

    Original-Cmdlet -CustomDefault Value -Whatever Else
    }

    最佳答案

    如果您要覆盖的唯一更改是默认参数值,there's already a built-in facility for that .使用 $PSDefaultParameterValues自动变量:

    PS C:\> ('a a a' |Select-String 'a').Matches.Count
    1
    PS C:\> $PSDefaultParameterValues['Select-String:AllMatches']=$true
    PS C:\> ('a a a' |Select-String 'a').Matches.Count
    3

    如果要在某些情况下覆盖默认参数值,但不更改 cmdlet 的默认行为,请创建代理命令并为代理命令设置默认值:
    # Gather required info
    $OriginalCommand = Get-Command Select-String
    $NewCommandName = 'Select-AllMatches'
    $Metadata = [System.Management.Automation.CommandMetadata]::new($OriginalCommand)

    # Create proxy command
    $ProxyString = [System.Management.Automation.ProxyCommand]::Create($Metadata)
    New-Item -Path function:\ -Name $NewCommandName -Value $ProxyString

    # Set default parameter values for proxy command
    $PSDefaultParameterValues["$NewCommandName`:AllMatches"] = $true

    现在参数默认值仅覆盖 Select-AllMatches :
    PS C:\> ('a a a' |Select-String 'a').Matches.Count
    1
    PS C:\> ('a a a' |Select-AllMatches 'a').Matches.Count
    3

    关于powershell - 在 powershell 中使用另一个 cmdlet 的参数定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44182005/

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