前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II

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

作者头像
用户1161731
发布2018-01-11 13:27:51
1.4K0
发布2018-01-11 13:27:51
举报
文章被收录于专栏:木宛城主木宛城主

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

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

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

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

详细代码

代码语言:javascript
复制
<#
    .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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-01-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 详细代码
  •  参考实现
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档