在 oneliner 中的 ConvertFrom-StringData 之后删除重复项
Remove duplicates after ConvertFrom-StringData in a oneliner
我有,例如,这一个班轮:
get-process | select id, processname | %{$_.processname +"="+ $_.id} | ConvertFrom-StringData
其中 returns 每个进程及其 ID 的键值对。
我的目标是删除任何具有重复名称的进程,并在一个衬里中只留下其中一个(例如,我想只留下一个 svchost 条目)。
似乎没有什么对我有用,我不确定 ConvertFrom-StringData
是正确的方向,并且不明白它如何成功地将它转换为具有重复键的哈希表。
如果您希望获取每个进程一次但仍保留对 ID 的引用,您可以在 ProcessName 上使用 Group-Object,然后从中创建包含您想要的内容的自定义对象。
Get-Process | Group-Object ProcessName | ForEach-Object {
[pscustomobject]@{
ProcessName = $_.Name
IDs = $_.Group.Id
} }
输出
ProcessName IDs
----------- ---
acumbrellaagent 7288
aesm_service 17512
ApplicationFrameHost 16704
armsvc 5240
assystResetService 5232
atmgr 18984
audiodg 15216
Calculator 6128
CamMute 5616
CcmExec 5252
chrome {3348, 3848, 4196, 4416...}
或者@Daniel 的有用回答,如果您不担心 ID,您可以使用 Select-Object
中可用的 -Unique
开关,我会使用 Sort-Object
在这个例子中使用。
Get-Process | Foreach-Object -Process {
[PSCustomObject]@{
Name = $_.Name
ID = $_.Id
}
} | Sort-Object -Property Name -Unique
喜欢吧?嗯,是的,但没有必要。这仍然可以通过仅选择属性并将其通过管道进行排序来完成:
Get-Process | Sort-Object -Property Name -Unique | Select-Object -Property Name, ID
还有 Get-Unique 会给你类似的结果。
我有,例如,这一个班轮:
get-process | select id, processname | %{$_.processname +"="+ $_.id} | ConvertFrom-StringData
其中 returns 每个进程及其 ID 的键值对。
我的目标是删除任何具有重复名称的进程,并在一个衬里中只留下其中一个(例如,我想只留下一个 svchost 条目)。
似乎没有什么对我有用,我不确定 ConvertFrom-StringData
是正确的方向,并且不明白它如何成功地将它转换为具有重复键的哈希表。
如果您希望获取每个进程一次但仍保留对 ID 的引用,您可以在 ProcessName 上使用 Group-Object,然后从中创建包含您想要的内容的自定义对象。
Get-Process | Group-Object ProcessName | ForEach-Object {
[pscustomobject]@{
ProcessName = $_.Name
IDs = $_.Group.Id
} }
输出
ProcessName IDs
----------- ---
acumbrellaagent 7288
aesm_service 17512
ApplicationFrameHost 16704
armsvc 5240
assystResetService 5232
atmgr 18984
audiodg 15216
Calculator 6128
CamMute 5616
CcmExec 5252
chrome {3348, 3848, 4196, 4416...}
或者@Daniel 的有用回答,如果您不担心 ID,您可以使用 Select-Object
中可用的 -Unique
开关,我会使用 Sort-Object
在这个例子中使用。
Get-Process | Foreach-Object -Process {
[PSCustomObject]@{
Name = $_.Name
ID = $_.Id
}
} | Sort-Object -Property Name -Unique
喜欢吧?嗯,是的,但没有必要。这仍然可以通过仅选择属性并将其通过管道进行排序来完成:
Get-Process | Sort-Object -Property Name -Unique | Select-Object -Property Name, ID
还有 Get-Unique 会给你类似的结果。