当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Cmdlet 概述

作者:精品下载站 日期:2024-12-14 02:55:12 浏览:15 分类:玩电脑

Cmdlet 概述


cmdlet 是在 PowerShell 环境中使用的轻量级命令。 PowerShell 运行时在命令行提供的自动化脚本上下文中调用这些 cmdlet。 PowerShell 运行时还通过 PowerShell API 以编程方式调用它们。

cmdlet

Cmdlet 执行操作并通常将 Microsoft .NET 对象返回到管道中的下一个命令。 cmdlet 是参与 PowerShell 管道语义的单个命令。这包括二进制 (C#) cmdlet、高级脚本函数、CDXML 和工作流。

此 SDK 文档介绍了如何创建用 C# 编写的二进制 cmdlet。有关基于脚本的 cmdlet 的信息,请参阅:

  • about_功能_高级
  • about_Functions_CmdletBindingAttribute
  • about_Functions_Advanced_Methods

要创建二进制 cmdlet,您必须实现一个派生自两个专用 cmdlet 基类之一的 cmdlet 类。派生类必须:

  • 声明一个将派生类标识为 cmdlet 的属性。
  • 定义用将公共属性标识为 cmdlet 参数的特性修饰的公共属性。
  • 重写一种或多种输入处理方法来处理记录。

您可以使用 Import-Module cmdlet 直接加载包含该类的程序集,也可以使用 System.Management.Automation.Runspaces.Initialsessionstate API 创建加载该程序集的主机应用程序。这两种方法都提供对 cmdlet 功能的编程和命令行访问。

Cmdlet 术语

PowerShell cmdlet 文档中经常使用以下术语:

Cmdlet 属性

用于将 cmdlet 类声明为 cmdlet 的 .NET 属性。尽管 PowerShell 使用其他几个可选属性,但 Cmdlet 属性是必需的。有关此属性的详细信息,请参阅 Cmdlet 属性声明。

Cmdlet 参数

定义可供用户或运行 cmdlet 的应用程序使用的参数的公共属性。 Cmdlet 可以具有必需参数、命名参数、位置参数和开关 参数。开关参数允许您定义仅在调用中指定参数时才评估的参数。有关不同类型参数的详细信息,请参阅 Cmdlet 参数。

参数设定

可在同一命令中使用的一组参数来执行特定操作。一个 cmdlet 可以有多个参数集,但每个参数集必须至少有一个唯一的参数。良好的 cmdlet 设计强烈建议唯一参数也是必需参数。有关参数集的详细信息,请参阅 Cmdlet 参数集。

动态参数

在运行时添加到 cmdlet 的参数。通常,当另一个参数设置为特定值时,动态参数会添加到 cmdlet。有关动态参数的详细信息,请参阅 Cmdlet 动态参数。

输入处理方式

System.Management.Automation.Cmdlet 类提供以下用于处理记录的虚拟方法。所有派生 cmdlet 类必须重写前三个方法中的一个或多个:

  • System.Management.Automation.Cmdlet.BeginProcessing:用于为 cmdlet 提供可选的一次性预处理功能。
  • System.Management.Automation.Cmdlet.ProcessRecord:用于为 cmdlet 提供逐条记录的处理功能。 System.Management.Automation.Cmdlet.ProcessRecord 方法可能会被调用任意多次,也可能根本不会调用,具体取决于 cmdlet 的输入。
  • System.Management.Automation.Cmdlet.EndProcessing:用于为 cmdlet 提供可选的一次性后处理功能。
  • System.Management.Automation.Cmdlet.StopProcessing:用于在用户异步停止 cmdlet 时停止处理(例如,通过按 CTRL+C)。

有关这些方法的详细信息,请参阅 Cmdlet 输入处理方法。

实现 cmdlet 时,必须至少重写其中一种输入处理方法。通常,ProcessRecord() 是您要重写的方法,因为 cmdlet 处理的每条记录都会调用它。相反,BeginProcessing()方法和EndProcessing()方法被调用一次,以执行记录的预处理或后处理。有关这些方法的更多信息,请参阅输入处理方法。

应该处理特征

PowerShell 允许您创建 cmdlet,在 cmdlet 对系统进行更改之前提示用户提供反馈。要使用此功能,当您声明 Cmdlet 属性时,cmdlet 必须声明它支持 ShouldProcess 功能,并且 cmdlet 必须调用 System.Management.Automation.Cmdlet.ShouldProcess 和 System.Management.Automation输入处理方法中的 .Cmdlet.ShouldContinue 方法。有关如何支持 ShouldProcess 功能的更多信息,请参阅请求确认。

交易

被视为单个任务的逻辑命令组。如果组中的任何命令失败,任务将自动失败,并且用户可以选择接受或拒绝事务中执行的操作。要参与事务,cmdlet 必须在声明 Cmdlet 属性时声明它支持事务。 Windows PowerShell 2.0 中引入了对事务的支持。有关事务的更多信息,请参阅如何支持事务。

Cmdlet 与命令有何不同

Cmdlet 与其他命令 shell 环境中的命令有以下不同之处:

  • Cmdlet 是 .NET 类的实例;它们不是独立的可执行文件。
  • 只需十几行代码即可创建 Cmdlet。
  • Cmdlet 通常不会进行自己的解析、错误呈现或输出格式化。解析、错误呈现和输出格式由 PowerShell 运行时处理。
  • Cmdlet 处理来自管道而不是来自文本流的输入对象,并且 cmdlet 通常将对象作为输出传递到管道。
  • Cmdlet 是面向记录的,因为它们一次处理一个对象。

Cmdlet 基类

Windows PowerShell 支持从以下两个基类派生的 cmdlet。

  • 大多数 cmdlet 都基于派生自 System.Management.Automation.Cmdlet 基类的 .NET 类。从此类派生允许 cmdlet 使用 Windows PowerShell 运行时的最小依赖项集。这有两个好处。第一个好处是 cmdlet 对象更小,并且您不太可能受到 PowerShell 运行时更改的影响。第二个好处是,如果需要,您可以直接创建 cmdlet 对象的实例,然后直接调用它,而不是通过 PowerShell 运行时调用它。

  • 更复杂的 cmdlet 基于派生自 System.Management.Automation.PSCmdlet 基类的 .NET 类。从此类派生后,您可以更多地访问 PowerShell 运行时。此访问权限允许您的 cmdlet 调用脚本、访问提供程序以及访问当前会话状态。 (要访问当前会话状态,您需要获取并设置会话变量和首选项。)但是,从此类派生会增加 cmdlet 对象的大小,这意味着您的 cmdlet 与当前版本的 PowerShell 运行时耦合更紧密。

通常,除非您需要对 PowerShell 运行时的扩展访问权限,否则应从 System.Management.Automation.Cmdlet 类派生。但是,PowerShell 运行时具有用于执行 cmdlet 的广泛日志记录功能。如果您的审核模型依赖于此日志记录,则可以通过派生自 System.Management.Automation.PSCmdlet 类来阻止从另一个 cmdlet 中执行您的 cmdlet。

Cmdlet 属性

PowerShell 定义了多个 .NET 属性,这些属性用于管理 cmdlet 并指定 PowerShell 提供的以及 cmdlet 可能需要的常用功能。例如,属性用于将类指定为 cmdlet、指定 cmdlet 的参数以及请求输入验证,以便 cmdlet 开发人员不必在其 cmdlet 代码中实现该功能。有关属性的更多信息,请参阅 PowerShell 属性。

Cmdlet 名称

PowerShell 使用动词和名词名称对来命名 cmdlet。例如,PowerShell 中包含的 Get-Command cmdlet 用于获取在命令 shell 中注册的所有 cmdlet。动词标识 cmdlet 执行的操作,名词标识 cmdlet 执行其操作的资源。

这些名称是在 .NET 类声明为 cmdlet 时指定的。有关如何将 .NET 类声明为 cmdlet 的详细信息,请参阅 Cmdlet 属性声明。

编写 Cmdlet 代码

本文档提供了两种方法来了解 cmdlet 代码的编写方式。如果您希望查看没有太多解释的代码,请参阅 Cmdlet 代码示例。如果您希望了解有关代码的更多说明,请参阅 GetProc 教程、StopProc 教程或 SelectStr 教程主题。

有关编写 cmdlet 的指南的详细信息,请参阅 Cmdlet 开发指南。

参见

PowerShell Cmdlet 概念

编写 PowerShell Cmdlet

PowerShell SDK

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯