【问题标题】:Sorting Multiple Properties in a Object in PowerShell在 PowerShell 中对对象中的多个属性进行排序
【发布时间】:2021-08-08 06:58:15
【问题描述】:

我正在尝试对变量的两列进行排序,但是,在我的一生中,我似乎无法让它工作。

这是我的示例 CSV 数据:

Department                Users
---                      ---
Human Resources           Wendell
IT                        John
IT                        Ashley
Human Resources           Blake
IT                        Peter
Human Resources           Amber

这是我目前所拥有的。

$OrgUsers = Import-Csv OrgUsers.csv

$OrgUsers | Group-Object Department | @{Name='Department';Expression='Name'},@{Name='Users';Expression={ @($_.Group.Users) }}

上面的输出如下所示:

Department                User
---                      ---
Human Resources          {Wendell, Blake, Amber}
IT                       {John, Ashley, Peter}

我正在尝试对两列进行排序,我认为这应该相对简单。

这是我迄今为止尝试过的 - 这适用于第二列并按字母顺序对用户进行排序

$OrgUsers | Group-Object Department | Select-Object @{Name='Department';Expression='Name'},@{Name='Users';Expression={ @($_.Group.Users) }} | Sort-Object @{Expression={$_.Users};Ascending=$true}

但是当我尝试同时执行这两个属性时,它只会对第一列而不是第二列进行排序。

$OrgUsers | Group-Object Department | Select-Object @{Name='Department';Expression='Name'},@{Name='Users';Expression={ @($_.Group.Users) }} | Sort-Object @{Expression={$_.Department};Ascending=$true},@{Expression={$_.Users};Ascending=$true}

我希望我的最终结果看起来像:

Department                User
---                      ---
IT                       {Ashley, John, Peter}
Human Resources          {Amber, Blake, Wendell}

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: powershell csv sorting variables


    【解决方案1】:

    正在发生的事情是您尝试首先对部门进行排序,然后对作为单个数组(包含多个名称)的用户进行排序。由于每个部门只有一行,因此已经排序。

     Department                User
    ---                      ---
    IT                       {Ashley, John, Peter} # Only 1 line exists for IT Department; cannot be sorted by other columns
    
    Human Resources          {Amber, Blake, Wendell} # Only 1 line exists for IT Department; cannot be sorted by other columns
    

    您可以改为单独对用户数组进行排序。您可以在分配用户数组的计算属性中执行此操作。

    $OrgUsers |
        Group-Object Department |
        Sort-Object Name |
        Select-Object @{Name = 'Department'; Expression = 'Name' },
                      @{Name = 'Users'; Expression = { $_.Group.User | Sort-Object } } 
    

    【讨论】:

    • 嗨丹尼尔,这完全符合我的需要,感谢您的洞察力。
    猜你喜欢
    • 2022-01-24
    • 2022-07-19
    • 2022-01-24
    • 1970-01-01
    • 2020-04-27
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多