如下说明是翻译
PowerShell
中
: help Group-Object
产生的帮助信息
.
译者
: Edengundam(
马涛
)
Group-Object
大纲
根据指定的属性
,
将包含相同属性值的对象进行分组
.
语法
Group-Object [[-property] <Object[]>] [-caseSensitive] [-noElement] [-culture <string>] [-inputObject <psobject>] [<CommonParameters>]
详细描述
根据指定的属性
,
将包含相同属性值的对象进行分组
.
默认情况下
,
命令将会根据参数
Property
指定的属性
,
将具有相同值的对象分成一组
,
并为每一组对象创建
GroupInfo
对象
. GroupInfo
包含
group
属性
,
此属性是所有属于此分组的对象的集合
.
分组成员数存放在对应的
GroupInfo
对象上的
Count
属性中
,
分组的名称是根据这些对象的公共值命名的
.
要忽略结果中的输入对象
,
通过指定参数
NoElement.
此时结果将是一组
GroupInfoNoElement
对象
,
每个对象的属性
Group
为空
.
默认情况下
,
简历分组时的比较操作是忽略大小写的
.
你可以通过指定参数
CaseSensitive
来改变此行为
.
参数
-property <Object[]>
指定对输入对象进行分组的属性或属性列表
(
译注
:
既多个属性
,
类似数据库中
Group By
子句
).
强制参数
?
|
false
|
参数位置
?
|
1
|
默认值
|
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
-caseSensitive <SwitchParameter>
指定在分组过程中
,
在进行属性值比较时需要区分大小写
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
False
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
-noElement <SwitchParameter>
确定输出的分组对象是否包含输入的对象
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
-culture <string>
指定在执行字符串比较时使用的区域设置
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
Current Culture
|
允许从管道绑定输入
?
|
false
|
允许通配符扩展
?
|
false
|
-inputObject <psobject>
制定进行分组的对象
.
输入一个包含对象的变量
,
或者一个能够产生对象的命令或表达式
.
强制参数
?
|
false
|
参数位置
?
|
named
|
默认值
|
|
允许从管道绑定输入
?
|
true (
根据值
)
|
允许通配符扩展
?
|
false
|
<
公共参数
>
此命令支持公共参数
: -Verbose, -Debug, -ErrorAction, -ErrorVariable, and -OutVariable.
更多信息
,
输入
, "get-help about_commonparameters".
输入类型
Object stream
返回类型
Objects
注意
Group-Object
不要求分组的对象必须是一个类型
.
当对不同类型对象进行分组时
,
此命令使用下述规则进行
.
属性名称和类型相同
:
如果所有的对象都具有指定的属性
,
并且这些属性具有相同的类型
,
则使用与处理相同类型的对象一样的规则进行分组
.
属性名相同
,
类型不相同
:
如果不同的对象包含了指定的属性名称
,
但是这些这些属性的类型不完全相同
,
那么在一组中第一个被处理的对象的类型作为此属性的基本类型
.
当遇到一个不同类型的对象时
,
则该值被转换成每组的基本类型
.
如果类型转换失败
,
则该对象不匹配该组
.
缺少属性
:
不包含指定属性的对象被认为是不可能分组
.
不可分组的对象也出现在最后的
GroupInfo
对象中
,
此分组名为
AutomationNull.Value.
例
1
C:/PS>get-childitem *.doc | group-object -property length
此命令将会显示当前位置下扩展名为
.doc
的文件列表
,
并按照文件长度进行分组
.
例
2
C:/PS>get-childitem | sort-object -property extension | group-object -property extension
此命令将会显示当前位置下的文件
,
按照文件扩展名进行排序并分组
.
注意排序操作在分组操作之前执行
.
例
3
C:/PS>1..35 | group-object -property {$_ % 2},{$_ % 3}
此命令显示从
1
到
35
的整数
,
并且按照他们除以
2
和
3
的余数进行分组
.
它揭示了
cmdlet
能够允许多个脚本块作为输入
.
例
4
C:/PS>$events = get-eventlog -logname system -newest 1000
$events | group-object -property eventID
此命令按照事件
ID
进行分组
,
显示最近的
1000
项系统事件日志
.
它使用
Get-EventLog
cmdlet
获取事件
,
并将它们存储在变量
$events
中
.
第二行中
,
它将存储的事件通过管道发送给
Group-Object cmdlet,
通过参数
Property
来指定这些事件应该根据他们的
eventID
属性进行分组
.
输出中
,
列
Count
表示了每组中的项数
,
列
Name
表示定义每个分组的
EventID
值
,
列
Group
表示了每组所包含的输入对象的数组
.
Count Name Group
----- ---- -----
247 7036 {FABRIKAM, FABRIKAM, FABRIKAM,..
361 30 {FABRIKAM, FABRIKAM, FABRIKAM,..
例
5
C:/PS>get-process | group-object -property company -noelement
此命令显示计算机上的所有进程列表
,
并根据进程关联的应用程序开发公司名称进行分组
.
因为制定了参数
NoElement,
此命令返回的对象不包括被分组的进程对象
.
例
6
C:/PS>get-eventlog -logname system -newest 1000 |
group-object -property {$_.TimeWritten - $_.TimeGenerated}
此命令显示最近的
1000
项系统事件日志
,
并根据该日志事件被记录的时间和事件发生时间之间时间差分组
.
命令使用了
Get-EventLog
cmdlet
取得日志项
,
并通过管道将它们发送给
Group-Object cmdlet.
参数
Property
的值
,
是通过一个脚本块指定的
(
使用花括号括起来的表达式
).
脚本块求值的结果是该日志事件被记录的时间和事件发生时间之间时间差
.
该值被用来对最近的
1000
项日志进行分组
.
此命令揭示了你能够为参数
Property
的值提供一个脚本块
.
例
7
C:/PS>get-childitem | group-object extension -noelement
此命令确定当前目录下有哪些扩展名
,
但是不在分组结果中包含任意的文件对象
.
例
8
C:/PS>$events = get-eventlog -logname application -newest 500
$groups = group-object -inputobject $events -property entrytype,source
$groups | get-member
$groups | select-object -expandproperty group
此命令创建表示对应用程序事件日进行分组的
GroupInfo
对象
. Get-EventLog cmdlet
用来获取最近的
500
项应用程序事件日志
,
并存储到变量
$events
中
.
变量
$events
作为输入传递给
Group-Object cmdlet,
并根据项的类型和事件源进行分组
,
将作为结果的分组对象存储到变量
$groups
中
.
变量
$groups
通过管道传递给
Get-Member
cmdlet
来显示关于它的信息
.
命令的最后一行
,
变量
$groups
通过管道传送给
Select-Object
cmdlet.
参数
ExpandProperty
用来显示变量
$groups
中
GroupInfo
对象上
group
属性中的事件信息
.
相关链接
Sort-Object
Measure-Object
New-Object
Select-Object
ForEach-Object
Where-Object
Compare-Object
Tee-Object