2016-11-11 2 views
0

Ich weiß, ich kann einen AD-Benutzer mit Powershell verschieben. Was ich erreichen möchte, ist, eine Reihe von Benutzern basierend auf ihrer Beschreibung zu bewegen. Ich habe eine CSV-Datei und in diesem CSV ist sie ein Jahr der Graduierung Spalte. Ich möchte, dass alle Benutzer, die ein YOG von 2016 bis 2022 haben, in die High School OU gezogen sind.Move AD Benutzer mit Powershell

Ich habe noch nicht versucht, den Code zu schreiben. Ich war in der Powershell erfolgreich, Benutzerkonten auf der Grundlage von dept, aber nicht Beschreibung zu greifen. Hier ist ein paar gleichen Daten

"ID","FNAME","LNAME","BDATE","GRD","SCHID" 
"111111","TEst","student1","19980601","2016","1480" 
"222222","test","Student2","19980522","2017","1480" 
"333333","test","Student3","19970813","2025","1479" 

Ich habe voraus gegangen und hat die schoolcode auf die CSV-Datei. Ich denke, das wird viel einfacher sein, die Schüler auf der Grundlage dieser Datei zu der richtigen Ou zu bewegen. 1480 ist elem, 1479 hs. Auch hier ist der Code, den ich verwende, um die AD-Konten zu erstellen.

# Import active directory module for running AD cmdlets 
Import-Module activedirectory 

#Store the data from ADUsers.csv in the $ADUsers variable 
$ADUsers = Import-csv userimport.csv 
#Store report in log file in the $log variable 
$log = "log.txt" 

#Loop through each row containing user details in the CSV file 
foreach ($User in $ADUsers) 
{ 
#Read user data from each field in each row and assign the data to a variable as below 

$Username = $User.ID 
$Password = $User.BDATE 
$Firstname = $User.FNAME 
$Lastname = $User.LNAME 
$Department = $User.GRD 
$Company = $User.SCHID #This field refers to the OU the user account is to be moved to 

#Check to see if the user already exists in AD 
if (Get-ADUser -F {SamAccountName -eq $Username}) 
{ 
    #If user does exist, give a warning 
    Write-Warning "A user account with username $Username already exist in Active Directory." 
} 
else 
{ 
    #User does not exist then proceed to create the new user account 

    "Processing started (on " + $date + "): " | Out-File $log -append 
    "--------------------------------------------" | Out-File $log -append 

    #Account will be created in the OU provided by the $OU variable read from the CSV file 
    New-ADUser ` 
     -SamAccountName $Username ` 
     -UserPrincipalName "[email protected]" ` 
     -Name "$Firstname $Lastname" ` 
     -GivenName $Firstname ` 
     -Department "$Department" ` 
     -Company "$Company" ` 
     -EmailAddress "[email protected]" ` 
     -Surname $Lastname ` 
     -Enabled $True ` 
     -Scriptpath "login.vbs" ` 
     -DisplayName "$Firstname $Lastname" ` 
     -Path "ou=users,ou=hs,dc=clasd,dc=net" ` 
     -AccountPassword (convertto-securestring $Password -AsPlainText -Force) ` 
     -ChangePasswordAtLogon $true 

# Add User to Groups 
#Add-ADPrincipalGroupMembership -Identity $Username -MemberOf "Elem","Elem Students" 
    Start-Sleep 3 

# Move Users to appropiate OU based on School Code 

    $usr = import-csv userimport.csv 

    foreach ($User in $usr) { 
    if ($user.grd -in 2016){ 
     Get-ADUser $User.ID | Move-ADObject -TargetPath 'OU=users,ou=hs,dc=clasd,dc=net' 
    } 
    } 
} 
} 
+1

Hallo, können Sie bitte etwas Code zur Verfügung stellen, den Sie versucht haben zu schreiben und eine Beispiel-CSV-Datei? – sodawillow

+0

Ich mache mir keine Sorgen um Studenten mit dem gleichen Namen. Wenn sie den gleichen Namen haben, schaue ich mir einfach ihre ID-Nummer an, die wir für ihr Login-Konto verwenden. Alle Benutzernamen sind ihre ID-Nummer. Ich möchte nur die Schüler bewegen, wie ich sie in ihre richtige Organisationseinheit erstellen. –

+0

Welches Format haben die AD-Benutzernamen? Wie entsprechen sie den Daten in Ihrer CSV? Ist YOG bereits in einem AD-Attribut gespeichert? –

Antwort

0

Da ihr AD Benutzername ist einzigartig und bereits in der CSV enthalten ist, es ist einfach ein Fall zu überprüfen, ob das GRD-Feld im Bereich von 2016 bis 2022 und dann das Konto Bewegen des ID-Feld mit:

$filepath = "C:\path\to\data.csv" 

$csv = Import-CSV $filepath 
foreach ($user in $csv) { 
    if ($user.GRD -in 2016..2022) { 
     Get-ADUser $user.ID | Move-ADObject -TargetPath 'OU=High School,DC=domain,Dc=com' 
    } 
} 

BEARBEITEN: Haben Sie Ihren Kommentar nicht gesehen, dass YOG das Feld Beschreibung ist, und ich habe stattdessen GRD verwendet, lassen Sie mich wissen, wenn das nicht stimmt?


EDIT2: Meine Antwort oben laufen würde nach jedem Konto nicht während Ihres bestehenden Skripts erstellt wird, ist es effizienter, das Konto in der richtigen OU bei der Schöpfung zu setzen wie so:

foreach ($User in $ADUsers) 
{ 
    #Read user data from each field in each row and assign the data to a variable as below 

    $Username = $User.ID 
    $Password = $User.BDATE 
    $Firstname = $User.FNAME 
    $Lastname = $User.LNAME 
    $Department = $User.GRD 
    $Company = $User.SCHID #This field refers to the OU the user account is to be moved to 

    # Choose OU 
    Switch ($Department) 
    { 
     "2016" {$OU = 'OU=users,ou=hs,dc=clasd,dc=net'} 
     "2017" {$OU = 'OU=2017,OU=users,ou=hs,dc=clasd,dc=net'} 
    } 

    #Check to see if the user already exists in AD 
    if (Get-ADUser -F {SamAccountName -eq $Username}) 
    { 
     #If user does exist, give a warning 
     Write-Warning "A user account with username $Username already exist in Active Directory." 
    } 
    else 
    { 
     #User does not exist then proceed to create the new user account 
     "Processing started (on " + $date + "): " | Out-File $log -append 
     "--------------------------------------------" | Out-File $log -append 

     #Account will be created in the OU provided by the $OU variable read from the CSV file 
     New-ADUser ` 
      -SamAccountName $Username ` 
      -UserPrincipalName "[email protected]" ` 
      -Name "$Firstname $Lastname" ` 
      -GivenName $Firstname ` 
      -Department "$Department" ` 
      -Company "$Company" ` 
      -EmailAddress "[email protected]" ` 
      -Surname $Lastname ` 
      -Enabled $True ` 
      -Scriptpath "login.vbs" ` 
      -DisplayName "$Firstname $Lastname" ` 
      -Path $OU ` 
      -AccountPassword (convertto-securestring $Password -AsPlainText -Force) ` 
      -ChangePasswordAtLogon $true 

     # Add User to Groups 
     #Add-ADPrincipalGroupMembership -Identity $Username -MemberOf "Elem","Elem Students" 
     Start-Sleep 3 
    } 
} 
+0

_Ich möchte nur die Schüler bewegen, wie ich sie in ihre richtige OU_ erstellen Ich denke, die Benutzerkonten wurden noch nicht erstellt. – sodawillow

+0

Schade, dass wir nicht den Code haben, der zum Erstellen der Accounts verwendet wird. Es ist viel einfacher, Ihnen zu helfen, wenn wir etwas haben. –

+0

+ James C Ihr Code scheint nicht zu funktionieren. Es bewegt die Benutzer nicht. Ich änderte es, um user.schid anzuschauen, und bewegte sich basierend auf diesem Wert. Ich habe den Originalpost aktualisiert, damit Sie mein create user script sehen können. –

Verwandte Themen