PSCmdlet 动态自动完成参数(如 Get-Process)

2024-01-04

在 powershell 中,某些参数具有动态自动完成行为。 例如,获取-处理参数名称。我可以使用 TAB 遍历所有流程。

我想在我的 PSCmdlet 中使用此行为。

但问题是,我只知道如何使用静态自动完成值来做到这一点。参见示例:

public class TableDynamicParameters
{
    [Parameter]
    [ValidateSet("Table1", "Table2")]
    public string[] Tables { get; set; }
}

这是如何使用本机 powershell 完成此操作的示例http://blogs.technet.com/b/heyscriptingguy/archive/2014/03/21/use-dynamic-parameters-to-populate-list-of-printer-names.aspx http://blogs.technet.com/b/heyscriptingguy/archive/2014/03/21/use-dynamic-parameters-to-populate-list-of-printer-names.aspx


It works谢谢@bouvirr

public string[] Tables { get; set; }

public object GetDynamicParameters()
{
    if (!File.Exists(Path)) return null;

    var tableNames = new List<string>();
    if (TablesCache.ContainsKey(Path))
    {
        tableNames = TablesCache[Path];
    }
    else
    {
        try
        {
            tableNames = DbContext.GetTableNamesContent(Path);
            tableNames.Add("All");
            TablesCache.Add(Path, tableNames);
        }
        catch (Exception e){}
    }

    var runtimeDefinedParameterDictionary = new RuntimeDefinedParameterDictionary();
    runtimeDefinedParameterDictionary.Add("Tables", new RuntimeDefinedParameter("Tables", typeof(String), new Collection<Attribute>() { new ParameterAttribute(), new ValidateSetAttribute(tableNames.ToArray()) }));

    return runtimeDefinedParameterDictionary;
}

来自 MSDN:如何声明动态参数 https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/how-to-declare-dynamic-parameters

Your Cmdlet类必须实现IDynamicParameters界面。这个界面:

为 cmdlet 提供一种机制来检索可由 Windows PowerShell 运行时动态添加的参数。

EDIT:

The IDynamicParameters.GetDynamicParameters()方法应该:

返回一个对象,该对象具有与参数相关的属性和字段,这些属性与 cmdlet 类或 RuntimeDefinedParameterDictionary 对象中定义的属性类似。

如果你看这个link https://martin77s.wordpress.com/2014/06/09/dynamic-validateset-in-a-dynamic-parameter/,作者是在 PowerShell 中这样做的。他在运行时创建:

  • 的一个新实例ValidateSetAttribute with a runtime可能值的数组
  • 然后他创建了一个RuntimeDefinedParameter他将其分配给ValidateSetAttribute
  • 他返回一个RuntimeDefinedParameterDictionary包含该参数的

您可以在 C# 中执行相同的操作。你的GetDynamicParameters()方法应该返回这个RuntimeDefinedParameterDictionary含有适当的RuntimeDefinedParameter.

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

PSCmdlet 动态自动完成参数(如 Get-Process) 的相关文章

随机推荐

  • 实现带有复选框的对话框

    这是我的对话框 public class CustomDialogClass extends Dialog implements android view View OnClickListener public Activity c pub
  • 如何更改wordpress中仅一页的css?

    我只需要更改主页的 css 我在 google 上搜索过 很多建议是将页面 id 添加为 css 选择器的一部分 但当我尝试的时候 似乎不起作用 我想更改类 contentclass 页面 ID 为 599 所以这是我尝试过的 post i
  • 在 Visual Studio Code for Go 中自动完成括号

    在使用 Visual Studio Code 时 我注意到当我从自动完成功能编写函数时 它永远不会使用括号自动完成 例如 fmt now select a function Print a interface from autocomple
  • 如何使用 Flask 跟踪匿名用户

    我的应用程序实现了一个购物车 匿名用户可以在其中添加产品 仅在付款前才需要用户登录 如何实施 主要的挑战是 Flask 必须跟踪用户 即使是匿名的 及其订单 我目前的方法是利用AnonymousUserMixin被分配给的对象current
  • 将绘图嵌入到 PyQt5 中的图形视图中

    I use pyqtgraph在 PyQt5 GUI 中绘图 我可以在弹出窗口中绘图 但我正在尝试将图表嵌入到graphicsView area 以下是我在新窗口中绘制简单绘图的方法 self pushButton clicked conn
  • Base64 字符串转 UIImage

    我正在尝试将 base64 字符串解码为 Swift 中的 UIImage 我的示例图像的编码字符串开头为 数据 图像 jpeg base64 9j 2wBDAAYEBQYFBAYGBQYHBwYIChAKC 完整的编码字符串可以在以下位置
  • 我可以使用传递到组件的变量来设置 svelte 样式 css 属性值吗

    我想创建一个接收图像名称和路径的简洁组件 我想让组件使用 CSS 将图像设置为 背景图像 我已经尝试过以下似乎不起作用 调用的组件应用程序 svelte
  • 为什么故事板没有反映我使用属性检查器面板设置到 UILabel 的文本属性?

    我在故事板上有一个 UILabel 默认文本为 标签 然后 我转到属性检查器并选择属性文本样式 当我单击 文本 字段时 我会在新窗口中看到多种字体可供选择 我看到本例中的默认文本已设置为 Helvetica 大小 17 0 在浏览所提供的字
  • 字符串未更新

    我正在使用 MVC 和 PDO 我试图根据会话是否为空来更新字符串 因此在我的 index phtml 中我有 p Welcome back a href logout php a p p Hello would you like to a
  • Matlab:更改图例中条目的顺序

    我有一个图形文件 我想在其中更改条目的顺序 例如 将第一个条目作为第三个条目 我很久以前就保存了这个Figure fig 所以我不确定是否可以恢复原始代码 这里我向你展示我的情节 我希望图例元素按降序排列 如图所示 但由于错误 我的第二个条
  • Linux:proc/net/sockstat tcp mem越来越大

    现在 我们的系统发现hang和tcp mem越来越大 proc net sockstat 当出现hang时 将打印 tcp 孤立套接字太多 From sockstat 我们知道socket很少 但是消耗了1500 page mem 为什么呢
  • BASH shell 脚本 echo 在同一行输出

    我有一个简单的 BASH shell 脚本 用于检查 curl 命令的 HTTP 响应代码 逻辑很好 但我坚持 简单地 打印出 输出 我使用的是 GNU bash 版本 3 2 25 1 release x86 64 redhat linu
  • 修剪章鱼 - 删除不属于 O(N) 循环的有向图的所有分支

    Preliminaries safe to skip This question is in relation with Longest Path for Directed Cyclic Graph https stackoverflow
  • 修复了开发办公套件时 Visual Basic 中 FontSize 函数的错误

    在花了几个小时研究 FontSize 函数后 我被一段代码困住了 字体列表 每当我想定义每个字体具有相同的大小时 它会自动将其缩放到72 我浏览了互联网以了解如何获取字体列表 这很有效 但是当我将 fontSize 添加到 sizecomb
  • SunPkcs11 实现的 64 位替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们使用中间件来构建通过 JDK 1 6 30 64 位安装程序安装的软件应用程序 我们最近收到使用 U
  • 使用 Matplotlib 以非阻塞方式绘图

    我在尝试使 matplotlib 绘制函数而不阻止执行时遇到问题 我尝试过使用show block False 正如有些人建议的那样 但我得到的只是一个冻结的窗口 如果我只是打电话show 结果被正确绘制 但执行被阻止 直到窗口关闭 从我读
  • 并非 CSS 样式类的所有属性都适用

    我将以下内容写在 CSS 文件中 span hoverhelp border double border width 3 border color 000000 background color eeffcc padding 5 font
  • 从 Servlet 到 JSP

    当尝试在我的 servlet 中传递用 HTML 构建的表时 如下所示 response setContentType text html PrintWriter out response getWriter out println out
  • 将 Write-Host 语句重定向到文件

    我有一个正在调试的 PowerShell 脚本 并且想要重定向所有脚本写主机 https learn microsoft com en gb powershell module Microsoft PowerShell Utility Wr
  • PSCmdlet 动态自动完成参数(如 Get-Process)

    在 powershell 中 某些参数具有动态自动完成行为 例如 获取 处理参数名称 我可以使用 TAB 遍历所有流程 我想在我的 PSCmdlet 中使用此行为 但问题是 我只知道如何使用静态自动完成值来做到这一点 参见示例 public