自定义PowerShell Cmdlet的安装与注册

在PowerShell中编写自定义的Cmdlet是一种强大的扩展方式,可以让用户根据自己的需求定制命令行工具。一旦编写了自己的Cmdlet,下一步就是考虑如何安装和注册它。本文将详细解释这个过程。

创建PowerShell Snap-in

要注册自定义的Cmdlet,需要编写一个PowerShellSnap-in。这通常涉及到创建一个新的类,该类继承自CustomPSSnapInPSSnapIn。两者的主要区别在于,继承自PSSnapIn的Snap-in会自动注册程序集中的所有Cmdlet,而继承自CustomPSSnapIn的Snap-in则允许选择性地注册Cmdlet。如果只开发了一个Cmdlet,可以直接继承PSSnapIn。但如果程序集中有多个Cmdlet,并且不想一次性注册所有Cmdlet,那么应该选择继承CustomPSSnapIn

以下是一个示例代码,展示了如何创建一个继承自CustomPSSnapIn的类:

public class AmazonPSSnapIn : CustomPSSnapIn { // 实现必要的属性 }

实现必要的属性

当继承自CustomPSSnapIn时,需要实现以下四个属性:

  • Description: 在这里提供Snap-in的简短描述。
  • Name: 提供Snap-in的名称。
  • Vendor: 提供Snap-in的供应商信息。
  • Cmdlets: 在这里提供需要注册的Cmdlet集合。

这个属性期望返回一个泛型集合Collection安装程序。

CmdletConfigurationEntry允许定义Snap-in的配置。至少,需要提供以下三个数据:

  • Name: 这是一个非常重要的参数,在这里指定Cmdlet的名称。
  • ImplementingType: 这是CmdletConfigurationEntry对象中需要设置的最重要的属性。在这里定义了实现Cmdlet的.NET对象的类型。
  • HelpFileName: 将设置包含Cmdlet帮助信息的文件名。

以下代码展示了如何实现Cmdlets属性来注册程序集中的三个Cmdlet:

public override Collection<CmdletConfigurationEntry> Cmdlets { get { if (null == _cmdlets) { _cmdlets = new Collection<CmdletConfigurationEntry>(); _cmdlets.Add(new CmdletConfigurationEntry("Get-Book", typeof(GetBookCommand), "AmazonPS.dll-Help.xml")); _cmdlets.Add(new CmdletConfigurationEntry("Get-DVD", typeof(GetDVDCommand), "AmazonPS.dll-Help.xml")); _cmdlets.Add(new CmdletConfigurationEntry("Get-DigitalMusic", typeof(GetDigitalMusicCommand), "AmazonPS.dll-Help.xml")); } return _cmdlets; } }

如何注册

编译Cmdlet项目。在PowerShell命令窗口中执行以下操作(按照文档中的步骤):

PS> set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil PS> installutil MyCustomCmdlets.dll

验证注册

一旦成功执行了上述步骤,可以通过执行以下命令来验证Snap-in是否已注册:

get-PSsnapin -registered

添加Snap-in以使用它

现在Snap-in已经注册,可以通过执行以下命令将其添加到PowerShell中:

add-pssnapin MyCustomSnapIn

保存配置

一旦关闭PowerShell命令窗口,添加过程将会丢失。但是,Snap-in注册不会丢失。这意味着下次启动PowerShell命令窗口时,需要再次执行add-pssnapin命令来使用Cmdlet。为了解决这个问题,可以在添加Snap-in后将shell配置导出到文件中。在后续的会话中,可以使用该配置,这样自定义Cmdlet就已经添加到shell中了。

export-console MyCustomCmdletPowerShell

注销和移除

如果需要升级自定义Cmdlet,可能想要从shell中移除它。可以执行以下命令来移除它:

remove-PSSnapin MyCustomSnapIn

确保使用的名称与添加它时使用的名称相匹配。否则,shell会抛出错误,告诉找不到这个Snap-in。如果想安装更新的副本,从shell中注销Snap-in是非常重要的。在PowerShell命令提示符下执行以下操作以注销:

PS> set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil PS> installutil /u MyCustomCmdlets.dll
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485