将Get-Help参数作为C#对象获取

时间:2015-12-11 17:57:17

标签: c# powershell

我在各种脚本上调用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);
    }
}

但是第二种结果失败了。

是否有更常见的方法来检索我忽略的信息?

1 个答案:

答案 0 :(得分:3)

我认为你可能正在寻找Get-Command -Syntax

的输出

test2 syntax

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

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);
}