文档章节

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

 木宛城主
发布于 2015/03/02 19:41
字数 846
阅读 9
收藏 1

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

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
ansible管理windows实践

ansible管理windows实践 一、前言 近期打算搞搞自动部署,因为是windows服务器,一些工具和系统支持都不是太好。最后发现ansible比较火,最重要的是他支持windows。本文主要就ansible 在win...

holy2009
06/28
0
0
通过机器学习进行恶意PowerShell检测

        前言   多年来,网络安全供应商和研究人员一直在分析PowerShell是如何被网络攻击者用来安装后门程序、执行恶意代码,以及如何在企业内网中实现攻击目的的。目前的安全关系不...

嘶吼RoarTalk
07/15
0
0
Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器

作者:陈计节 个人博客:https://blog.jijiechen.com/post/powershell-remoting/ 在 Linux/Unix 世界里 SSH 是个好东西,SSH 是 Secure Shell 的缩写,用它可以很容易连接到指定的服务器,并...

.NET西安社区
07/25
0
0
PowerShell的内网渗透之旅(一)

  内网渗透一直以来都是一个热门话题,试想在一个大型的内网环境下,当我们拿到了内网windows机器后,我们该如何通过他们去获取更多的所需资源,这就需要我们进行内网渗透了。然而在内网渗...

FreeBuf
05/14
0
0
PowerShell管道和括号——PowerShell从零开始系列之六

本期主要介绍多个命令之间的衔接——管道 PowerShell通过管道把命令互相连接起来,通过传输第一个命令,将其作为第二个命令Cmdlet的输入,使其联合运行 应用管道符可以极大的提高效率,原本需...

Liuzw_37
05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
28分钟前
1
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
51分钟前
1
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
53分钟前
3
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
2
0
20180921 su与sudo命令、限制root用户通过ssh远程登录

su 命令 用户切换。 su # 切换到root用户su username # 切换到username用户# su 后面加-时,会初始化当前用户的各种环境su - username # 指定用户执行某些命令 su - -c "touch /tm...

野雪球
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部