Powershell 修改Office365和AD账户

这段时间需要大量地修改AD用户的一些属性,例如邮件,UPN,登录名等等,以便和Office365的登录账号保持一致。写了个简单脚本进行批量修改。

#Import AD Module
Import-Module ActiveDirectory
#Import Office 365 Module
$Sessions=Get-PSSession
if ($Sessions.ComputerName -like "outlook.office365.com"){
    write-host "Detecting current Office365 session, skip.." -ForegroundColor Cyan
}
else{

    write-host "Starting new Office365 session" -ForegroundColor Cyan
    $UserCredential = Get-Credential
    Connect-MsolService -Credential $UserCredential
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
    Import-PSSession $Session
}
#Get Primary SMTP Address
function Get-PrimarySMTP(){
    [CmdletBinding()]

    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string[]]
        $users
    )
    $pp=$null
    [email protected]{‘name‘=$null;‘primarysmtp‘=$null}
    $obj=New-Object -TypeName psobject -Property $pp

    [email protected]()
    foreach($user in $users){
    $info=get-aduser -Filter {name -eq $user} -Properties proxyaddresses
    $primarySMTPAddress = ""

    foreach ($address in $info.proxyAddresses)
    {
        if (($address.Length -gt 5) -and ($address.SubString(0,5) -ceq ‘SMTP:‘) )
        {
            $primarySMTPAddress = $address.SubString(5)

            break
        }
    }
    $objtemp=$obj | select *
    $objtemp.name=$info.Name
    $objtemp.primarysmtp=$primarySMTPAddress
    $result+=$objtemp
    }
    return $result
}
#Get AD User Informtion
#$ADUsers = Get-ADUser -SearchBase "ou=mango,ou=ddb_group,ou=melbourne,dc=omnicom,dc=com,dc=au" -Properties proxyaddresses, emailaddress, displayname -Filter *
Write-Host " "
$uName=Read-Host "Please input User AD name"
$ADUsers=get-aduser $uName -Properties proxyaddresses, emailaddress, displayname
#Change SamAccountName and UPN
foreach ($ADUser in $ADUsers) {
    $ADUser.Name
$GivenName = $ADUser.GivenName
$SurName = $ADUser.Surname
if (($GivenName -ne $null) -or ($SurName -ne $null))
{
$newSAM = $GivenName.ToLower() + ‘.‘+$SurName.ToLower()
        $oldUPN=$ADUser.UserPrincipalName
        $domainName= $oldUPN.Split(‘@‘)[1]
$newUPN = $newSAM + ‘@‘+$domainName

        write-host "Updating ADUPN: $oldupn -> $newUPN" -ForegroundColor Cyan

        #Change AD UPN and SamAccount
Set-ADUser $ADUser -SamAccountName $newSAM -UserPrincipalName $newUPN 

        #Change AD email
        $oldEmail=$ADUser.emailaddress
        $newEmail=$newSAM+‘@‘+$oldemail.split(‘@‘)[1]
        write-host "Updating Email:$oldEmail -> $newEmail" -ForegroundColor Cyan
        set-aduser $newSAM -EmailAddress $newEmail
        #Change Primary SMTP
        $primary=Get-PrimarySMTP -users $ADUser.name | select -ExpandProperty primarysmtp
        Write-Host "Updating ProxyAddress.." -ForegroundColor Cyan
        #Write-Host "Current Primary address is $primary" -ForegroundColor Cyan

        $Aduser.proxyaddresses.remove("SMTP:"+$primary)

        $Aduser.proxyaddresses.add("smtp:"+$primary)
        $Aduser.proxyaddresses.add("SMTP:"+$newEmail)
        set-aduser $newSAM -replace @{proxyaddresses=[string[]]$ADUser.proxyaddresses} 

        #Change cloud UPN. If Office365 session is not connected properly, follow commands wont‘ work!
        $oldmsolupn=Get-MsolUser -SearchString $ADUser.Name
        $oldmsolupn=$oldmsolupn| select -First 1 | select -ExpandProperty UserPrincipalName
        $newmsolupn=$newSAM+‘@‘+$oldmsolupn.split(‘@‘)[1]
        write-host "Updating MSOLUPN: $oldmsolupn -> $newmsolupn" -ForegroundColor Cyan
        Set-MsolUserPrincipalName -UserPrincipalName $oldmsolupn -NewUserPrincipalName $newmsolupn
        Write-Host ""
}
    else{
        Write-Warning "Either GivenName or Surname is Empty"

    }
}
#Confirm result
Write-Host "Confirm AD Result " -ForegroundColor Cyan
get-aduser $newSAM -Properties proxyaddresses,mail | select Name, SamAccountName, UserPrincipalName, proxyaddresses, mail
Write-Host "Confirm O365 Result" -ForegroundColor Cyan
Get-MsolUser -SearchString $ADUser.Name | select UserPrincipalName

修改其实都满简单地,我的脚本里面也没有写太多容错处理。修改完了之后,windows用户可能存在Profile和注册表对不上号的问题,因此还需要修改一些注册表,具体操作参考 http://beanxyz.blog.51cto.com/5570417/1930788

时间: 2024-10-11 03:25:53

Powershell 修改Office365和AD账户的相关文章

Powershell技巧 判断一个AD账户是否存在

Powershell批量修改AD账户登陆到的计算机

Powershell 批量修改AD账户登陆到的计算机 上个月有个项目中碰到这样一个需求,讲述步骤前先描述下客户的实际情况:因安全考虑需要,域内的计算机之前都已经设置了指定登陆到的计算机,目前的项目是从Lotus邮件系统迁移到Exchange 2010,Lotus工作流迁移到泛微OA,域内账户输入账号和密码后不能登陆到Exchange系统.原因就是设置了账户的登陆到计算机属性,因为Exchange是新上的系统,没在指定范围内,所以需要添加Exchange服务器CAS01,CAS02,Mail,Ma

JAVA通过SSL证书创建MS AD账户及设置密码

近期由于工作需要整理一下自动化的东西,因为公司去年上线了OA,所以公司的入职系统会提交用户的信息到IT部门,最早的做法是入职到了,IT部门收集用户信息在AD中创建对应的用户信息,所以为了提高管理员的工作效率,所以准备实施自动创建AD账户,当OA流程到IT人员审批节点后,IT人员审批后根据人员信息自动创建AD账户,所以整理了一些JAVA创建AD人员信息的信息,但是我们需要注意点的是,对于JAVA语言操作MS AD的一些普通操作是不需要SSL的,但是对于用户密码的重置操作必须使用SSL,当然之前看网

修改Zabbix默认运行账户

默认Zabbix运行的账户是Zabbix,但在自动部署的时候,Agent与Server的先后顺序不定,而且官方不建议两者使用同一个账户. 所以,解压压缩包后,进入目录: vi configure vi configure.in 将*user = 'zabbix'修改为zabbixadmin vi src/libs/zbxnix/daemon.c 将char[7] = 'zabbix'修改为 char[12] = 'zabbixadmin'. 然后重新配置编译安装即可. Zabbix 2.0/2.

windows10用powershell修改文档/文件夹创建时间、修改时间、访问时间

参考博文:windows用powershell修改文档/文件夹创建时间.修改时间 用win10自带的powershell可以轻松修改文档/文件夹创建时间.修改时间.而且可以批量修改. 1. 步骤: 新建一个bat文件,在其中添加语句: @ECHO OFF powershell.exe -command "ls 'folder_path\*.dll' | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date

Powershell 批量导入AD账户

它是一个单独的命令行,即导入一个 CSV 文件并使用其中的信息创建数十甚至数百个新的 Active Directory 用户: Import-CSV 'C:\provision1.csv'|ForEach-Object {New-QADUser -organizationalUnit 'company.pri/Singers' -name($_.'First Name' + '.' + $_.'Last Name') -samAccountName $_.'Logon name' -city$_

Powershell 修改用户配置文件

最近公司打算统一修改AD用户的一些属性,包括SamAccountName,UPN,Office365的UPN,这样保证这些属性和邮件地址是一致的.这些修改本身不难,都可以通过PowerShell批量实现,问题在于修改之后有很多额外的问题,例如Outlook的ost文件啦,通过AD进行LDAP登录的工具了,一些软件的保存路径等需要处理. 修改了AD登录名之后的首要问题就是计算机上的用户配置文件需要进行同步修改.公司没用SCCM,因此只有自己想办法了.豆子做了些测试,基本上需要做以下操作: 以其他管

AD账户频繁被锁

===问题描述=== 用户反应他的账户总是被锁定,起初锁定时间一个小时左右,如今已经缩短到了30秒以内 ===原因分析=== 造成账户锁定的原因 通过powershell查看用户在两个星期前修改过密码,这也是造成锁定的导火索 旧的密码凭据还保留在其他服务器或者客户端上,正在尝试进行某种操作 用户使用的计算机中了病毒或者有人恶意尝试密码 这里只有他一个人被锁定了,可以排除病毒的可能,恶意尝试不可能什么时间段都锁定,也可以排除 附件上传了一个查看账户锁定的工具,在DC上将其安装,输入被锁账户用户名密

AD账户锁定排错(未完)

===问题描述=== 用户反应他的账户总是被锁定,起初锁定时间一个小时左右,如今已经缩短到了30秒以内 ===原因分析=== 造成账户锁定的原因 通过powershell查看用户在两个星期前修改过密码,这也是造成锁定的导火索 旧的密码凭据还保留在其他服务器或者客户端上,正在尝试进行某种操作 用户使用的计算机中了病毒或者有人恶意尝试密码 这里只有他一个人被锁定了,可以排除病毒的可能,恶意尝试不可能什么时间段都锁定,也可以排除 附件上传了一个查看账户锁定的工具,在DC上将其安装,输入被锁账户用户名密