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

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. C#.NET常见问题(FAQ)-构造器constructor有什么用

    所谓的构造器constructor,就是声明类的时候定义一个public 类名的方法,这个方法不需要传递任何数据,这样的话在声明任何类的实例的时候都会无条件执行里面的方法   析构器只在程序销毁的时候 ...

  2. iOS webservice SOAP 请求

    1. Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, 无论它们所使用的语 ...

  3. 微信小程序 - 下拉刷新(非组件)

    详情见示例:refresh

  4. JAVA设计模式——第 2 章 代理模式【Proxy Pattern】(转)

    什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. ...

  5. hadoop三个配置文件的参数含义说明(转)

    来自:http://blog.csdn.net/yangjl38/article/details/7583374 1       获取默认配置 配置hadoop,主要是配置core-site.xml, ...

  6. 算法笔记_201:第三届蓝桥杯软件类决赛真题(Java本科)

    目录 1 数量周期 2 提取子串 3 源码变换 4 古代赌局 5 火柴游戏   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 数量周期 [结果填空](满分9分) 复杂现象背后的推动力,可能是极其简 ...

  7. ssh出错 sign_and_send_pubkey: signing failed: agent refused operation

    在服务器添加完公钥之后,ssh服务器然后报了这个错误 sign_and_send_pubkey: signing failed: agent refused operation 然后执行了以下命令才好 ...

  8. error: expected unqualified-id extern "C" {

    通常为include该文件的头文件内类的声明处未加“:”

  9. Linux(centos)新建,删除,移动,重命名文件夹和文件的命令

    1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir /home/test 2.新建文本 在home下新建一个test.sh脚本 vi / ...

  10. cocos2d-js 3.0 RC0 监听返回键、菜单键、进入后台(home键)、恢复显示等事件

    cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased: function(keyCode, eve ...