Добавить пользователей в группу AD с правильным выводом CSV - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь добавить группу AD в профили пользователей на основе OU

У меня работал похожий скрипт, поэтому попытался изменить его и не удалось. Я предполагаю, что это может быть "-Identity $ _", но я недостаточно хорош для отладки.

#Create a new class to hold the info for our CSV entry
Class CSVEntry{
    [String]$UserName
    [String]$GroupName
    [String]$TimeStamp
}

#Creating a list to hold the CSV entries
$Results = New-Object 'System.Collections.Generic.List[PSObject]'

#Defined the name of the group here
$GroupName = 'GROUPS NAME'
$ou = 'ou=XX,ou=XX,ou=XX,dc=XX,dc=local'

Get-ADUser -Filter * -SearchBase $ou | ForEach-Object{

    #Add the user to the group here
    Add-ADPrincipalGroupMembership -MemberOf $GroupName Identity $_

    #Write-Host $_.Name - $groupName 

    #Build a custom CSVEntry object and add it to the list
    $newRecord = [CSVEntry]::new()
    $newRecord.UserName = $_.Name
    $newRecord.GroupName = $groupName
    $newRecord.TimeStamp = Get-Date

    #Add the new record to the list
    $Results.Add($newRecord)
}


#Export the list of CSV entries
$Results | Export-Csv C:\PS\AddADGroupToUsers.csv

ошибки:

Add-ADPrincipalGroupMembership : A positional parameter cannot be found that accepts argument 'CN=NAME,OU=XX,OU=XX,OU=XX,OU=XX,DC=XX,DC=LOCAL'.
At line:18 char:5
+     Add-ADPrincipalGroupMembership -MemberOf $GroupName Identity $_
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Add-ADPrincipalGroupMembership], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.AddADPrincipal
   GroupMembership

РЕДАКТИРОВАТЬ: Итак, скрипт нене вносите никаких изменений, группа не добавляется в список пользователей. вывод на экране:

WARNING: User  is already a member of group XYZ
WARNING: User  is already a member of group XYZ
WARNING: User  is already a member of group XYZ

UserName GroupName                          TimeStamp
-------- ---------                          ---------
shows ok       XYZ        14/10/2019 14:50:23
shows ok       XYZ        14/10/2019 14:50:23
shows ok       XYZ        14/10/2019 14:50:23

Все, что я изменил, это имя группы на XYZ, а имя пользователя во втором тайме показывает нормально. Но показывает пустым вверху, и я уверяю вас, что а) пользователь еще не входит в группу и б) скрипт не добавляет их

Текущий настроенный код, бородавки и все, кроме санированного:

$groupName = 'GROUP'
$ou = 'setcorrectly'
$cred = Get-Credential -credential dom\usr

$results = Get-ADUser -Filter * -SearchBase $ou -Credential $cred | ForEach-Object {
    #Add the user to the group here
    try {
        Add-ADGroupMember -Identity $groupName -Members $_.DistinguishedName -Credential $cred -ErrorAction Stop
    }
    catch {
        Write-Warning "User $($_.Name) is already a member of group $groupName"
    } 

        # output a PsCustomObject that gets collected in the $results variable
        [PsCustomObject]@{
            'UserName'  = $_.Name
            'GroupName' = $groupName
            'TimeStamp' = Get-Date
}
}

# output on console
$results | Format-Table -AutoSize

# Export to CSV file
$results | Export-Csv C:\PS\AddADGroupToUsers.csv -NoTypeInformation

Read-Host -Prompt "Press Enter to exit"

Выход CSV показывает только вторую половину экрана и ничего не говорит о том, что он уже является членом

1 Ответ

1 голос
/ 12 октября 2019

Ниже используется Add-ADGroupMember для добавления пользователей в 1 группу вместо Add-ADPrincipalGroupMembership, который используется для добавления 1 пользователя в несколько групп.

Он также использует [PsCustomObject] s для вывода результатов, поэтому вам не нужно использовать класс CSVEntry.

# Define the name of the group here.
# can be either:
# A distinguished name
# A GUID (objectGUID)
# A security identifier (objectSid)
# A Security Account Manager account name (sAMAccountName)
$groupName = '<NAME OF THE GROUP>'

$ou = 'ou=XX,ou=XX,ou=XX,dc=XX,dc=local'

$results = Get-ADUser -Filter * -SearchBase $ou | ForEach-Object {
    #Add the user to the group here
    $userName = $_.Name
    try {
        Add-ADGroupMember -Identity $groupName -Members $_.DistinghuishedName -ErrorAction Stop
        # output a PsCustomObject that gets collected in the $results variable
        [PsCustomObject]@{
            'UserName'  = $_.Name
            'GroupName' = $groupName
            'TimeStamp' = Get-Date
        }
    }
    catch {
        Write-Warning "User $userName is already a member of group $groupName"
    } 
}

# output on console
$results | Format-Table -AutoSize

# Export to CSV file
$results | Export-Csv C:\PS\AddADGroupToUsers.csv -NoTypeInformation


Редактировать

Если вы хотите, чтобы переменная $results также содержала пользователейкоторые уже являются членами группы, вы можете просто переместить создание [PsCustomObject] ниже блока catch{..}:

$results = Get-ADUser -Filter * -SearchBase $ou | ForEach-Object {
    #Add the user to the group here
    $userName = $_.Name
    try {
        Add-ADGroupMember -Identity $groupName -Members $_.DistinghuishedName -ErrorAction Stop
        $status = "User added successfully"
    }
    catch {
        Write-Warning "User $userName is already a member of group $groupName"
        $status = "User is already a member"
    }

    # output a PsCustomObject that gets collected in the $results variable
    [PsCustomObject]@{
        'UserName'  = $userName
        'GroupName' = $groupName
        'TimeStamp' = Get-Date
        'Status'    = $status
    }
}

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

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