[玩转系统] 将参数集添加到 Cmdlet
作者:精品下载站 日期:2024-12-14 02:48:56 浏览:12 分类:玩电脑
将参数集添加到 Cmdlet
关于参数集需要了解的事情
Windows PowerShell 将参数集定义为一组一起运行的参数。通过对 cmdlet 的参数进行分组,您可以创建一个 cmdlet,该 cmdlet 可以根据用户指定的参数组来更改其功能。
使用两个参数集定义不同功能的 cmdlet 示例是 Windows PowerShell 提供的 Get-EventLog
cmdlet。当用户指定 List
或 LogName
参数时,此 cmdlet 返回不同的信息。如果指定了 LogName
参数,cmdlet 将返回有关给定事件日志中的事件的信息。如果指定了 List
参数,cmdlet 将返回有关日志文件本身的信息(而不是它们包含的事件信息)。在本例中,List
和 LogName
参数标识两个单独的参数集。
关于参数集,需要记住的两件重要事情是,Windows PowerShell 运行时仅对特定输入使用一个参数集,并且每个参数集必须至少有一个对该参数集唯一的参数。
为了说明最后一点,此 Stop-Proc cmdlet 使用三个参数集:ProcessName
、ProcessId
和 InputObject
。这些参数集中的每一组都有一个不在其他参数集中的参数。参数集可以共享其他参数,但 cmdlet 使用唯一参数 ProcessName
、ProcessId
和 InputObject
来标识哪个参数集是应使用 Windows PowerShell 运行时。
声明 Cmdlet 类
创建 cmdlet 的第一步始终是命名 cmdlet 并声明实现该 cmdlet 的 .NET 类。对于此 cmdlet,使用生命周期动词“Stop”,因为该 cmdlet 会停止系统进程。使用名词名称“Proc”是因为 cmdlet 在进程上运行。在下面的声明中,请注意 cmdlet 动词和名词名称反映在 cmdlet 类的名称中。
笔记
有关批准的 cmdlet 动词名称的详细信息,请参阅 Cmdlet 动词名称。
以下代码是此 Stop-Proc cmdlet 的类定义。
[Cmdlet(VerbsLifecycle.Stop, "Proc",
DefaultParameterSetName = "ProcessId",
SupportsShouldProcess = true)]
public class StopProcCommand : PSCmdlet
<Cmdlet(VerbsLifecycle.Stop, "Proc", DefaultParameterSetName:="ProcessId", _
SupportsShouldProcess:=True)> _
Public Class StopProcCommand
Inherits PSCmdlet
声明 Cmdlet 的参数
此 cmdlet 定义了作为 cmdlet 输入所需的三个参数(这些参数还定义了参数集),以及一个用于管理 cmdlet 功能的 Force
参数和一个 PassThru
确定 cmdlet 是否通过管道发送输出对象的参数。默认情况下,此 cmdlet 不通过管道传递对象。有关最后两个参数的详细信息,请参阅创建修改系统的 Cmdlet。
声明名称参数
此输入参数允许用户指定要停止的进程的名称。请注意,System.Management.Automation.Parameterattribute 属性的 ParameterSetName
属性关键字指定为此参数设置的 ProcessName
参数。
[Parameter(
Position = 0,
ParameterSetName = "ProcessName",
Mandatory = true,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true,
HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
[Alias("ProcessName")]
public string[] Name
{
get { return processNames; }
set { processNames = value; }
}
private string[] processNames;
<Parameter(Position:=0, ParameterSetName:="ProcessName", _
Mandatory:=True, _
ValueFromPipeline:=True, ValueFromPipelineByPropertyName:=True, _
HelpMessage:="The name of one or more processes to stop. " & _
"Wildcards are permitted."), [Alias]("ProcessName")> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Private processNames() As String
另请注意,为此参数指定了别名“ProcessName”。
声明 Id 参数
该输入参数允许用户指定要停止的进程的标识符。请注意,System.Management.Automation.Parameterattribute 属性的 ParameterSetName
属性关键字指定 ProcessId
参数集。
[Parameter(
ParameterSetName = "ProcessId",
Mandatory = true,
ValueFromPipelineByPropertyName = true,
ValueFromPipeline = true
)]
[Alias("ProcessId")]
public int[] Id
{
get { return processIds; }
set { processIds = value; }
}
private int[] processIds;
<Parameter(ParameterSetName:="ProcessId", _
Mandatory:=True, _
ValueFromPipelineByPropertyName:=True, _
ValueFromPipeline:=True), [Alias]("ProcessId")> _
Public Property Id() As Integer()
Get
Return processIds
End Get
Set(ByVal value As Integer())
processIds = value
End Set
End Property
Private processIds() As Integer
另请注意,为此参数指定了别名“ProcessId”。
声明 InputObject 参数
此输入参数允许用户指定包含有关要停止的进程的信息的输入对象。请注意,System.Management.Automation.Parameterattribute 属性的 ParameterSetName
属性关键字指定此参数的 InputObject
参数集。
[Parameter(
ParameterSetName = "InputObject",
Mandatory = true,
ValueFromPipeline = true)]
public Process[] InputObject
{
get { return inputObject; }
set { inputObject = value; }
}
private Process[] inputObject;
<Parameter(ParameterSetName:="InputObject", _
Mandatory:=True, ValueFromPipeline:=True)> _
Public Property InputObject() As Process()
Get
Return myInputObject
End Get
Set(ByVal value As Process())
myInputObject = value
End Set
End Property
Private myInputObject() As Process
另请注意,此参数没有别名。
声明多个参数集中的参数
尽管每个参数集必须有一个唯一的参数,但参数可以属于多个参数集。在这些情况下,请为共享参数所属的每个集提供一个 System.Management.Automation.Parameterattribute 属性声明。如果某个参数在所有参数集中,则只需声明一次该参数属性,无需指定参数集名称。
重写输入处理方法
每个 cmdlet 都必须重写输入处理方法,最常见的是 System.Management.Automation.Cmdlet.ProcessRecord 方法。在此 cmdlet 中,重写了 System.Management.Automation.Cmdlet.ProcessRecord 方法,以便 cmdlet 可以处理任意数量的进程。它包含一个 Select 语句,该语句根据用户指定的参数集调用不同的方法。
protected override void ProcessRecord()
{
switch (ParameterSetName)
{
case "ProcessName":
ProcessByName();
break;
case "ProcessId":
ProcessById();
break;
case "InputObject":
foreach (Process process in inputObject)
{
SafeStopProcess(process);
}
break;
default:
throw new ArgumentException("Bad ParameterSet Name");
} // switch (ParameterSetName...
} // ProcessRecord
Protected Overrides Sub ProcessRecord()
Select Case ParameterSetName
Case "ProcessName"
ProcessByName()
Case "ProcessId"
ProcessById()
Case "InputObject"
Dim process As Process
For Each process In myInputObject
SafeStopProcess(process)
Next process
Case Else
Throw New ArgumentException("Bad ParameterSet Name")
End Select
End Sub 'ProcessRecord ' ProcessRecord
这里不描述 Select 语句调用的 Helper 方法,但您可以在下一节的完整代码示例中看到它们的实现。
代码示例
有关完整的 C# 示例代码,请参阅 StopProcessSample04 示例。
定义对象类型和格式
Windows PowerShell 使用 .NET 对象在 cmdlet 之间传递信息。因此,cmdlet 可能需要定义自己的类型,或者 cmdlet 可能需要扩展另一个 cmdlet 提供的现有类型。有关定义新类型或扩展现有类型的更多信息,请参阅扩展对象类型和格式。
构建 Cmdlet
实施 cmdlet 后,您必须通过 Windows PowerShell 管理单元将其注册到 Windows PowerShell。有关注册 cmdlet 的详细信息,请参阅如何注册 Cmdlet、提供程序和主机应用程序。
测试 Cmdlet
当您的 cmdlet 已注册到 Windows PowerShell 后,请通过在命令行上运行它来测试它。以下一些测试显示了如何使用 ProcessId
和 InputObject
参数来测试其参数集以停止进程。
启动 Windows PowerShell 后,运行 Stop-Proc cmdlet,并设置
ProcessId
参数以根据进程的标识符停止进程。在本例中,cmdlet 使用ProcessId
参数集来停止进程。PS> stop-proc -Id 444 Confirm Are you sure you want to perform this action? Performing operation "stop-proc" on Target "notepad (444)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y
启动 Windows PowerShell 后,运行 Stop-Proc cmdlet,并设置
InputObject
参数,以停止Get-Process
命令检索的记事本对象上的进程。PS> get-process notepad | stop-proc Confirm Are you sure you want to perform this action? Performing operation "stop-proc" on Target "notepad (444)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): N
参见
创建修改系统的 Cmdlet
如何创建 Windows PowerShell Cmdlet
扩展对象类型和格式
如何注册 Cmdlet、提供程序和主机应用程序
Windows PowerShell SDK
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag