2016-04-11 22 views
-2

私はこれをPowerShellスクリプトで実現しようとしています。ExcelからADユーザーを作成する

私は、列1(名)、列2(名字)、列3(場所はADにOU)、列4(役割はADの役職)を含むExcelシートを持っています。 Active Directoryに

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

私は、ユーザー例えば含む「未使用」OU持っている:510700、510701、510702、これらを519960.するための名前をログインされており、割り当てられたまで、通常は無効として設定されています。

今すぐアクションパート:

  1. Excelを読むとColumn 1 &列2を組み合わせ、このユーザーが存在するならば、表示名ではないSAMアカウントと一致するか確認してください(ADにチェック読む(2.1)。 )を場所OU(第3欄に記載)と照合する。 AD全体の他のOUでユーザーを再帰的に検索する必要はありません。
  2. 上記は、このユーザー510700の名、姓、役職510700.
    1. 変更になります。この場合、例えば、「未使用」OUから利用可能な最小数を拾うその後、OKであればしかし、ログイン名は5107​​00と同じままです(ユーザーは「未使用」のOUにあります)。
    2. この場合の表示名を変更する "Andrew Smiles(510700)"
    3. このユーザー510700を列3(場所OU)で提供されている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() 
関連する問題