[玩转系统] 使用 PowerShell 管道高效工作
作者:精品下载站 日期:2024-12-14 08:13:31 浏览:13 分类:玩电脑
使用 PowerShell 管道高效工作
您对管道有多熟悉?我们正在推出一个新的简短系列 -,从 PowerShell 管道基础知识主题开始。
简介 - 不要害怕管道!
对于许多管理员来说,PowerShell 中的管道功能似乎是一个他们经常绕过的未知领域,尽管它具有巨大的潜力。即使至少了解了基础知识,许多人也不愿意独立使用它,而是主要依赖于复制的代码。事实上,该应用程序在实践中并不像通常想象的那么复杂,并且在熟悉它后很短的时间后它几乎变得直观。
管道使多个 CMDlet 能够无缝链接,这意味着即使是复杂的任务也可以得到简化。本文回答了以下问题:
- 管道的基础知识和基本功能是什么?
- 如何使用管道单独过滤和排序数据和对象?
- 如何找出哪些 CMDlet 可以与管道组合?
- 如何使自己的函数做好管道准备?
PowerShell 管道的基础知识
管道使得链接两个或多个 CMDlet 成为可能。一个命令的结果将传递到下一个命令。垂直线(“|”)用于链接命令。有些人通过 Linux bash 熟悉这个过程。 PowerShell 与 bash 管道的不同之处在于,可以在 PowerShell 中传递完整的对象,而不仅仅是“哑”文本。
将 PowerShell 管道视为工厂中的装配线。每个 CMDlet 就像这条装配线上的一个工作站。您将产品(例如数据对象)放置在传送带的开头,然后它从一个站移动到另一个站。在每个站 (CMDlet),都会对该产品执行特殊操作或处理,然后再将其传递到下一站。当它到达装配线末端时,您就得到了经过所有必要处理步骤的成品。就像在工厂中一样,您可以根据需要按所需顺序添加任意数量的站 (CMDlet),以获得完美的结果。
以下代码示例说明了 PowerShell 管道的使用:
Get-Service -Name 'wuauserv' | Stop-Service
首先,查询名为“wuauserv”的服务对象。此查询的结果(= 服务对象)现在使用管道传递到下一个 CMDlet。 Stop-Service 现在停止通过管道传递的所有服务对象(在本例中为“wuauserv”服务对象)。
链接多个 CMDlet 更令人兴奋。您可以使用过滤器首先搜索特定服务,然后终止它们。假设要终止某个应用程序(在本例中为“Xbox”)的所有服务,可以使用以下串联:
Get-Service | Where-Object Displayname -like "*xbox*" | Stop-Service
重要的管道 CMDlet
如上一个代码示例所示,可以使用管道来过滤、排序和转发数据。最重要的 CMDlet 是:
- 位置对象
- 排序对象
- 选择对象
- 组对象
- T恤对象
- Foreach-Object
使用Where-Object进行过滤
CMDlet Where-Object 就像一个筛子,只让所需的对象通过。例如,如果您想列出系统上的所有服务,但只查看当前正在运行的服务,则可以使用以下代码:
Get-Service | Where-Object { $_.Status -eq 'Running' }
当然,也可以使用 Where-Object 执行更复杂的查询,如下例所示:
Get-ChildItem -Path 'C:\Logs' -File | Where-Object { $_.Extension -eq '.log' -and $_.Length -gt 1GB }
在这种情况下,将输出“C:\Logs”文件夹中满足以下两个条件的所有文件:
- .log 作为文件扩展名和
- 文件大小超过 1GB
使用Sort-Object排序
CMDlet Sort-Object 相应地对数据进行排序。这允许您根据选定的属性对对象的输出进行排序 - 在以下示例中,我们根据各自的状态过滤所有服务,然后根据进程名称进行排序。 -Ascending(升序)和-Descending(降序)参数可用于指定顺序:
Get-Service | Where-Object { $_.Status -eq 'Running' } | Sort-Object Name -Ascending
Get-Service | Where-Object { $_.Status -eq 'Running' } | Sort-Object Name -Descending
使用Select-Object进行选择
如果您想从流经管道的对象中提取特定属性,CMDlet Select-Object 是一个有用的工具。如果您只想显示或处理某些数据,它特别有用。以下是 Select-Object 的简单用法,用于仅获取系统上运行的服务的名称和状态:
Get-Service | Select-Object Name, Status
使用Group-Object进行分组
CMDlet Group-Object 允许您按一个或多个属性对对象进行分组。如果您有大量数据并希望将其划分为逻辑组,这尤其有用。下面是一个示例,其中 Group-Object 用于根据服务的状态对服务进行分组:
# Command: Get-Service | Group-Object -Property Status
# Output:
在此代码块中,服务根据其状态进行分组,并获得一个输出,显示每个状态(正在运行、已停止等)有多少服务可用。
使用 Tee-Object 转发
如果您想在屏幕上显示管道数据并将其写入文件,则 CMDlet Tee-Object 非常有用。它将数据转发到两个位置 - 因此得名“Tee”(类似于 T 字路口)。这是一个例子:
Get-Process | Tee-Object -FilePath "C:\temp\processlist.txt"
在上面的代码块中,进程信息既显示在屏幕上,又写入指定的文件中。
使用 Foreach-Object 进行迭代
CMDlet Foreach-Object 可以为管道中的每个对象执行一个操作或一组操作。当您想要为列表中的每个对象执行特定任务时,这特别有用。这是一个例子:
Get-Service | Foreach-Object { if ($_.Status -eq 'Running') { Write-Output "$($_.Name) is running and its start type is $($_.StartType)" } }
在此示例中,Foreach-Object 用于迭代所有服务。如果服务的状态为“正在运行”,则会生成指定服务名称及其启动类型的输出。
哪些 CMDlet 可以串联?
现在您已经知道如何串联/链接 CMDlet,您可能想知道如何找出哪些 CMDlet 彼此“兼容”。
原则上,如果第二个 CMDlet 接受第一个 CMDlet 的输出对象作为输入对象,则 CMDlet 可以串联/链接。这种情况发生在 ByValue 或 ByPropertyName 中。
流水线按值
CMDlet 直接接受前一个 CMDlet 的输出对象 (OutputObject) 的值作为 InputObject,如以下示例所示:
Get-Service wuauserv | Stop-Service
要确定 CMDlet 的 OutputObject 类型,您可以按以下步骤操作:
输出告诉我们 Get-Service 返回对象类型 System.ServiceProcess.ServiceController。它代表一个控制器,通过它可以寻址和控制底层服务。
要检查 Stop-Service 需要哪些对象类型,我们可以按以下步骤操作:
# Command:Get-Help Stop-Service -Parameter
InputObject
# Output:
CMDlet Stop-Service 的参数 -InputObject 需要一个 System.ServiceProcess.ServiceController[] 类型的输入值。这意味着 Stop-Service 接受 ServiceController 对象的集合(数组)。 “接受管道输入?true(ByValue)”部分在这里很重要。这意味着如果输入符合预期类型 (Service),Stop-Service 会直接从管道接受此输入。
因此,我们知道我们可以链接两个 CMDlet,并且 Stop-Service 支持 ServiceController 对象 (ByValue)。
管道化按PropertyName
管道传输“ByPropertyName”是另一种类型的链接。这里,CMDlet的输入不是根据所传输的对象的类型来确定的,而是根据对象的属性或参数的名称来确定。
这是一个简单的例子:
'wuauserv'| Stop-Service
在此示例中,服务名称从 CMDlet Get-Service 传输到 Stop-Service。 CMDlet Stop-Service 通常需要服务名称作为输入才能停止服务。
要查明 CMDlet 是否接受“ByPropertyName”输入,我们可以使用以下命令:
# Command:
Get-Help Stop-Service -Parameter Name
# Output:
在这里我们可以看到 CMDlet Stop-Service 的 -Name 参数需要 String[] 类型的输入,并且它接受根据属性名称从管道输入(请参阅“接受管道输入? true (ByPropertyName)”)。
这意味着,如果从管道传递的对象具有名为 "Name" 的属性(Get-Service 就是这种情况),则此 CMDlet 可以使用这个性质。
在实践中,我们应该始终检查文档,以确保 CMDlet 的预期输入和实际输出匹配,然后再将它们链接到管道中。还需要注意的是,许多 CMDlet 可以支持“ByValue”和“ByPropertyName”,具体取决于提供的数据和预期的输入。
CMDlet 通常被设计为与其“类别”或模块中的类似 CMDlet 兼容。例如,许多输出 User 对象的 Active Directory CMDlet 可以与使用 User 对象作为输入的其他 Active Directory CMDlet 组合在管道中。
最后,在PowerShell中有效使用管道还需要一些实验和经验。使用不同的 CMDlet 并了解它们在实践中如何相互作用会很有帮助。
结论
PowerShell 中的管道功能对于管理员来说是一个强大的工具,并提供了一种简化和自动化各种任务的有效方法。理解和成功运用它的关键在于不断的检验和实践。一旦掌握,使用 PowerShell 管道不仅可以提高效率,还可以根据个人需求创建定制的解决方案和功能。
PowerShell 中的管道功能 stellt ein mächtiges Werkzeug für Administratoren dar并且更有效地进行操作、自动操作和自动操作。 Der Schlüssel zum Verständnis und zur erfolgreichen Anwendung liegt in der konsequenten Auseinandersetzung und Praxis.整个过程中,PowerShell-Pipeline 的工作将不再有效,而是会发生变化,定义运行和功能,并使其成为独立的应用程序。
- 上一篇:[玩转系统] CBA和ExO
- 下一篇:[玩转系统] 图许可管理
猜你还喜欢
- 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