【问题标题】:Getting Get-Help Parameters as C# objects将 Get-Help 参数作为 C# 对象获取
【发布时间】:2016-03-17 17:30:17
【问题描述】:

我在各种脚本上调用Get-Help ... -Full 以确定运行脚本所需的参数。然后会显示一个动态表单供用户填写。

我注意到Get-Help 并不总是返回相同的结构,即一些脚本返回

NAME
    ....

SYNOPSIS

SYNTAX
    ....

DESCRIPTION
    ...

PARAMETERS

而其他人则简单地返回

test2.ps1 [[-foo] <String>] [[-bar] <String>]

我开始从PSObject检索此信息:

PSObject p = (PSObject)results[0].Properties["Parameters"].Value;

foreach (var info in p.Properties)
{
    var b = (PSObject[])info.Value;
    foreach ( var c in b)
    {
        Console.WriteLine(c.Properties["name"].Value);
    }
}

但这会因第二种结果而失败。

有没有更常用的方法来检索我忽略的这些信息?

【问题讨论】:

标签: c# powershell


【解决方案1】:

我想你可能正在寻找来自Get-Command -Syntax的输出

您可以在 C# 中通过创建 CommandInfo 对象并访问 ParametersParameterSets 属性来检索此信息:

CommandInfo getHelpCommand = new CmdletInfo("Get-Help", typeof(Microsoft.PowerShell.Commands.GetHelpCommand));
var Params = getHelpCommand.Parameters;

foreach (string paramKey in Params.Keys)
{
    ParameterMetadata currentParam = Params[paramKey];
    Console.Write(currentParam.Name);
}

【讨论】:

  • +1 用于引导我使用 Get-Command -Syntax,这至少返回了可预测的结果。但是,我对 CmdletInfo 感到困惑。我似乎无法弄清楚如何实际使用它。
  • ParametersParameterSets 字典中的项目包含有关每个参数是否是必需的、期望的类型等信息。我的意思是您可以使用这些信息来确定语法是什么, 并生成你自己的Command-Name [[-Parameter] &lt;type&gt;]-style 字符串
猜你喜欢
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 2013-10-04
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多