这是对上一篇文章《SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户》进行补充。开发时,为了测试和演示,我们往往需要经常性的把用户添加到AD中。数据量小的时候,不麻烦,手动也是可以解决了。但是如果数据量很大时,比如帮助客户导入数据,手动操作就显得不那么乐观了。所以需要借助PowerShell来导入人员(.csv)数据。在上一篇文章中,自动化部署也有这个功能,但由于时间紧张,写得并不是很完善。所以趁今天有空,特此完善更新下。
首先,需要将人员以.csv格式导出,详见前一篇文章,导出的格式如下所示:
接着就是利用PowerShell将用户导入AD指定的Container中,以截图展示,如下所示。
当然,你可以使用Get-Help 来获取帮助,如:Get-Help .\CreateUsersFromCsv1.ps1 -Full,将会显示完整的帮助信息,如下所示:
详细代码
<# .Synopsis 将用户(.csv)自动导入至AD中 .Description 利用PowerShell自动将用户导入至AD中,需要在参数配置中指定AdDomain,AdContainer 如果要用默认的凭据,设置UseLoggedInUsersCredentials=True, 否则在参数配置中配置Administrator账号和密码。 .Parameter FullPathOfCsvFile 用户文件所在位置 .Parameter UseLoggedInUsersCredentials 设置是否使用当前已经登录的凭据 .Outputs 用户 Chris 创建成功 用户 Mark 创建成功 用户 Chen 创建成功 用户 Jack 创建成功 用户 Queen 创建成功 用户 King 创建成功 .Example .\CreateUsersFromCsv1.ps1 -FullPathOfCsvFile "C:\Fuck\temp\Users.csv" -UseLoggedInUsersCredentials $false #> param([string] $FullPathOfCsvFile,[bool] $UseLoggedInUsersCredentials) ########################################################参数配置######################################################################################################################################## $AdDomain="Kingdom" #提供 Domain Name.Example=> $AdDomain="Kingdom" $AdUser="Administrator" #当$UseLoggedInUsersCredentials=False时,提供 AD Administrator Name.Example=>$AdUser="Administrator" $AdUserPwd="p@ssw0rd!!!" #当$UseLoggedInUsersCredentials=False时,提供 Administrator的密码.Example=>$AduserPwd="p@ssw0rd!!!" $AdContainer="OU=Staff,DC=Kingdom,DC=com" #存储区上,用作上下文的根容器。所有查询都在此根下执行,并且所有插入都在此容器中执行.Example=>"OU=Staff,DC=Kingdom,DC=com",请确保它是正确并真实存在 ########################################################参数配置######################################################################################################################################### if(!(Get-PSSnapin|Where-Object{$_.Name -eq "Microsoft.SharePoint.PowerShell"})) { Add-PSSnapin "Microsoft.SharePoint.PowerShell" } function Get-ContextPrincipal([string]$ctxDomain,[string]$ctxContainer) { Add-Type -AssemblyName System.DirectoryServices.AccountManagement $ct=[System.DirectoryServices.AccountManagement.ContextType]::Domain $pc=New-Object System.DirectoryServices.AccountManagement.PrincipalContext($ct,$ctxDomain,$ctxContainer) return $pc } function Get-Principal([string]$userName,[string]$userPassword,[string]$ctxDomain,[string] $ctxContainer) { Add-Type -AssemblyName System.DirectoryServices.AccountManagement $ct=[System.DirectoryServices.AccountManagement.ContextType]::Domain $pc=New-Object System.DirectoryServices.AccountManagement.PrincipalContext($ct,$ctxDomain,$ctxContainer,$userName,$userPassword) return $pc } function IsUserExist([System.DirectoryServices.AccountManagement.PrincipalContext] $ctx,[string] $userName) { $curUser=[System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ctx,$userName) return $curUser -ne $null } function IsNullOrEmpty($str) { if ($str) { return $false } else { return $true } } if([System.IO.File]::Exists($FullPathOfCsvFile) -eq $true) { if(IsNullOrEmpty($AdDomain)){ Write-Host Domain Name不能为空 return } if(IsNullOrEmpty($AdContainer)){ Write-Host AD Container不能为空 return } if($UseLoggedInUsersCredentials) { $CurrentContext=Get-ContextPrincipal -ctxDomain $AdDomain -ctxContainer $AdContainer } else { [bool] $DataValid=$true if(IsNullOrEmpty($AdUser)){ Write-Host AD Admin Name不能为空 $DataValid=$false } if(IsNullOrEmpty($AdUserPwd)){ Write-Host AD Admin 密码不能为空 $DataValid=$false } if($DataValid) { $CurrentContext=Get-Principal -userName $AdUser -userPassword $AdUserPwd -ctxDomain $AdDomain -ctxContainer $AdContainer } else { Write-Host 传入参数不能为空,请修改。或者使用已登录的用户的凭据,请设置UserLoggedInUsersCredentials为True。详情请 Get-Help .\CreateUsersFromCsv1.ps1查看 return; } } Import-Csv $FullPathOfCsvFile|ForEach-Object{ if(IsUserExist -ctx $CurrentContext -userName $_.LogIn) { Write-Host 用户 $_.LogIn 已经存在 } else { $newUser=New-Object -TypeName System.DirectoryServices.AccountManagement.UserPrincipal($CurrentContext,$_.LogIn,$_.Password,$_.PasswordNeverExpires) $newUser.UserPrincipalName=$_.LogIn $newUser.GivenName=$_.FirstName $newUser.DisplayName=$_.FirstName+" "+$_.LastName $newUser.Name=$_.FirstName+" "+$_.LastName $newUser.EmailAddress=$_.Email $newUser.Surname=$_.LastName $newUser.PasswordNeverExpires=$_.PasswordNeverExpires $newUser.Save() Write-Host 用户 $_.LogIn 创建成功 } } Write-Host 命令执行结束 } else { Write-Host 无效的文件路径 Write-Host 请入有效的文件路径 }
参考实现
http://www.ashokraja.me/post/Power-Shell-Script-to-Create-Users-in-SharePoint-Dev-Environment.aspx
http://msdn.microsoft.com/zh-cn/library/bb383475(v=vs.110).aspx
http://msdn.microsoft.com/zh-cn/library/bb348316(v=vs.110).aspx