SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II
这是对上一篇文章《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的更多相关文章
- SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户
这几个月一直在帮客户改需求,部署.我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导出导入AD中的User.在基于ShareP ...
- SharePoint自动化部署,利用SPSD工具包
目录 怎样使用SPSD 配置Environment XML文件 PowerShell激活Feature 上篇博客讲了利用PowerShell导出.导入AD中的Users.这篇介绍简单介绍一下SPSD ...
- SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection
通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...
- SharePoint自动化系列——通过PowerShell创建SharePoint Lists
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...
- SharePoint自动化系列——通过PowerShell创建SharePoint List Items
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...
- SharePoint自动化系列——通过PowerShell创建SharePoint Web
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...
- SharePoint自动化系列——通过PowerShell在SharePoint中批量做数据
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ PowerShell是基于.NET的一门脚本语言,对于SharePoint一些日常操作支持的很好. ...
- jenkins自动化部署项目3 --设置用户
我直接设置的admin ,jenkins可以新建多个用户,并赋予不同的权限(TODO) 等后续需要严格规范操作人的时候再补充
- 利用PowerShell+Jenkins,实现项目的自动化部署
当项目越来越庞大,部署环境越来越多以后,就会越来越依赖于自动化.比如本人公司的项目,目前有6个web和4个windows service,同时本地有两套环境:开发自测试环境和QA测试环境.每次版本发布 ...
随机推荐
- Fibre Channel address weaknesses
http://searchitchannel.techtarget.com/feature/Fibre-Channel-address-weaknesses Figure 2.1 Five layer ...
- Linux中awk命令的简单用法
一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.
- 010-Go 操作PostgreSQL数据库2
1:sql脚本 create table post( id serial primary key, content text, author ) ) 2:post.go package post im ...
- eclipse 运行简单JAVA程序事例
开发JAVA已经有一段时间了,不过要运行JAVA程序,还是在命令行敲命令,很不方便,很麻烦,突然想到eclipse应该也有这个功能,于是百度了一下,将步骤晒出来,供大家参考. 1.创建JAVA工程 单 ...
- 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 ...
- String的一些方法试探
package countio; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; impo ...
- jqGrid动态增加列,使用在根据条件筛选而出现不同的列的场景
function GetGrid2() { var jqdata = [ { Encode:"20180100", FullName: "BYD", SpecT ...
- 【PMP】三点估算法
通过考虑估算中的不确定性和风险,可以提高持续时间估算的准确性. 最可能时间(tM):基于最可能获得的资源.最可能取得的资源生产率.对资源可用时间的现实预计,资源对其他参与者的可能依赖关系及可能发生的各 ...
- 链接sql数据库并输出csv文件
__author__ = 'chunyang.wu' #作者:SelectDB # -*- coding: utf-8 -*- import MySQLdb import os os.environ[ ...
- 输出前 k 大的数
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小 ...