【问题标题】:Remove duplicates after ConvertFrom-StringData in a oneliner在 Oneliner 中的 ConvertFrom-StringData 之后删除重复项
【发布时间】:2021-07-19 04:20:52
【问题描述】:

例如,我有这个班轮:

get-process | select id, processname | %{$_.processname +"="+ $_.id} | ConvertFrom-StringData

它返回每个进程的键值对及其ID。 我的目标是删除任何具有重复名称的进程,并在一个衬里中只留下一个(例如,我希望只留下一个 svchost 条目)。 似乎没有什么对我有用,我不确定ConvertFrom-StringData 是正确的方向,也不明白它如何成功地将其转换为带有重复键的哈希表。

【问题讨论】:

  • 您可以使用| Sort-Object Name -UniqueSelect-Object Name -uniqueGet-Unique

标签: powershell duplicates hashtable


【解决方案1】:

或者从@Daniel 的有用答案中,如果您不担心 ID,您可以使用Select-ObjectSort-Object 中可用的-Unique 开关,我将在此示例中使用。

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 会给你类似的结果。

【讨论】:

  • 很好?。如果您不担心 Id,尽管您可以这样做 Get-Process | Select-Object ProcessName -Unique
【解决方案2】:

如果您希望获得每个进程一次,但仍保留对 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...}

【讨论】:

  • 我忘了分组
  • 如果您稍后制作自己的对象,那么只需放下选择对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2019-11-22
  • 1970-01-01
  • 2021-01-05
  • 2019-04-16
  • 2021-05-07
  • 2019-08-08
相关资源
最近更新 更多