[玩转系统] 添加处理管道输入的参数
作者:精品下载站 日期:2024-12-14 02:49:29 浏览:14 分类:玩电脑
添加处理管道输入的参数
cmdlet 的输入源之一是管道上源自上游 cmdlet 的对象。本部分介绍如何向 Get-Proc cmdlet 添加参数(在创建第一个 Cmdlet 中进行了描述),以便 cmdlet 可以处理管道对象。
此 Get-Proc cmdlet 使用 Name
参数接受来自管道对象的输入,根据提供的名称从本地计算机检索进程信息,然后在命令行中显示有关进程的信息。
定义 Cmdlet 类
创建 cmdlet 的第一步始终是命名 cmdlet 并声明实现该 cmdlet 的 .NET 类。此 cmdlet 检索进程信息,因此此处选择的动词名称是“Get”。 (几乎任何类型的能够检索信息的 cmdlet 都可以处理命令行输入。)有关批准的 cmdlet 动词的详细信息,请参阅 Cmdlet 动词名称。
以下是此 Get-Proc cmdlet 的定义。创建您的第一个 Cmdlet 中给出了此定义的详细信息。
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
定义管道的输入
本部分介绍如何定义 cmdlet 管道的输入。此 Get-Proc cmdlet 定义一个表示 Name
参数的属性,如添加处理命令行输入的参数中所述。 (有关声明参数的一般信息,请参阅该主题。)
但是,当 cmdlet 需要处理管道输入时,它必须通过 Windows PowerShell 运行时将其参数绑定到输入值。为此,您必须添加 ValueFromPipeline
关键字或将 ValueFromPipelineByProperty
关键字添加到 System.Management.Automation.Parameterattribute 属性声明中。如果 cmdlet 访问完整的输入对象,请指定 ValueFromPipeline
关键字。如果 cmdlet 仅访问对象的属性,请指定 ValueFromPipelineByProperty
。
以下是接受管道输入的 Get-Proc cmdlet 的 Name
参数的参数声明。
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
前面的声明将 ValueFromPipeline
关键字设置为 true
,以便 Windows PowerShell 运行时将参数绑定到传入对象(如果该对象与参数类型相同,或者如果它可以被强制为相同的类型。 ValueFromPipelineByPropertyName
关键字也设置为 true
,以便 Windows PowerShell 运行时检查传入对象的 Name
属性。如果传入对象具有此类属性,则运行时会将 Name
参数绑定到传入对象的 Name
属性。
笔记
参数的 ValueFromPipeline
属性关键字的设置优先于 ValueFromPipelineByPropertyName
关键字的设置。
重写输入处理方法
如果您的 cmdlet 要处理管道输入,则需要重写适当的输入处理方法。创建您的第一个 Cmdlet 中介绍了基本的输入处理方法。
此 Get-Proc cmdlet 重写 System.Management.Automation.Cmdlet.ProcessRecord 方法来处理用户或脚本提供的 Name
参数输入。此方法将获取每个请求的进程名称的进程,如果未提供名称,则获取所有进程。请注意,在 System.Management.Automation.Cmdlet.ProcessRecord 中,对 WriteObject(System.Object,System.Boolean) 的调用是将输出对象发送到管道的输出机制。此调用的第二个参数 enumerateCollection
设置为 true
,以告诉 Windows PowerShell 运行时枚举进程对象数组,并一次将一个进程写入到命令行。
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all processes.
if (processNames == null)
{
// Write the processes to the pipeline making them available
// to the next cmdlet. The second argument of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
} // End foreach (string name...).
}
}
Protected Overrides Sub ProcessRecord()
Dim processes As Process()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
processes = Process.GetProcesses()
Else
'/ If process names are specified, write the processes to the
'/ pipeline to display them or make them available to the next cmdlet.
For Each name As String In processNames
'/ The second parameter of this call tells PowerShell to enumerate the
'/ array, and send one process at a time to the pipeline.
WriteObject(Process.GetProcessesByName(name), True)
Next
End If
End Sub 'ProcessRecord
代码示例
有关完整的 C# 示例代码,请参阅 GetProcessSample03 示例。
定义对象类型和格式
Windows PowerShell 使用 .Net 对象在 cmdlet 之间传递信息。因此,小命令可能需要定义其自己的类型,或者小命令可能需要扩展另一个小命令提供的现有类型。有关定义新类型或扩展现有类型的更多信息,请参阅扩展对象类型和格式。
构建 Cmdlet
实施 cmdlet 后,必须通过 Windows PowerShell 管理单元将其注册到 Windows PowerShell。有关注册 cmdlet 的详细信息,请参阅如何注册 Cmdlet、提供程序和主机应用程序。
测试 Cmdlet
当您的 cmdlet 已注册到 Windows PowerShell 后,请通过在命令行上运行它来测试它。例如,测试示例 cmdlet 的代码。有关从命令行使用 cmdlet 的详细信息,请参阅 Windows PowerShell 入门。
在 Windows PowerShell 提示符下,输入以下命令以通过管道检索进程名称。
PS> type ProcessNames | get-proc
将出现以下输出。
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 809 21 40856 4448 147 9.50 2288 iexplore 737 21 26036 16348 144 22.03 3860 iexplore 39 2 1024 388 30 0.08 3396 notepad 3927 62 71836 26984 467 195.19 1848 OUTLOOK
输入以下行以从名为“IEXPLORE”的进程中获取具有
Name
属性的进程对象。此示例使用Get-Process
cmdlet(由 Windows PowerShell 提供)作为上游命令来检索“IEXPLORE”进程。PS> get-process iexplore | get-proc
将出现以下输出。
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore
参见
添加处理命令行输入的参数
创建您的第一个 Cmdlet
扩展对象类型和格式
如何注册 Cmdlet、提供程序和主机应用程序
Windows PowerShell 参考
Cmdlet 示例
猜你还喜欢
- 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