2016-04-11 3 views
-2

Я пытаюсь добиться этого с помощью сценария PowerShell и надеюсь, что кто-то может мне помочь в этом.Создание пользователей AD из Excel

У меня есть лист Excel, содержащий столбец 1 (имя), столбец 2 (фамилия), столбец 3 (местоположение OU в AD), столбец 4 (роль - название должности в AD).

FirstName LastName Location(OU) Role(JobTitle) 
Andrew  Smiles  Perth   ISS

В Active Directory У меня есть «неиспользуемый» OU, содержащие пользователи: 510700 например, 510701, 510702, 519960. к ним регистрационному имени и обычно устанавливаются как инвалиды, пока не назначена.

Теперь действие часть:

  1. Читать первенствовать и объединить колонки 1 & Колонка 2, а затем проверить в AD, если этот пользователь существует (проверьте, если совпадения с Display Name не SamAccountName Read (2.1).) против местоположения OU (приведено в колонке 3). Рекурсивный поиск пользователя в других подразделениях по всему ОБЪЯВЛЕНИЮ не требуется.
  2. Если выше в порядке, то выбрать наименьшую доступный номер из «неиспользуемым» OU, например, в данном случае это будет 510700.
    1. Изменение Имя, Фамилия, Должность этого пользователя 510700, но имя входа остается таким же, как 510700 (Пользователь находится в подразделении UnUsed).
    2. Изменение отображаемого имени, как в этом случае, станет «Andrew Smiles (510700)»
    3. Теперь переместите этого пользователя 510700 в подразделение, указанное в столбце 3 (Location OU), и включите учетную запись.
    4. Напишите отчет журнала для всех описанных выше процедур.

--------- Спасибо за внимание я в состоянии решить все сам ----- Вот код упаковывают, если кто-то заинтересован ----- ------

$file = "C:\Temp\Book1.xlsx" 
$sheetName = "Sheet1" 
$objExcel = New-Object -ComObject Excel.Application 
$workbook = $objExcel.Workbooks.Open($file) 
$sheet = $workbook.Worksheets.Item($sheetName) 
$objExcel.Visible=$false 
$rowMax = ($sheet.UsedRange.Rows).count 
$rowFName,$colFName = 1,1 
$rowLName,$colLName = 1,3 
$rowLocation,$colLocation = 1,6 
$rowRole,$colRole = 1,7 
$rowTotal = $rowMax-1 
Write-Output ("Total Number of Records in the EXCEL Sheet are: "+$rowTotal) >> "C:\Temp\Output.txt" 
Import-Module ActiveDirectory 
Get-ADUser -Filter * -SearchBase "OU=Unused Users,OU=MYOU,DC=MYDC,DC=MYDOMAIN,DC=COM,DC=au" -server MYAD -ResultSetSize 10000 | 
Select-Object Name | Sort Name | Out-File C:\Temp\UnUsedUsersList.txt 
$content = Get-Content C:\Temp\UnUsedUsersList.txt 
$content | Foreach {$_.TrimEnd()} | Set-Content C:\Temp\UnUsedUsersList.txt 
[int]$Skip = 3 
for ($i=1; $i -le $rowMax-1; $i++) 
{ 
$FName = $sheet.Cells.Item($rowFName+$i,$colFName).text    #Get first Column i.e First Name 
$LName = $sheet.Cells.Item($rowLName+$i,$colLName).text    #Get 3rd Column i.e Last Name 
$Name = "$FName "+$LName          #Combine the 2 Columns to complete Full Name 
$OULocation = $sheet.Cells.Item($rowLocation+$i,$colLocation).text #Get OU Column of the user 
$Role = $sheet.Cells.Item($rowRole+$i,$colRole).text     #Get Title Column 
$UserID = Get-Content "C:\Temp\UnUsedUsersList.txt" | select -skip $Skip | select -First 1 
Write-Output ("User Account: " +$Name + " in OU: " +$OULocation + " will be assigned to: " +$UserID + " having Title as: " +$Role) >> "C:\Temp\Output.txt" 

$ADObject = Get-ADUser -Filter {(givenname -eq $FName) -and (sn -eq $LName)} -SearchBase "OU=$OULocation,OU=MYOU,DC=MYDC,DC=MYDOMAIN,DC=COM,DC=au" -server MYAD -ResultSetSize 10000 
    if ($ADObject) 
    { 
     Write-Output ($Name + " EXIST in OU: " +$OULocation) >> "C:\Temp\Output.txt" 
    } 
    else 
    { 
     $DisplayName = "$Name ($UserID)" 
     Write-Output ($Name + " DOES NOT exist in OU: " +$OULocation) >> "C:\Temp\Output.txt" 
Get-ADUser $UserID | Set-ADAccountPassword $UserID -reset -newpassword (ConvertTo-SecureString 'welcome01' -AsPlainText -Force) | 
Set-ADUser -Replace @{GivenName="$FName";DisplayName="$DisplayName";SN="$LName";} -Title $Role -PhysicalDeliveryOfficeName $OULocation -ChangePasswordAtLogon $true -Enabled $true | 
Move-ADObject -TargetPath "OU=$OULocation,OU=MYOU,DC=MYDC,DC=MYDOMAIN,DC=COM,DC=au" -server MYAD 
    } 
     $Skip++ 
} 
$objExcel.quit() 
+1

Это не служба написания кода. Попробуйте написать сценарий самостоятельно, вернитесь, если вы застряли в * конкретной * проблеме. – Blorgbeard

+0

Пожалуйста, отредактируйте ваш вопрос, чтобы включить эти данные - комментарии не подходят для размещения кода. – Blorgbeard

ответ

0

--------- Спасибо за внимание я в состоянии решить все сам ----- Вот код упаковывают, если кто-то interested- ----------

$file = "C:\Temp\Book1.xlsx" 
$sheetName = "Sheet1" 
$objExcel = New-Object -ComObject Excel.Application 
$workbook = $objExcel.Workbooks.Open($file) 
$sheet = $workbook.Worksheets.Item($sheetName) 
$objExcel.Visible=$false 
$rowMax = ($sheet.UsedRange.Rows).count 
$rowFName,$colFName = 1,1 
$rowLName,$colLName = 1,3 
$rowLocation,$colLocation = 1,6 
$rowRole,$colRole = 1,7 
$rowTotal = $rowMax-1 
Write-Output ("Total Number of Records in the EXCEL Sheet are: "+$rowTotal) >> "C:\Temp\Output.txt" 
Import-Module ActiveDirectory 
Get-ADUser -Filter * -SearchBase "OU=Unused Users,OU=MYOU,DC=MYDC,DC=MYDOMAIN,DC=COM,DC=au" -server MYAD -ResultSetSize 10000 | 
Select-Object Name | Sort Name | Out-File C:\Temp\UnUsedUsersList.txt 
$content = Get-Content C:\Temp\UnUsedUsersList.txt 
$content | Foreach {$_.TrimEnd()} | Set-Content C:\Temp\UnUsedUsersList.txt 
[int]$Skip = 3 
for ($i=1; $i -le $rowMax-1; $i++) 
{ 
$FName = $sheet.Cells.Item($rowFName+$i,$colFName).text    #Get first Column i.e First Name 
$LName = $sheet.Cells.Item($rowLName+$i,$colLName).text    #Get 3rd Column i.e Last Name 
$Name = "$FName "+$LName          #Combine the 2 Columns to complete Full Name 
$OULocation = $sheet.Cells.Item($rowLocation+$i,$colLocation).text #Get OU Column of the user 
$Role = $sheet.Cells.Item($rowRole+$i,$colRole).text     #Get Title Column 
$UserID = Get-Content "C:\Temp\UnUsedUsersList.txt" | select -skip $Skip | select -First 1 
Write-Output ("User Account: " +$Name + " in OU: " +$OULocation + " will be assigned to: " +$UserID + " having Title as: " +$Role) >> "C:\Temp\Output.txt" 

$ADObject = Get-ADUser -Filter {(givenname -eq $FName) -and (sn -eq $LName)} -SearchBase "OU=$OULocation,OU=MYOU,DC=MYDC,DC=MYDOMAIN,DC=COM,DC=au" -server MYAD -ResultSetSize 10000 
    if ($ADObject) 
    { 
     Write-Output ($Name + " EXIST in OU: " +$OULocation) >> "C:\Temp\Output.txt" 
    } 
    else 
    { 
     $DisplayName = "$Name ($UserID)" 
     Write-Output ($Name + " DOES NOT exist in OU: " +$OULocation) >> "C:\Temp\Output.txt" 
Get-ADUser $UserID | Set-ADAccountPassword $UserID -reset -newpassword (ConvertTo-SecureString 'welcome01' -AsPlainText -Force) | 
Set-ADUser -Replace @{GivenName="$FName";DisplayName="$DisplayName";SN="$LName";} -Title $Role -PhysicalDeliveryOfficeName $OULocation -ChangePasswordAtLogon $true -Enabled $true | 
Move-ADObject -TargetPath "OU=$OULocation,OU=MYOU,DC=MYDC,DC=MYDOMAIN,DC=COM,DC=au" -server MYAD 
    } 
     $Skip++ 
} 
$objExcel.quit() 
Смежные вопросы