PowerShell cmdlet 参数值选项卡完成

2023-11-26

如何在 PowerShell 3.0 中实现 PowerShell 函数或 cmdlet(例如 Get-Service 和 Get-Process)的参数选项卡补全?

我发现验证集适用于已知列表,但我想按需生成列表。

亚当·德里斯科尔暗示这是可能的对于 cmdlet,但不幸的是没有详细说明。

特雷弗·沙利文展示了一种技术对于函数,但据我了解,他的代码仅在定义函数时生成列表。


我为此困惑了一段时间,因为我也想做同样的事情。我整理了一些我非常满意的东西。

您可以从 DynamicParam 添加 ValidateSet 属性。下面是我从 xml 文件动态生成 ValidateSet 的示例。请参阅以下代码中的“ValidateSetAttribute”:

function Foo() {
    [CmdletBinding()]
    Param ()
    DynamicParam {
        #
        # The "modules" param
        #
        $modulesAttributeCollection = new-object -Type System.Collections.ObjectModel.Collection[System.Attribute]

        # [parameter(mandatory=...,
        #     ...
        # )]
        $modulesParameterAttribute = new-object System.Management.Automation.ParameterAttribute
        $modulesParameterAttribute.Mandatory = $true
        $modulesParameterAttribute.HelpMessage = "Enter one or more module names, separated by commas"
        $modulesAttributeCollection.Add($modulesParameterAttribute)    

        # [ValidateSet[(...)]
        $moduleNames = @()
        foreach($moduleXmlInfo in Select-Xml -Path "C:\Path\to\my\xmlFile.xml" -XPath "//enlistment[@name=""wp""]/module") {
            $moduleNames += $moduleXmlInfo.Node.Attributes["name"].Value
        }
        $modulesValidateSetAttribute = New-Object -type System.Management.Automation.ValidateSetAttribute($moduleNames)
        $modulesAttributeCollection.Add($modulesValidateSetAttribute)

        # Remaining boilerplate
        $modulesRuntimeDefinedParam = new-object -Type System.Management.Automation.RuntimeDefinedParameter("modules", [String[]], $modulesAttributeCollection)

        $paramDictionary = new-object -Type System.Management.Automation.RuntimeDefinedParameterDictionary
        $paramDictionary.Add("modules", $modulesRuntimeDefinedParam)
        return $paramDictionary
    }
    process {
        # Do stuff
    }
}

这样我就可以输入

Foo -modules M<press tab>

如果该模块位于 XML 文件中,它将用制表符补全“MarcusModule”。此外,我可以编辑 XML 文件,制表符完成行为将立即更改;您不必重新导入该函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerShell cmdlet 参数值选项卡完成 的相关文章

随机推荐

  • 如何在打乱的连续整数数组中查找重复元素?

    我最近在某处遇到一个问题 假设您有一个包含 1001 个整数的数组 整数按随机顺序排列 但您知道每个整数都在 1 到 1000 含 之间 此外 除了一个数字出现两次之外 每个数字在数组中只出现一次 假设您只能访问数组的每个元素一次 描述一种
  • JavaScript内部方法实现源码

    有没有办法查看 JavaScript 方法背后的代码 不是网站 html 或 js 文件中的 javascript 方法 而是 JavaScript 的内部方法 例如 我怎样才能看到JavaScript如何计算offsetTop一个元素的
  • MySQL DATETIME DIFF 查询

    我有一个 MySQL 查询 每 30 分钟通过 cron 运行一次以删除旧的属性列表 查询是 DELETE FROM wpdb gt posts WHERE post type rentals AND DATEDIFF NOW post d
  • 在 vuejs2 数据中动态插入子组件(无需 $compile 或滥用 v-html)

    我想在不一定是预定义的 HTML 块中的任意点动态插入新的 vuejs 组件 这是一个稍微做作的示例 演示了我正在尝试做的事情 Vue component child pretend I do something useful templa
  • 将字符串、整数和浮点数序列化为字符数组,以便在没有库的情况下进行网络连接

    我想通过网络传输数据 但我不想使用任何外部库 标准C C 就可以 例如 unsigned int x 123 char y 3 h i 0 float z 1 23f 我想要这个 char xyz 11 array 笔记 为了通过网络传输它
  • 编程 QGraphicsView 滚动未正确更新

    我有一个从 QGraphicsView 派生的自定义类 它实现了一个槽调用scrollHorizo ntal int dx 里面的代码很简单 void CustomView scrollHorizontal int dx scrollCon
  • Google Chart API 中的数字类型不匹配

    我有一个数组和第二列 其值如下2050 878456在我的 javascript 函数中创建面积图我做了以下内容 function drawVisualization var data null data new google visual
  • 如何将node.js日期转换为SQL Server兼容的日期时间?

    我有一个 Web Api 使用express and Tedious在 Azure SQL 数据库上存储一些数据 和nvarchar类型和int类型它运行良好 但是当我尝试保存时DateTime值我收到一条错误消息 Insert into
  • 如何使用 MPAndroidChart 库更改图表背景?

    我正在使用令人惊叹的图书馆MPAndroid图表 它的工作原理就像一个魅力 除非我试图更改 BarData 的背景颜色 默认颜色是白色 我想将其更改为透明 我试过这个 Paint p1 mChart getPaint Chart PAINT
  • 在 Node 应用程序之间共享代码

    我们的应用程序由两个组件组成 API 和客户端 两者都是独立的 Node 应用程序 虽然除了文档之外 API 实际上没有任何前端组件 但它们仍然共享一些通用文件 例如 Jade 组件 规范化 CSS 实用程序模块以及最重要的 Mongoos
  • 如何在 mac osx 中隐藏终端窗口?

    我有一个在 Windows Linux Android 和 Mac 上运行的多平台应用程序 它在所有平台上使用 g 编译 对于 Windows 我创建了一个安装程序 并通过添加链接器标志摆脱了终端窗口 Wl subsystem window
  • 获取团队列表时 Xcode 崩溃

    所以基本上 Xcode 6 1 每当尝试获取团队列表时都会崩溃 从主屏幕的常规选项卡中 当尝试将应用程序提交到 iTunes 时 尝试验证应用程序 每当它尝试获取团队列表时 它就会崩溃 一小时前它运行良好 但当我们在 iTunes 帐户中添
  • 未找到符号:_BIO_new_CMS

    我是 mac 新手 我不明白为什么我的 scrapy 似乎不再工作了 我怀疑 openssl 在我的 el Captain 中无效 I tried pip install cryptography pip install pyOpenSSL
  • 调用 URL - c#

    我正在尝试在 C 中调用 URL 我只对调用感兴趣 并不关心响应 当我出现以下内容时 是否意味着我正在调用该 URL HttpWebRequest request HttpWebRequest WebRequest Create url 您
  • 将百分比添加到数字中

    如何将百分比添加到总和中 我努力了var sum 3 25 3 4 但没有成功 我刚刚得到0 00作为答案 给一个数字加上一个百分比 的意思是 将该数字乘以 1 pct var sum 3 25 sum sum 1 0 034 您可以等效地
  • 适用于多种环境的 Google Cloud App Engine app.yaml

    我目前已经启动并运行了我的应用程序 app yaml and dispatch yaml位于应用程序的根目录中 我通过 Google Cloud CLI 进行部署 目前这很有效 尽管当我开始拥有一个dev staging and prod环
  • 如何在 Javascript 中捕获有关文本选择更改的 iOS Safari 事件?

    以下场景 在 iOS Safari 上选择文本 假设是 正常 html 页面 时 会出现蓝色叠加层 表明您已选择特定段落 此外 您可以更改该选择 以更正您的初始选择区域 我有兴趣在选择区域更改完成时准确捕获该事件 是否有可能 如果是的话 如
  • 类成员的自定义属性

    我使用自定义属性来定义类的成员如何映射到属性以作为表单帖子 支付网关 发布 我的自定义属性工作得很好 并且能够通过 名称 获取属性 但希望通过成员本身获取属性 例如 getFieldName name vs getFieldName obj
  • Servlet 过滤器和 Servlet 上下文侦听器有什么区别?

    使用 Servlet 过滤器与 Servlet 上下文侦听器有什么区别 你什么时候会使用其中之一 A Filter拦截与其 URL 模式匹配的 HTTP 请求并允许您修改它们 另请参阅其javadoc 过滤器是一个对象 它对资源 servl
  • PowerShell cmdlet 参数值选项卡完成

    如何在 PowerShell 3 0 中实现 PowerShell 函数或 cmdlet 例如 Get Service 和 Get Process 的参数选项卡补全 我发现验证集适用于已知列表 但我想按需生成列表 亚当 德里斯科尔暗示这是可