【问题标题】:Create AD Users from Excel从 Excel 创建 AD 用户
【发布时间】:2016-08-01 00:00:10
【问题描述】:

我正在尝试使用 PowerShell 脚本来实现这一点,希望有人可以帮助我。

我有一个 Excel 表,其中包含第 1 列(名字)、第 2 列(姓氏)、第 3 列(AD 中的位置是 OU)、第 4 列(角色是 AD 中的职位)。

名字姓氏位置(OU)角色(职位)
安德鲁微笑珀斯国际空间站

在 Active Directory 中,我有一个“未使用”的 OU,其中包含用户,例如:510700、510701、510702 到 519960。这些是登录名,通常在分配之前设置为禁用。

现在是动作部分:

  1. 读取 excel 并合并第 1 列和第 2 列,然后在 AD 中检查此用户是否存在(检查是否与显示名称匹配而不是 SamAccountName。读取 (2.1))针对位置 OU(在第 3 列中提供)。 不需要在整个 AD 中递归搜索其他 OU 中的用户。
  2. 如果上述情况正常,则从“未使用”OU 中选取最小的可用数字,例如在本例中为 510700。
    1. 更改此用户 510700 的名字、姓氏、职务,但登录名保持与 510700 相同(用户在“未使用”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()

【问题讨论】:

  • 这不是代码编写服务。尝试自己编写脚本,如果遇到特定问题,请返回。
  • edit您的问题包含这些详细信息 - cmets 不适合发布代码。

标签: excel powershell active-directory


【解决方案1】:

---------感谢您的关注,我可以自己解决所有问题-----如果有人感兴趣,这是代码------------

$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()

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2016-07-13
    相关资源
    最近更新 更多