用powershell Crescendo模块,把【linux字符命令】包装成【powershell对象命令】

这是翻译文章,原文 :  https://devblogs.microsoft.com/powershell/announcing-powershell-crescendo-preview-1/

 

问:powershell Crescendo模块有啥用?

答:

powershell对象命令很好。但是,linux本机命令实现不了。

linux命令具有自己独特的语法,有时包含许多子命令和参数/开关,并且通常类似于其自身的语言。可以选择利用PowerShell的技能来【包装老的字符界面命令】,或者更加精通已使用的本机命令,这不是很好吗?

作为PowerShell用户,如果这些本机命令支持PowerShell功能,例如:

  • 明确的命名约定– Verb-Noun
  • 相似用途的一致参数命名
  • 输出由对象组成
  • 获取命令帮助的常用方法
  • 易于处理管道中的对象
  • 易于使用模块共享

我们很高兴宣布PowerShell Crescendo的首次预览,PowerShell Crescendo是一个框架,可以快速地把【linux本机命令】封装成PowerShell cmdlet,输出属性,支持Sort-Object Where-Object过滤。 而与平台无关。win,linux通用。

太好啦!包装(封装)成powershell命令后,就再也不用扣字符串了!

 

当今许多现代的本机命令都很复杂,它们本身是微型外壳,具有包含子级别或子上下文的自己的微型语言如果你曾经使用过kubectldocker或者,你所经历的执行和自动化这些命令的复杂性。netsh.exe

为了使本机命令具有类似于PowerShell的感觉并提供类似的体验,您可以自己重新编写该工具,或者,如果该工具使用该工具REST,则可以使用AutoRest直接调用Web API 这些选项效果很好,但是需要更多的开发经验,并且随着时间的推移可能很难维护。

Crescendo提供了一些工具,可以轻松包装本机命令以获得PowerShell cmdlet的优势。将本机命令包装到Crescendo cmdlet中可以提供参数处理,例如提示输入强制性参数和制表符完成参数值。Crescendo cmdlet可以从本机应用程序获取文本输出,并将其解析为对象。输出对象允许您利用所有的后期处理工具等优势等等。Sort-Object Where-Object

支持什么

Microsoft.PowerShell.Crescendo 0.4.1 Preview.1当前可从PowerShell画廊下载。

支持使用Crescendo编写模块的PowerShell版本:

  • PowerShell 7.0以上

可以执行Crescendo模块的受支持的PowerShell版本:

  • Windows PowerShell 5.1以上
  • PowerShell 7.0以上

下一步是什么

Preview.2的Next / Future计划将基于反馈,并包括一些正在调查的项目:

  • 生成模块时创建cmdlet别名
  • 研究解析手册页和文档以改进自动JSON生成

安装

若要创建Crescendo cmdlet,您将需要PowerShell画廊中的模块Microsoft.PowerShell.Crescendo

Install-Module Microsoft.PowerShell.Crescendo

文献资料

我们已包含about_Crescendo,将来还会添加更多文档。确保检出模块中的Samples文件夹。

Get-Help about_Crescendo

要编写Crescendo模块,您将创建一个JSON配置文件,该文件描述了如何将本机命令投影为cmdlet。您需要Microsoft.PowerShell.Crescendo模块来构建包含Crescendo代理cmdlet的完成模块。Microsoft.PowerShell.Crescendo在PowerShell中7+模块运行。

要使用由Crescendo构建的模块,您不需要安装Microsoft.PowerShell.Crescendo只需下载或安装生成的模块,就可以了。由于Crescendo构建的模块与其他模块一样,因此Windows PowerShell 5.1及更高版本支持这些模块。您的工作可以帮助社区中的其他人自动化本机命令。幸运的是,发布到PowerShell画廊时,构建和共享Crescendo模块非常容易。

有关概念和设计方法的更多信息,请参见:

例子

把apt-list封装成powershell命令

这个例子建立在一个通用的Linux打包工具之上,apt用于显示,安装和删除软件。VerbNoun属性定义新cmdlet的名称Get-InstalledPackage

Crescendo模块包括一个架构定义文件,用于帮助创建和编辑JSON配置文件。模式文件包含在模块中。在下面的示例中,模式文件被复制到具有正在开发的JSON文件的临时工作目录中。模式文件的位置在JSON配置中定义,可以位于任何位置。Microsoft.PowerShell.Crescendo.Schema.json

模式定义的通用属性:

  • Verb:cmdlet动词的名称(检查有效的动词名称)Get-Verb
  • Noun:cmdlet名词的名称
  • OriginalName:原始本机命令名称和位置
  • OriginalCommandElements:一些本机命令具有其他强制性开关,可在给定情况下正确执行
  • OutputHandlers:输出处理程序捕获从本机命令输出的字符串,并将其转换为结构化数据(对象)。与其他PowerShell cmdlet一样,可以在管道中进一步处理此对象输出。

语法:示例代码包含// <--JSON中的注释()。它们仅用于描述目的,应删除。

{
    "$schema": "./Microsoft.PowerShell.Crescendo.Schema.json", // <-- Schema definition file
    "Verb": "Get", // <-- Cmdlet Verb
    "Noun":"InstalledPackage", // <-- Cmdlet Noun
    "OriginalName": "apt", // <-- Native command
    "OriginalCommandElements": ["-q","list","--installed"],
    "OutputHandlers": [ // <-- Add string output to an object
        {
            "ParameterSetName":"Default",
            "Handler": "$args[0]| select-object -skip 1 | %{$n,$v,$p,$s = "$_" -split ‘ ‘; [pscustomobject]@{ Name = $n -replace ‘/now‘; Version = $v; Architecture = $p; State = $s.Trim(‘[]‘) -split ‘,‘ } }"
        }
    ]
}

 

以下示例显示了如何使用我们在JSON文件中定义的。Get-InstalledPackage

PS> Get-InstalledPackage | Where-Object { $_.name -match "libc"}

Name        Version            Architecture State
----        -------            ------------ -----
libc-bin    2.31-0ubuntu9.1    amd64        {installed, local}
libc6       2.31-0ubuntu9.1    amd64        {installed, local}
libcap-ng0  0.7.9-2.1build1    amd64        {installed, local}
libcom-err2 1.45.5-2ubuntu1    amd64        {installed, local}
libcrypt1   1:4.4.10-10ubuntu4 amd64        {installed, local}

PS> Get-InstalledPackage |
上一篇:Mac必装--homebrew安装和使用记录


下一篇:linux基础2.1