使用PowerShell 批量修改O365 用户UPN

又来分享一些日常用的小脚本哈,比如说有些小型企业在使用O365时开始用的是O365自带的域名,过了一段时间后想用自己的域名了,这时候管理员就需要将用户的UPN修改成自定义域名。总体来说这不是个复杂的活,简单写的话可能几行代码就搞定了,当然如果想写的稍微规范些,那么可以再加上一些逻辑控制类的语句

param (
	[parameter(Mandatory = $true)]
	[string]$CustomDomainName,
	[parameter(Mandatory = $false)]
	[bool]$IncludeGlobalAdmin=$false
)

function Change-UserPrincipalName
{
	param (
		[parameter(Mandatory = $true)]
		[string]$OldUserPrincipalName,
		[parameter(Mandatory = $true)]
		[string]$CustomDomainName
	)

	$Error.clear()

	try
	{
		$Role = Get-MsolUserRole -UserPrincipalName $OldUserPrincipalName 
		$Change = $true
		if ($Role -ne $null)
		{
			#Company Administrator
			if ($Role.ObjectId -eq "62e90394-69f5-4237-9190-012177145e10")
			{
				if ($IncludeGlobalAdmin -eq $false)
				{
					Write-Host ("$(Get-Date) * Found {0} {1}, pass" -f $Role.Name, $OldUserPrincipalName) -ForegroundColor 'yellow'
					$Change = $false
				}

			}
			#Directory Synchronization Account
			elseif ($Role.ObjectId -eq "d29b2b05-8046-44ba-8758-1e26182fcf32")
			{
				Write-Host ("$(Get-Date) * Found {0} {1}, pass" -f $Role.Name, $OldUserPrincipalName) -ForegroundColor 'yellow'
				$Change = $false
			}
		}

		if ($Change -eq $true)
		{
			$UserName = $OldUserPrincipalName.Split("@")[0]
			$NewUserPrincipalName = $UserName + "@" + $CustomDomainName
			Write-Host ("$(Get-Date) * Changing user principal name {0} to {1}" -f $OldUserPrincipalName, $NewUserPrincipalName) -ForegroundColor 'Cyan'
			Set-MsolUserPrincipalName -UserPrincipalName $OldUserPrincipalName -NewUserPrincipalName $NewUserPrincipalName
		}
	}
	catch
	{
		Write-Warning $Error[0].Exception.Message
	}

}
$Domains = Get-MsolDomain
if ($Domains.Name.Tolower().contains($CustomDomainName.ToLower()))
{
	Get-MsolUser -All | %{

		Change-UserPrincipalName -OldUserPrincipalName $_.UserPrincipalName -CustomDomainName $CustomDomainName
	}
}
else
{
	throw "$(Get-Date) * Domain Name $CustomDomainName not found in your tenant"
}

对于Global Admin,脚本里加了一个bool类型的参数来决定是否要修改Global admin的UPN,这样对于管理员来说做这种操作的时候可以更可控一些

原文地址:http://blog.51cto.com/mxyit/2070231

时间: 2024-10-11 23:25:09

使用PowerShell 批量修改O365 用户UPN的相关文章

PowerShell批量修改AD用户密码属性

需求:非常普通的一个需求,就是给AD用户修改密码,但是问题是量太大了.所以写了个脚本 cls $pass = ConvertTo-SecureString -AsPlainText 12333333344.abc -Force Import-Csv -Path d:\pp.csv | foreach {  Get-ADUser -Identity $_.name|Set-ADAccountPassword -Reset -NewPassword $pass Get-ADUser -Identit

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

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

使用chpasswd命令批量修改系统用户密码

chpasswd命令工作原理: 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令! 语法: 1:# echo 用户名:密码 | chpasswd 2:# chpasswd < doiido.txt 相关参数: -e :如果使用了-e选项,口令将只能以加密的方式传递 -e, --encrypted  supplied passwords are encrypted 如果未使用-e选项,口令将按明文的形式传递 注意事项 1:用户名必须是系统上已存在的用户 2:普通用

使用powershell批量修改文本为utf8

根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp = " " foreach($fpath in $incPath) { $headList=$fpath.DirectoryName + "\" + $fpath.name $temp = cat $headList $temp | Out-File -Encodin

自动批量修改linux用户密码

通常会有多台服务器需要同时修改密码,此时可不必一台一台去操作,可以借用expect工具实现批量密码修改工作.涉及到四个文件,ip地址列表文件(iplist.txt),远程密码修改脚本(password.sh),复制时调用密码脚本scp.exp,密码修改主程序(chpasswd.sh),需将四个文件放置在/root目录下,如果放在其它目录,需修改脚本中对应的路径 在执行脚本的机器上安装expect,使用rpm包安装时需要依赖tcl包,也可使用yum安装,使用mkpasswd生成密码,一次生成一次,

批量修改AD用户属性

首先使用csvde导出需要修改用户的DN 再准备一个包含用户信息的Excel表.整理能如下格式,这里示范批量修改用户的邮件地址,红色部分改成自己需要的,还要修改其它信息,可以在后面直接加,对应的参数见链接https://technet.microsoft.com/en-us/library/cc732954.aspx , 将此文本文件保存为.bat,最后在服务器上运行. dsmod user CN=admin01ou01,OU=Users,OU=OU01,DC=adtest01,DC=com -

PowerShell 批量添加域用户(Windows 2012 R2)

PowerShell版本 1. 实施的前提请准备好相关域用户信息,一般都是Excel表,格式如下 注:为了方便导入,我将PowerShell相关名与表格中值一一对应. Group组织单元需要提前建立出来,也可以用PowerShell命令 用户密码我是用函数来做的,数字+字母最好,但是有些字母数字,如数字0和小写字母o和大写字母O,给用户及运维工作人员带来不便,固我采用了随机数字+固定字母来做. 2. 将表格另存为后缀名.CSV格式文件(该文件会以逗号形式隔开每个字符串值),若表中有中文,需要我们

Oracle 批量修改某个用户下表的表空间

说明:一般来说要修改表的表空间需要同时修改表的表空间和其对应的索引表空间,并且在修改含有BOLB字段的表的表空间时又不一样,具体请参考末尾的链接 思路:拼凑一个满足条件的批处理查询语句,将查询的结果复制出来作为批处理语句执行.具体步骤如下: 1.写查询 --查询某个用户下的表,并生成一个修改其命名空间的批处理语句 select 'alter table '|| table_name ||' move tablespace 要迁入的表空间;' from dba_tables t where t.o

powershell 批量获取office365用户邮箱使用容量

公司用的office365的Excahnge Online,云端默认有50G容量. 2,3年下来,发现销售或者售后的邮箱容量会很快就要到达极限了,为了方便查看那些用户快到使用极限,那肯定要用powershell. 附:官方文档,如何用powershell连接到Exchange Onlinehttps://docs.microsoft.com/zh-cn/powershell/exchange/exchange-eop/connect-to-exchange-online-protection-p