zoukankan      html  css  js  c++  java
  • 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	empUsers.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

  • 相关阅读:
    基于tensorflow的MNIST手写数字识别(二)--入门篇
    怎么自行HTTP的POST包头,需要使用json
    本地数据库(SQL Server)远程连接服务器端服务器
    在 Visual Studio 2010 中创建 ASP.Net Web Service
    VMware加载vmdk文件
    Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏
    FatSecret Platform API
    Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换
    IOS UITableView删除功能
    Android GUI之View测量
  • 原文地址:https://www.cnblogs.com/OceanEyes/p/powershell_create_user_from_csv.html
Copyright © 2011-2022 走看看