Форматирование вывода из PowerShell в CSV-файл - PullRequest
1 голос
/ 28 июня 2019

Попытка вывести два переменных результата из Active Directory в PowerShell и отформатировать в одной строке CSV-файла с каждой возвращаемой переменной в отдельных ячейках.Входной файл содержит имена четырех групп AD.Задача состоит в том, чтобы подсчитать пользователей в каждой группе и вернуть общее количество пользователей.

Цель состоит в том, чтобы записать в файл .csv форматирование вывода с именем группы объявлений в одной ячейке и количеством пользователей в следующей ячейке справа.

Это простой сценарийпостроено, начиная с чтения файла и возврата результатов на экран.Попытка записи в файл с помощью Export-Csv не увенчалась успехом.Add-Content был самым успешным методом.

Следующий код работает частично, но имя группы объявлений и количество пользователей записываются в одну и ту же ячейку в файле .csv.Предыдущие попытки записали имя группы AD в строку и общее количество пользователей в следующей строке.

foreach($object in $groupfile){
    $groupName = $object.adgroupname
    $groupName = $groupName.Trim()
    $users = Get-ADGroupMember -Identity $groupName
    $usercount = $users.Count
    $groupinfo = ($groupName + " " + $usercount)

    # both of the lines below return the information to the screen on on line
    Write-Host $groupname, $usercount
    Write-Host $groupinfo

    # this line returns the information as shown below in the First result
    Add-Content -Path $filepath $groupname, $usercount

    # this line writes to the file as shown below in the Second result
    Add-Content -Path $filepath $groupinfo
}

Первый результат (приемлем для небольшого числа групп, но для большего числа групп необходимо более надежное решение): название группы объявлений один 357 название группы объявлений два 223 название группы объявлений три155 название группы объявлений четыре 71

Второй результат (оба значения возвращаемой переменной находятся в одной ячейке): название группы объявлений одно 357 имя группы объявлений два 223 название группы объявлений три 155 название группы объявлений четыре 71

Цель состоит в том, чтобы записать в файл .csv форматирование выходных данных с именем группы объявлений в одной ячейке и количеством пользователей в следующей ячейке справа.

1 Ответ

2 голосов
/ 28 июня 2019

Я предполагаю, что ваша переменная $groupfile является результатом команды Import-Csv.

Если я правильно понимаю вопрос, вы можете сделать следующее:

# loop through the $groupfile rows and collect the results as objects
$result = $groupfile | ForEach-Object {
    $groupName = $_.adgroupname.Trim()
    [PSCustomObject]@{
        'GroupName' = $groupName
        'UserCount' = @(Get-ADGroupMember -Identity $groupName).Count
    }
}

# display on screen
$result | Format-Table -AutoSize

# export to csv
$result | Export-Csv -Path $filepath -NoTypeInformation -Force

Есливыведите csv, что-то вроде

"GroupName","UserCount"
"ad group name one","357"
"ad group name two","223"
"ad group name three","155"
"ad group name four","71"

Примечание: Get-ADGroupMember может возвращать объекты типа user, group и computer, поэтому любое имявторой столбец ObjectCount о добавлении предложения Where-Object {$_.objectClass -eq 'user'} к функции Get-ADGroupMember для фильтрации только пользовательских объектов

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...