Как сортировать и группировать CSV-файл, содержащий список сотрудников по отделу и названию, с помощью PowerShell - PullRequest
1 голос
/ 03 октября 2019

Я создаю CSV-файл каталога сотрудников, который создается после запроса Get-ADUser, и я хочу настроить сортировку и группировку. Я могу отсортировать файл CSV по департаментам, но я хочу дополнительно сгруппировать каждый отдел, указав вначале глав департаментов.

Как отсортировать список сотрудников в формате csv по департаментам и группам отделовруководители наверху каждого отдела?

Вот как я сортирую по отделам.

$departments = "Executive|IT|HR|Billing"

$searchQuery = Get-ADUser -Filter * -Properties * -SearchBase "mysearchbase" |
               Where-Object {$_.Enabled -eq $true -and $_.department -ne $null} |
               Select-Object department, name, title, mail, telephonenumber

# Employee list sorted by $departments
$deptSortedObj = $searchQuery |
                 Sort-Object { $departments.IndexOf($_.department) }

foreach ($employee in $deptSortedObj) {
    $employeeList = [Ordered]@{
        department = $employee.department
        name       = $employee.name
        title      = $employee.title
        email      = $employee.mail.ToLower()
        extension  = $employee.telephoneNumber.Split('x')[1]
    }
    $obj += New-Object PSObject -Property $employeeList
}

$obj | ConvertTo-Csv -NoTypeInformation -Delimiter "," |
    ForEach-Object {$_ -replace '"',''} |
    Select-Object -Skip 1 |
    Add-Content contact.csv

Это пример моего желаемого результата. (обратите внимание, что руководители отделов должны быть сгруппированы вверху каждого отдела. Например, руководители отделов: генеральный директор, менеджер по выставлению счетов, вице-президент, директор, руководитель)

Executive,Jane Doe,CEO,email@example.com,9932
Executive,John Smith,Administrative Assistant,email@example.com,9932
Billing,Tina Dina,Billing Manager,email@example.com,9932
Billing,Bill Dill,Billing Clerk,email@example.com,9932
Billing,Tommy Wommy,Payables,email@example.com,9932

Мой текущийвывод отсортирован только по отделам.

1 Ответ

0 голосов
/ 03 октября 2019

Sort-Object можно сортировать по нескольким критериям. Если у вас есть определенный список должностей «начальник отдела», вы можете отсортировать его следующим образом:

$titles = 'CEO', 'Manager', 'Director'
$deptSortedObj = $searchQuery |
                 Sort-Object {$departments.IndexOf($_.department)},
                     @{expression={$_.Title -in $titles}; descending=$true}, Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...