当使用PowerShell时,有时需要处理一组数据。我们处理大量的文件、用户帐户、虚拟机等。当在控制台中显示这些不同对象时,对象将一个接一个地滚动到屏幕上,而不考虑您想要如何查看它们。但这是可以解决的!使用PowerShell的Group-Object
cmdlet,您可以将对象分组在一起。此 cmdlet 的作用类似于SQL GROUP BY 语句。
PowerShell 通过 Powershell Group Object cmdlet 对对象的属性进行汇总。此 cmdlet 允许脚本编写者一次性以组的形式查看大量对象属性。
让我们生成一堆相同类型的对象。这些对象可以是任何类型。但是,为了演示,我将使用System.ServiceProcess.ServiceController对象,这是Get-Service
cmdlet 返回的对象。
为了使 Group-Object 正常工作,请确保仅对相同类型的对象进行分组。重要的是所有对象都具有相同的属性。
使用ManageEngine ADManager Plus 管理和报告Active Directory、Exchange和Microsoft 365。下载免费试用版!
不带参数的Group-Object
Get-Service
返回本地计算机上的所有服务。由于这里有很多服务,我无法了解它们的状态、启动类型等信息。我想首先按照它们的状态对这些服务进行分组。为了对这些服务进行分组,我将所有服务对象传递到 PowerShell 的 Group-Object
命令,并使用 Status
属性。
注意,通过将所有服务传递给 Powershell Group Object
,你可以得到数量。这很重要但也很有用。
按照单个属性分组对象
要按照特定属性(在这种情况下是状态)对它们进行分组,我需要告诉 Group-Object
我想要按照特定对象属性进行分组。这可以通过在 Group-Object
上使用 Property
参数来完成。
现在我们谈谈正题!我现在可以看到有多少服务同时处于停止和运行状态。我也可以对 StartType
做同样的操作。
筛选 Group-Object 输出
也许我想深入了解一个或多个这些组中的实际服务。我可以通过查看 Powershell 组对象命令返回的 Group
属性来获取这些对象。 Group
对象包含按照分组对象属性值分组的所有服务。如果我正在按服务状态进行分组,要获取所有已停止的服务,我可以通过服务的状态为 Stopped
进行筛选,然后展开 Group
对象以查看所有这些服务。
按多个属性分组对象
不仅可以在单个属性上这样分组对象,而且还可以在多个属性上进行分组。也许您想看到所有基于它们的状态和启动类型的服务。要做到这一点,我只需要在Group-Object
的Property
参数上添加另一个属性名称。
通过添加额外的属性,您可以基本上创建一堆“和”情景,并根据需要对许多属性进行分组!
使用ManageEngine ADManager Plus管理和报告Active Directory、Exchange和Microsoft 365。立即下载免费试用!
总结
Group-Object
命令是一个帮助您根据共同属性将类似对象分组在一起的命令。像这样分组对象在许多不同的情况下都非常方便。我希望通过了解一下Group-Object
命令的工作原理,您可以获得更多关于如何改进和创建更好的PowerShell脚本的想法!
如果您刚开始学习PowerShell,我强烈建议您查看我关于PowerShell工具构建的迷你课程!
Source:
https://adamtheautomator.com/powershell-group-object/