这是对上一篇文章《SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户》进行补充。开发时,为了测试和演示,我们往往需要经常性的把用户添加到AD中。数据量小的时候,不麻烦,手动也是可以解决了。但是如果数据量很大时,比如帮助客户导入数据,手动操作就显得不那么乐观了。所以需要借助PowerShell来导入人员(.csv)数据。在上一篇文章中,自动化部署也有这个功能,但由于时间紧张,写得并不是很完善。所以趁今天有空,特此完善更新下。

首先,需要将人员以.csv格式导出,详见前一篇文章,导出的格式如下所示:

接着就是利用PowerShell将用户导入AD指定的Container中,以截图展示,如下所示。

当然,你可以使用Get-Help 来获取帮助,如:Get-Help .\CreateUsersFromCsv1.ps1 -Full,将会显示完整的帮助信息,如下所示:

详细代码

  1. <#
  2. .Synopsis
  3. 将用户(.csv)自动导入至AD中
  4. .Description
  5. 利用PowerShell自动将用户导入至AD中,需要在参数配置中指定AdDomain,AdContainer
  6. 如果要用默认的凭据,设置UseLoggedInUsersCredentials=True,
  7. 否则在参数配置中配置Administrator账号和密码。
  8. .Parameter FullPathOfCsvFile
  9. 用户文件所在位置
  10. .Parameter UseLoggedInUsersCredentials
  11. 设置是否使用当前已经登录的凭据
  12. .Outputs
  13. 用户 Chris 创建成功
  14. 用户 Mark 创建成功
  15. 用户 Chen 创建成功
  16. 用户 Jack 创建成功
  17. 用户 Queen 创建成功
  18. 用户 King 创建成功
  19. .Example
  20. .\CreateUsersFromCsv1.ps1 -FullPathOfCsvFile "C:\Fuck\temp\Users.csv" -UseLoggedInUsersCredentials $false
  21.  
  22. #>
  23. param([string] $FullPathOfCsvFile,[bool] $UseLoggedInUsersCredentials)
  24.  
  25. ########################################################参数配置########################################################################################################################################
  26. $AdDomain="Kingdom" #提供 Domain Name.Example=> $AdDomain="Kingdom"
  27. $AdUser="Administrator" #当$UseLoggedInUsersCredentials=False时,提供 AD Administrator Name.Example=>$AdUser="Administrator"
  28. $AdUserPwd="p@ssw0rd!!!" #当$UseLoggedInUsersCredentials=False时,提供 Administrator的密码.Example=>$AduserPwd="p@ssw0rd!!!"
  29. $AdContainer="OU=Staff,DC=Kingdom,DC=com" #存储区上,用作上下文的根容器。所有查询都在此根下执行,并且所有插入都在此容器中执行.Example=>"OU=Staff,DC=Kingdom,DC=com",请确保它是正确并真实存在
  30. ########################################################参数配置#########################################################################################################################################
  31.  
  32. if(!(Get-PSSnapin|Where-Object{$_.Name -eq "Microsoft.SharePoint.PowerShell"}))
  33. {
  34. Add-PSSnapin "Microsoft.SharePoint.PowerShell"
  35. }
  36.  
  37. function Get-ContextPrincipal([string]$ctxDomain,[string]$ctxContainer)
  38. {
  39. Add-Type -AssemblyName System.DirectoryServices.AccountManagement
  40. $ct=[System.DirectoryServices.AccountManagement.ContextType]::Domain
  41. $pc=New-Object System.DirectoryServices.AccountManagement.PrincipalContext($ct,$ctxDomain,$ctxContainer)
  42. return $pc
  43. }
  44.  
  45. function Get-Principal([string]$userName,[string]$userPassword,[string]$ctxDomain,[string] $ctxContainer)
  46. {
  47. Add-Type -AssemblyName System.DirectoryServices.AccountManagement
  48. $ct=[System.DirectoryServices.AccountManagement.ContextType]::Domain
  49. $pc=New-Object System.DirectoryServices.AccountManagement.PrincipalContext($ct,$ctxDomain,$ctxContainer,$userName,$userPassword)
  50. return $pc
  51. }
  52.  
  53. function IsUserExist([System.DirectoryServices.AccountManagement.PrincipalContext] $ctx,[string] $userName)
  54. {
  55. $curUser=[System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ctx,$userName)
  56. return $curUser -ne $null
  57. }
  58.  
  59. function IsNullOrEmpty($str)
  60. {
  61. if ($str)
  62. {
  63. return $false
  64. }
  65. else
  66. {
  67. return $true
  68. }
  69. }
  70.  
  71. if([System.IO.File]::Exists($FullPathOfCsvFile) -eq $true)
  72. {
  73. if(IsNullOrEmpty($AdDomain)){
  74. Write-Host Domain Name不能为空
  75. return
  76. }
  77. if(IsNullOrEmpty($AdContainer)){
  78. Write-Host AD Container不能为空
  79. return
  80. }
  81. if($UseLoggedInUsersCredentials)
  82. {
  83. $CurrentContext=Get-ContextPrincipal -ctxDomain $AdDomain -ctxContainer $AdContainer
  84. }
  85. else
  86. {
  87. [bool] $DataValid=$true
  88. if(IsNullOrEmpty($AdUser)){
  89. Write-Host AD Admin Name不能为空
  90. $DataValid=$false
  91. }
  92. if(IsNullOrEmpty($AdUserPwd)){
  93. Write-Host AD Admin 密码不能为空
  94. $DataValid=$false
  95. }
  96.  
  97. if($DataValid)
  98. {
  99. $CurrentContext=Get-Principal -userName $AdUser -userPassword $AdUserPwd -ctxDomain $AdDomain -ctxContainer $AdContainer
  100. }
  101. else
  102. {
  103. Write-Host 传入参数不能为空,请修改。或者使用已登录的用户的凭据,请设置UserLoggedInUsersCredentials为True。详情请 Get-Help .\CreateUsersFromCsv1.ps1查看
  104. return;
  105. }
  106. }
  107.  
  108. Import-Csv $FullPathOfCsvFile|ForEach-Object{
  109. if(IsUserExist -ctx $CurrentContext -userName $_.LogIn)
  110. {
  111. Write-Host 用户 $_.LogIn 已经存在
  112. }
  113. else
  114. {
  115. $newUser=New-Object -TypeName System.DirectoryServices.AccountManagement.UserPrincipal($CurrentContext,$_.LogIn,$_.Password,$_.PasswordNeverExpires)
  116. $newUser.UserPrincipalName=$_.LogIn
  117. $newUser.GivenName=$_.FirstName
  118. $newUser.DisplayName=$_.FirstName+" "+$_.LastName
  119. $newUser.Name=$_.FirstName+" "+$_.LastName
  120. $newUser.EmailAddress=$_.Email
  121. $newUser.Surname=$_.LastName
  122. $newUser.PasswordNeverExpires=$_.PasswordNeverExpires
  123. $newUser.Save()
  124. Write-Host 用户 $_.LogIn 创建成功
  125. }
  126. }
  127. Write-Host 命令执行结束
  128. }
  129. else
  130. {
  131. Write-Host 无效的文件路径
  132. Write-Host 请入有效的文件路径
  133. }

参考实现

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

SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II的更多相关文章

  1. SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户

    这几个月一直在帮客户改需求,部署.我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导出导入AD中的User.在基于ShareP ...

  2. SharePoint自动化部署,利用SPSD工具包

    目录 怎样使用SPSD 配置Environment XML文件 PowerShell激活Feature  上篇博客讲了利用PowerShell导出.导入AD中的Users.这篇介绍简单介绍一下SPSD ...

  3. SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection

    通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...

  4. SharePoint自动化系列——通过PowerShell创建SharePoint Lists

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...

  5. SharePoint自动化系列——通过PowerShell创建SharePoint List Items

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...

  6. SharePoint自动化系列——通过PowerShell创建SharePoint Web

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...

  7. SharePoint自动化系列——通过PowerShell在SharePoint中批量做数据

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ PowerShell是基于.NET的一门脚本语言,对于SharePoint一些日常操作支持的很好. ...

  8. jenkins自动化部署项目3 --设置用户

    我直接设置的admin ,jenkins可以新建多个用户,并赋予不同的权限(TODO) 等后续需要严格规范操作人的时候再补充

  9. 利用PowerShell+Jenkins,实现项目的自动化部署

    当项目越来越庞大,部署环境越来越多以后,就会越来越依赖于自动化.比如本人公司的项目,目前有6个web和4个windows service,同时本地有两套环境:开发自测试环境和QA测试环境.每次版本发布 ...

随机推荐

  1. Fibre Channel address weaknesses

    http://searchitchannel.techtarget.com/feature/Fibre-Channel-address-weaknesses Figure 2.1 Five layer ...

  2. Linux中awk命令的简单用法

    一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.

  3. 010-Go 操作PostgreSQL数据库2

    1:sql脚本 create table post( id serial primary key, content text, author ) ) 2:post.go package post im ...

  4. eclipse 运行简单JAVA程序事例

    开发JAVA已经有一段时间了,不过要运行JAVA程序,还是在命令行敲命令,很不方便,很麻烦,突然想到eclipse应该也有这个功能,于是百度了一下,将步骤晒出来,供大家参考. 1.创建JAVA工程 单 ...

  5. Codeforces Round #310 (Div. 1) B. Case of Fugitive(set二分)

    B. Case of Fugitive time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  6. String的一些方法试探

    package countio; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; impo ...

  7. jqGrid动态增加列,使用在根据条件筛选而出现不同的列的场景

    function GetGrid2() { var jqdata = [ { Encode:"20180100", FullName: "BYD", SpecT ...

  8. 【PMP】三点估算法

    通过考虑估算中的不确定性和风险,可以提高持续时间估算的准确性. 最可能时间(tM):基于最可能获得的资源.最可能取得的资源生产率.对资源可用时间的现实预计,资源对其他参与者的可能依赖关系及可能发生的各 ...

  9. 链接sql数据库并输出csv文件

    __author__ = 'chunyang.wu' #作者:SelectDB # -*- coding: utf-8 -*- import MySQLdb import os os.environ[ ...

  10. 输出前 k 大的数

    总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小 ...