Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Выгрузка данных из AD: Группа -> Пользователи (http://forum.oszone.net/showthread.php?t=346337)

JimmLight 03-09-2020 13:56 2932809

Выгрузка данных из AD: Группа -> Пользователи
 
Добрый день!
Подскажите пожалуйста в реализации скрипта, который бы выгружал необходимый мне перечень групп с пользователями.

Использую такую команду:
Код:

Get-ADGroupMember -Identity "NameGroup" | Select-Object name | Export-Csv C:\SuperScripts\Group.csv -Encoding UTF8 -Delimiter ";"
Для выгрузки содержимого одной группы.
Но необходимо выполнить таким образом, чтобы можно было добавлять в скрипт любое количество групп и получать CSV следующего формата:
------------------------------------------------------------------------------------------------------
NameGr1 -|- NameGr2 -|- NameGr3 -|- NameGr4 -|- NameGr5 -|- NameGr6 -|-
------------------------------------------------------------------------------------------------------
NameUser | NameUser | NameUser | NameUser | NameUser | NameUser |
NameUser | NameUser | NameUser | NameUser | NameUser | NameUser |
NameUser | NameUser | NameUser | NameUser | NameUser | NameUser |
NameUser | NameUser | NameUser | NameUser | NameUser | NameUser |

Busla 03-09-2020 16:21 2932821

csv - это строки связанных друг с другом данных, а в вашем примере просто текст столбиками написан

JimmLight 04-09-2020 12:58 2932912

Цитата:

Цитата Busla
csv - это строки связанных друг с другом данных, а в вашем примере просто текст столбиками написан »

Okay.
Прошу прощения.
На выходе нужно получить CSV-файл следующего содержания:

Код:

"NameGr1";"NameGr2";"NameGr3";"NameGr4";"NameGr5";"NameGr6"
"NameUser";"NameUser";"NameUser";"NameUser";"NameUser";"NameUser"
"NameUser";"NameUser";"NameUser";"NameUser";"NameUser";"NameUser"
"NameUser";"NameUser";"NameUser";"NameUser";"NameUser";"NameUser"
"NameUser";"NameUser";"NameUser";"NameUser";"NameUser";"NameUser"


Busla 04-09-2020 13:32 2932918

JimmLight, речь была о том, что табличная форма представления данных - это не рисование по клеточкам

Iska 04-09-2020 16:25 2932942

Цитата:

Цитата JimmLight
На выходе нужно получить CSV-файл следующего содержания: »

Файл именно такого содержания можно получить путём извращённого программирования ровно в одном случае: если в каждой из NameGr* будет содержаться строго одинаковое количество NameUser'ов, что в реальной жизни не бывает. Надо понимать, что CSV — это фактически плоская база данных.

JimmLight 07-09-2020 06:34 2933163

Цитата:

Цитата Iska
Файл именно такого содержания можно получить путём извращённого программирования ровно в одном случае: если в каждой из NameGr* будет содержаться строго одинаковое количество NameUser'ов, что в реальной жизни не бывает. Надо понимать, что CSV — это фактически плоская база данных. »

Понял. Жаль.
Нашёл вот такой скрипт, мало ли кому пригодится. Чуть-чуть подредактировал под себя.
Код:

#// Start of script
#// Get year and month for csv export file
$DateTime = Get-Date -f "yyyy-MM"
 
#// Set CSV file name
$CSVFile = "C:\AD_Group"+$DateTime+".csv"
 
#// Create emy array for CSV data
$CSVOutput = @()
 
#// Get all AD groups in the domain
$ADGroups = Get-ADGroup -Filter * -SearchBase "OU=new_group,DC=domain,DC=ns"
 
#// Set progress bar variables
$i=0
$tot = $ADGroups.count
 
foreach ($ADGroup in $ADGroups) {
    #// Set up progress bar
    $i++
    $status = "{0:N0}" -f ($i / $tot * 100)
    Write-Progress -Activity "Exporting AD Groups" -status "Processing Group $i of $tot : $status% Completed" -PercentComplete ($i / $tot * 100)
 
    #// Ensure Members variable is empty
    $Members = ""
 
    #// Get group members which are also groups and add to string
    $MembersArr = Get-ADGroup -filter {Name -eq $ADGroup.Name} | Get-ADGroupMember | select Name, objectClass, distinguishedName
    if ($MembersArr) { 
        foreach ($Member in $MembersArr) { 
            if ($Member.objectClass -eq "user") {
                $MemDN = $Member.distinguishedName
                $UserObj = Get-ADUser -filter {DistinguishedName -eq $MemDN}
                if ($UserObj.Enabled -eq $False) {
                    continue
                }
            }
            $Members = $Members + "," + $Member.Name 
        }
        #// Check for members to avoid error for empty groups
        if ($Members) {
            $Members = $Members.Substring(1,($Members.Length) -1)
        }
    }
 
    #// Set up hash table and add values
    $HashTab = $NULL
    $HashTab = [ordered]@{
        "Name" = $ADGroup.Name
        "Category" = $ADGroup.GroupCategory
        "Scope" = $ADGroup.GroupScope
        "Members" = $Members
    }
 
    #// Add hash table to CSV data array
    $CSVOutput += New-Object PSObject -Property $HashTab
}
 
#// Export to CSV files
$CSVOutput | Sort-Object Name | Export-Csv $CSVFile -Encoding UTF8 -Delimiter ";"
 
#// End of script


DJ Mogarych 07-09-2020 13:14 2933201

Цитата:

Цитата JimmLight
CSV следующего формата »

Интересно, для какой цели требуется именно такое представление этих данных

Iska 07-09-2020 20:47 2933274

DJ Mogarych, для начальства, как правило.

DJ Mogarych 07-09-2020 21:29 2933278

...которое и само не знает, зачем это ему в таком виде.


Время: 18:28.

Время: 18:28.
© OSzone.net 2001-