none
Kopieren der Gruppenmitgliedschaften eines Benutzers RRS feed

  • Frage

  • Moin Moin zusammen,

    in einem Skript möchte ich die Gruppenmitgliedschaften eines Benutzers auf einen neu erstellten Benutzer übertragen.

    Mein bisherigen Ansatz:

     

     $groups = Get-ADUser $Account | ForEach-Object { "" ; $_.SamAccountName ; "—" ; Get-ADPrincipalGroupMembership $_ | Select-Object SamAccountName }
    
                    
    
    
    
                        foreach ($NewUser in $AccountNeu)
                        
              {
     
                                 New-ADUser -name $NewUser  -Path "OU=Benutzer,OU=Test,OU=Cluster 4,OU=Test,DC=Test-ad,DC=de" 
                                 Add-ADGroupMember -Identity $groups -Member $NewUser }

    scheitert leider.

    Kann es sein, dass in dem Array $Groups Strings enthalten sind und der Befehl Add-GroupMember daran scheitert ?

     

    Viele Grüße

     Tim

     

     

    Mittwoch, 2. März 2016 07:09

Antworten

  • Moin,

    du solltest dir wirklich nochmal Powershell Grundlagen anschauen. Gerade, was den Umgang mit Arrays und Schleifen angeht. Es geht alles viel einfacher als du denkst :)

    Dein Script ergibt übrigens keinen Sinn, ich weiß, was du damit bewirken willst, aber die Struktur passt einfach nicht.

    Hier mal mein Vorschlag mit deiner groben Struktur und dem Vorschlag von Christian:

    #csv einlesen, import-csv macht automatisch ein powershell object draus
    $stationen = Import-Csv C:\temp\Namen.csv -Delimiter ';'
    $password = '##########' | ConvertTo-SecureString -AsPlainText -Force
    
    $SrcUser = 'TemplateUser' # von diesem user sollen alle gruppen übertragen werd
    $Groups = (Get-ADUser $SrcUser | ForEach-Object {Get-ADPrincipalGroupMembership $_ | Select-Object name} | Where-Object { $_.Name -ne 'Domain Users' }).Name
    
    # für jedes object in $stationen
    ForEach ($User in $stationen){
        
        $Account = $User.Name
        
        # neuen AD User mit weiteren daten anlegen
        New-ADUser -name $Account -Path 'OU=Benutzer,OU=###,OU=### 4,OU=###,DC=###,DC=##' `
                -DisplayName $NewUser `
                -Company 'Test ' `
                -City 'Test' `
                -PostalCode '111111' `
                -POBox 'Test' `
                -ScriptPath 'Test' `
                -StreetAddress 'Test 120' `
                -OfficePhone '04011055555' `
                -State 'Hamburg' `
                -Country 'Deutschland' `
                -HomeDrive 'y:' `
                -HomeDirectory "\\test\user$\$Account" `
                -AccountPassword  $password
        
        # jede gruppe von dem TemplateUser wird dem neuen User zugeordnet
        foreach ($Group in $Groups){
            Add-ADGroupMember -Identity $Group -Members $Account
        }
    
        Write-Host "$Account wurde erfolgreich angelegt :)" -ForegroundColor Green
    }
    

    Und bitte lösche das Passwort und den Domain Namen aus deinem zweiten Post!


    • Bearbeitet psott Mittwoch, 2. März 2016 15:57
    • Als Antwort markiert Timson_Hamburg Donnerstag, 3. März 2016 07:47
    Mittwoch, 2. März 2016 15:56

Alle Antworten

  • Hi Tim,

    bei mir funktioniert das mit folgendem Skript:

    $source = "usera"
    $dest ="userb"
    
    $groups = Get-ADPrincipalGroupMembership -Identity cg | select name
    
    $groups | % {
    
    
    Add-ADGroupMember -Identity $_.name -Members $dest
    
    
    }

    Einziger Schönheitsfehler ist die Fehlermeldung der Gruppe Domänen-Benutzer, da dieser Gruppe jeder Benutzer der Domäne bereits angehört.

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Mittwoch, 2. März 2016 08:19
  • Hi Christian,

    Vielen Dank schon einmal. Ich denke das ist für mich so nicht umsetzbar.

    ich setze hier einmal mein komplettes Skript rein.

    $stationen = Import-Csv C:\temp\Namen.csv -Delimiter ';'
    $password = „Test“ | ConvertTo-SecureString -AsPlainText -Force
        ForEach ($User in $stationen)
           
            {
    
                $Account = $User.Name
    
                [System.Collections.ArrayList]$AccountNeu = $User.Neu1,$User.Neu2,$User.Neu3,$User.Neu4,$User.Neu5,$User.Neu6,$User.Neu7,$User.Neu8,$User.Neu9,$User.Neu10
      
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                    $AccountNeu.remove("")
                     
                    $groups = Get-ADUser $Account | ForEach-Object { "" ; $_.SamAccountName ; "—" ; Get-ADPrincipalGroupMembership $_ | Select name }
    
                    
    
    
    
                        foreach ($NewUser in $AccountNeu)
                        
              {
     
                                 New-ADUser -name $NewUser  -Path "OU=Benutzer,OU=EIL,OU=Cluster 4,OU=Test,DC=Test,DC=de" 
                                 
                                 # hier kommen weitere Parameter der User hinzu
                                 
                                  <#      
                                
    
                                 -DisplayName $NewUser `
                                 -Company "Test " `
                                 -City "Test" `
                                 -PostalCode "111111" `
                                 -POBox "Test" `
                                 -ScriptPath "Test" `
                                 -StreetAddress "Test 120" `
                                 -OfficePhone "04011055555" `
                                 -State "Hamburg" `
                                 -Country "Deutschland" `
                                 -HomeDrive "y:" `
                                 -HomeDirectory "\\test\user$\$Account" 
                                 -AccountPassword  $password
    
                                
    
                            }
           #>
                                                        }}
    Das mit dem Remove ist noch sehr unglücklich gelöst.






    Mittwoch, 2. März 2016 08:48
  • Nun ein bisschen weiter.... hänge aber an einer neuen Nuss.

    Wenn ich das Array $Groups fülle -

    $groups = Get-ADUser $Account | ForEach-Object { "" ; $_.SamAccountName ; "—" ; Get-ADPrincipalGroupMembership $_ | Select name  }

    erhalte ich bei der Ausgabe $Groups nur die Namen der Gruppen.

    Soweit so gut.

    Gebe ich aber die Ausgabe über write-host $Groups aus, sehe ich vor jeder Gruppe ein @{name=

    und danach ein }.

    Dies führt bei der Vergabe der Berechtigung zu einem Fehler.

    Kann mir hier jemand weiterhelfen?

    Mittwoch, 2. März 2016 13:26
  • Moin,

    du solltest dir wirklich nochmal Powershell Grundlagen anschauen. Gerade, was den Umgang mit Arrays und Schleifen angeht. Es geht alles viel einfacher als du denkst :)

    Dein Script ergibt übrigens keinen Sinn, ich weiß, was du damit bewirken willst, aber die Struktur passt einfach nicht.

    Hier mal mein Vorschlag mit deiner groben Struktur und dem Vorschlag von Christian:

    #csv einlesen, import-csv macht automatisch ein powershell object draus
    $stationen = Import-Csv C:\temp\Namen.csv -Delimiter ';'
    $password = '##########' | ConvertTo-SecureString -AsPlainText -Force
    
    $SrcUser = 'TemplateUser' # von diesem user sollen alle gruppen übertragen werd
    $Groups = (Get-ADUser $SrcUser | ForEach-Object {Get-ADPrincipalGroupMembership $_ | Select-Object name} | Where-Object { $_.Name -ne 'Domain Users' }).Name
    
    # für jedes object in $stationen
    ForEach ($User in $stationen){
        
        $Account = $User.Name
        
        # neuen AD User mit weiteren daten anlegen
        New-ADUser -name $Account -Path 'OU=Benutzer,OU=###,OU=### 4,OU=###,DC=###,DC=##' `
                -DisplayName $NewUser `
                -Company 'Test ' `
                -City 'Test' `
                -PostalCode '111111' `
                -POBox 'Test' `
                -ScriptPath 'Test' `
                -StreetAddress 'Test 120' `
                -OfficePhone '04011055555' `
                -State 'Hamburg' `
                -Country 'Deutschland' `
                -HomeDrive 'y:' `
                -HomeDirectory "\\test\user$\$Account" `
                -AccountPassword  $password
        
        # jede gruppe von dem TemplateUser wird dem neuen User zugeordnet
        foreach ($Group in $Groups){
            Add-ADGroupMember -Identity $Group -Members $Account
        }
    
        Write-Host "$Account wurde erfolgreich angelegt :)" -ForegroundColor Green
    }
    

    Und bitte lösche das Passwort und den Domain Namen aus deinem zweiten Post!


    • Bearbeitet psott Mittwoch, 2. März 2016 15:57
    • Als Antwort markiert Timson_Hamburg Donnerstag, 3. März 2016 07:47
    Mittwoch, 2. März 2016 15:56