这是对上一篇文章《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=$trueif(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

SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II相关推荐

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

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

  2. PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取

    由于项目需要,要把项目组成员中每天的工作整合到一起.每天手动部署很是费时费力.于是有了是否能利用PowerShell进行自动化部署的想法,正好也有机会学习一下PowerShell. 先交代一下项目背景 ...

  3. 利用CloudFormation自动化部署AWS GWLB集成FortiGate防火墙

    AWS VPC 流量集中检测系列--(4)利用CloudFormation自动化部署AWS GWLB集成FortiGate防火墙 B站视频:​ https://www.bilibili.com/vid ...

  4. 利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster

    简介 Chef Chef提供了一套自动化安装和配置软件的工具.它允许开发者以模块化的方式(cookbook)来定义软件的安装和配置流程(recipe),以及流程中的可定制参数(attribute).当 ...

  5. 利用PowerShell进行数据库部署冒烟测试

    PowerShell是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能,也可以调用Azure.在Win10里面附带PowerShell V5,Po ...

  6. Java利用jenkins做项目的自动化部署

    本地的jekins密码 2722e8ea873b4cf08884c22dff732bab 这篇文章主要介绍了Java利用jenkins做项目的自动化部署,小编觉得挺不错的,现在分享给大家,也给大家做个 ...

  7. 利用CloudFormation自动化部署AWS GWLB集成Palo Alto防火墙

    AWS VPC 流量集中检测系列--(2)利用CloudFormation自动化部署AWS GWLB集成Palo Alto防火墙 B站视频:https://www.bilibili.com/video ...

  8. 利用Powershell自动部署asp.net mvc网站项目 (一)

    这一篇中我们会写一些关于自动化部署的代码.我们会使用 Powershell 书写这类代码. 你将发现这篇文章中涉及的东西非常具体,有的要求甚至相当苛刻且可能不具有通用性.这是因为部署从来都是跟环境打交 ...

  9. powershell查看mysql密码_使用Windows PowerShell从数据库导入用户

    使用Windows PowerShell从数据库导入用户 虽然在70-640考试中并不涉及使用Windows PowerShell导入数据库的方法,不过学习这样的做法可为以后自动创建用户的工作产生巨大 ...

最新文章

  1. 53个Python库,你必须要试试
  2. 面试官:为什么 SpringBoot 的 jar 可以直接运行?
  3. 统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现
  4. python3环境下使用OpenGL和GLFW两种库进行编码
  5. python 字符串比较忽略大小写的方法_python实现忽略大小写对字符串列表排序的方法...
  6. mysql 换服务器_更换MYSQL后数据库连接问题
  7. Maven实战(四)——基于Maven的持续集成实践
  8. celery 实例进阶
  9. hive中的lateral view的解析
  10. 用python完成图形输出设备_用 Python 在多个输出设备上播放多个声音文件
  11. 如何更高效的学习SLAM?
  12. RAID磁盘阵列介绍
  13. Python-实现九宫格
  14. 推荐一款很好用的图床工具picgo
  15. 转载:声优 - 野上ゆかな
  16. SAP商超订单统一管理系统
  17. Python基础——局域网攻防(ARP原理及应用)
  18. 警惕 “格机软件” 格式化手机全字库..不要轻易给不明觉厉的软件给root权限
  19. 智力问答选择题_智力问答题库(全)
  20. 小程序FMP优化实录,已拿offer附真题解析

热门文章

  1. 简要介绍BASE64、MD5、SHA、HMAC几种方法。
  2. mapreduce引用第三方jar
  3. (转)open gl 实例 demo ---vs2005 环境
  4. daily scrum 11.27
  5. 判断链表是否有环,并找出入环点☆
  6. Struts2中Action的属性接收参数
  7. Linux文件操作命令(二)
  8. java 图片分段上传_java实现分段读取文件并通过HTTP上传的方法
  9. Git中上传忽略文件的方法 .gitignore
  10. Silverlight4中右键菜单实现-附源码下载