Скрипт на PowerShell для вывода групп и пользователей

Иногда надо узнать, в какой группе какие пользователи состоят. В сети есть множество вариантов решения. Вот я наваял свой. Он примитивен, но под мои задачи его достаточно. Выводи все в CSV. Только проблема в том, что приходится при экспорте в Excel указывать фиксированную ширину столбцов. А так все нормально. В конце скрипта выводится напоминание об этом.

#надо будет в Excel выбрать столбцы фиксированной ширины
Import-Module ActiveDirectory
$groups = Get-ADGroup -filter * -SearchBase «ou=OrgUnit,dc=domen,dc=local»
$Out= ForEach ($group in $groups)
{
$String = «Группа » + $group.Name
Write $string
Get-ADGroupMember -Identity $group.Name | Get-ADUser -Properties SamAccountName | Sort-Object SamAccountName |ft Name,SamAccountName
}
$Out | Out-File C:\Groups_Users.csv
Add-Type -assembly System.Windows.Forms
$ConfirmWin = New-Object System.Windows.Forms.Form
$ConfirmWin.StartPosition = «CenterScreen»
$ConfirmWin.Text = «Внимание!»
$ConfirmWin.Width = 470
$ConfirmWin.Height = 120
$ConfirmWin.ControlBox = 0
$ConfirmWinOKButton = New-Object System.Windows.Forms.Button
$ConfirmWinOKButton.add_click({ $MainSendWindow.Close; $ConfirmWin.Close() })
$ConfirmWinOKButton.Text = «Закрыть»
$ConfirmWinOKButton.AutoSize = 1
$ConfirmWinOKButton.Location = New-Object System.Drawing.Point(190,50)
$ConfirmLabel = New-Object System.Windows.Forms.Label
$ConfirmLabel.Text = «При импорте в Excel необходимо будет выбрать столбцы фиксированной ширины!»
$ConfirmLabel.AutoSize = 1
$ConfirmLabel.Location = New-Object System.Drawing.Point(10,10)
$ConfirmWin.Controls.Add($ConfirmLabel)
$ConfirmWin.Controls.Add($ConfirmWinOKButton)
$ConfirmWin.ShowDialog() | Out-Null

Вместо «ou=OrgUnit,dc=domen,dc=local» подставьте свои значения. Если SearchBase не указывать, то скрипт пролапатит весь ваш домен. В этом случае могут быть ошибки — не у всех групп выводятся пользователи. Я так и не понял, почему. Но меня устраивает вариант с указанием OU. Всем привет!