从“撸串.ps1”开始学习 [powershell 的参数补全] - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ps1aniuge
V2EX    PowerShell

从“撸串.ps1”开始学习 [powershell 的参数补全]

  •  
  •   ps1aniuge 2019-05-14 13:19:50 +08:00 3493 次点击
    这是一个创建于 2392 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ------ [第二章 从 [撸串.ps1 ] 开始学习编写 [ powershell 的参数补全] ] ------


    问:powershell 的参数补全分哪几种?
    答:
    分参数 [名] 补全,和参数 [值] 补全。
    比如:
    撸串.ps1 -吃几串 10
    -几串 是 [参数名]
    10 是参数值



    问:powershell 的 [参数名] 补全,是否需要写脚本?
    答:
    不需要。
    例子:
    -------a.ps1 开始-------
    param
    (
    $君不见黄河之水天上来_飞流直下 3333 千尺
    )
    echo $君不见黄河之水天上来_飞流直下 3333 千尺
    -------a.ps1 结束-------

    运行:
    ./a.ps1 -<打 tab>
    即可出现:
    ./a.ps1 -君不见黄河之水天上来_飞流直下 3333 千尺




    问:powershell 的 [参数值] 补全,是否需要写脚本?
    答:
    参数值是用户输入的,基本上是无法补全的,能补全的只有两种特例。
    1 补全所有枚举。比如参数名是 [-今天是周几] ,那么只有 7 种选择。
    2 补全部分常用的枚举。比如参数名是 [-吃几串] ,而输入值是一个数字,
    那么常用的输入值只有:1,10,12。剩下不常用的 2----21 亿。不需要补全,让用户自己输入。




    问:powershell 的 [参数值] 补全,如何补全 [所有枚举] ?
    答:
    -------星期.ps1 开始-------
    param
    (
    [ValidateSet('周 1','周 2','周 3','周 4','周 5','周 6','周日')]$今天是周几
    )
    echo $今天是周几
    -------星期.ps1 结束-------

    使用:
    星期.ps1 -<tab>或 shift<tab> 补全




    问:powershell 的 [参数值] 补全,如何补全 [部分常用的枚举] ?
    答:
    可以一次吃 1 串,10 串,12 串。也可以不用补全,手动输入 99999 串。

    -------撸串.ps1 开始-------
    param
    (
    [ArgumentCompleter({1,10,12})]$一次吃几串
    )
    echo $一次吃几串
    -------撸串.ps1 结束-------

    使用:
    撸串.ps1 -<tab>或 shift<tab> 补全




    问:如何给没有 [参数值补全] 的 ps 命令,添加补全?
    答:
    假设我们想要补全 [特定的邮箱账户列表] 。或 [计算机名列表] 。

    例子目的:给 ps 命令 [ Invoke-Command ] 的参数值 [ ComputerName ] 添加补全。
    Register-ArgumentCompleter -CommandName Invoke-Command -ParameterName ComputerName -ScriptBlock {
    Get-ADComputer -Filter * | Select-Object -ExpandProperty Name | ForEach-Object {
    $Text = $_
    if ($Text -match '\s') { $Text = $Text -replace '^|$','"' }

    [System.Management.Automation.CompletionResult]::new(
    $Text,
    $_,
    'ParameterValue',
    "$_"
    )
    }
    }



    问:为什么 win+powershell5.1,和 linux+powershell6.2 补全结果不同?
    答:
    linux 人更喜欢按 tab 出列表,这兼容了 bash 的习惯。这和 win 上的习惯并不同。
    设定方法如下:
    1 升级 psreadline 版本,确保最新。
    2 pwsh -c 'mkdir -p "$env:HOME/.config/powershell" '
    pwsh -c 'Add-Content -Value "Set-PSReadlineOption -EditMode Windows" -LiteralPath $profile '


    上一篇:
    Linux 命令的 tab 补全,powershell 的 tab 补全,对比大讨论!
    t/557876
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     839 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 22:32 PVG 06:32 LAX 14:32 JFK 17:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86