2016-11-11 4 views
0

powershell을 사용하여 AD 사용자를 이동할 수 있다는 것을 알고 있습니다. 내가 성취하고자하는 것은 그들의 묘사를 토대로 많은 사람들을 움직이는 것이다. 나는 csv 파일을 가지고 있고 그 csv에서 졸업 칼럼의 해입니다. 2016 년부터 2022 년까지 YOG가있는 모든 사용자가 고등학교 OU로 이전되기를 바랍니다.powershell을 사용하여 AD 사용자 이동

아직 코드를 작성하지 않았습니다. 필자는 부서에 기반한 설명을 기반으로 사용자 계정을 포착하는 데 성공했습니다. 다음은 동일한 데이터입니다.

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

나는 csv 파일에 학교 코드를 추가했습니다. 이 파일을 기반으로 정확한 ou로 학생들을 이동시키는 것이 훨씬 쉬울 것이라고 생각합니다. 1480은 elem, 1479 hs입니다. 또한 여기에 광고 계정을 만드는 데 사용하는 코드입니다.

다음 GRD 필드가 ID 필드를 사용하여 계정을 이동 한 후 범위 2016에서 2022 사이에 있고 경우
# 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

안녕하세요, 작성하려고 시도한 코드와 샘플 CSV 파일을 제공해주십시오. – sodawillow

+0

나는 같은 이름의 학생들을 걱정하지 않는다. 그들이 동일한 이름을 가지고 있다면 나는 그들의 로그인 계정에 사용하는 ID 번호를 보게됩니다. 모든 사용자 이름은 ID 번호입니다. 나는 학생들을 올바른 OU로 만들면서 학생들을 옮기고 싶습니다. –

+0

광고 사용자 이름은 어떤 형식입니까? CSV의 데이터와 어떻게 대응합니까? YOG가 이미 AD 속성에 저장되어 있습니까? –

답변

0

자신의 AD 사용자 이름은 독특하고 이미 CSV에 포함이기 때문에

, 그것은 단순히 확인하는 경우입니다
$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' 
    } 
} 

EDIT : YOG가 설명 입력란입니다. GRD를 대신 사용했는데 정확하지 않은 경우 알려주세요.


EDIT2 : 모든 계정이 기존 스크립트 동안하지 만든 후 내 대답은 위의 실행 것, 그것과 같이 작성시 올바른 OU에 계정을 넣어 더 효율적입니다 :

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

_ 학생들을 올바른 OU로 생성 할 때 학생을 옮기고 싶습니다. 사용자 계정이 아직 작성되지 않았다고 생각합니다. – sodawillow

+0

부끄러운 우리는 계정을 만드는 데 사용 된 코드가 없으므로 계속 진행할 때 도움을주는 것이 훨씬 쉽습니다. –

+0

+ James C 코드가 작동하지 않는 것 같습니다. 사용자를 이동 시키지는 않습니다. user.schid를 보도록 수정하고 그 값을 기반으로 이동했습니다. 사용자 작성 스크립트를 볼 수 있도록 원본 게시물을 업데이트했습니다. –

관련 문제