在 Microsoft Entra 中将外部用户转换为内部用户
Microsoft Entra 支持目录中的外部用户与内部用户的对话,同时保持相同的对象 ID、权限和组成员身份。这样就不再需要删除外部用户、将其重新创建为内部用户以及重新配置权限和成员资格。
在本博客中,我将向您展示如何使用 Web 门户和 Microsoft Graph PowerShell 将外部用户转换为内部用户。
为什么将外部用户转换为内部用户?
将目录中的外部用户转换为内部用户的一些常见场景包括:
- 支持收购新业务,其中可能已经预先建立了 B2B 关系。
- 支持现有外部顾问的内部聘用。
- 支持因收购或遗留租户拆分场景而合并两个组织。
从根本上讲,您不应该故意在目录中创建外部用户来支持这些场景。转换为内部用户功能减少了转换现有外部用户的管理和技术工作,从而减少了对最终用户的影响。
如何将外部用户转换为内部用户
请按照以下步骤使用 Microsoft Entra Web 门户将外部用户(或来宾)转换为目录中的内部用户。
1. 登录entra.microsoft.com。
2. 展开身份,然后选择所有用户 > 所有用户 > 您的外部用户。
4. 在概述选项卡上,选择转换为内部用户。
5. 屏幕右侧将出现一个新窗口。系统将要求您输入用户主体名称并生成密码。
6. 准备好后,单击转换。然后,您的用户属性将更改为成员,表明该用户现在是内部用户。
使用 PowerShell 将外部用户转换为内部用户
使用 Microsoft Graph PowerShell 以编程方式也可以实现相同的结果。使用以下 PowerShell 示例将外部 Entra ID 用户转换为内部用户。
$body = @{
userPrincipalName = "NEW UPN HERE"
passwordProfile = @{
password = "PASSWORD HERE"
forceChangePasswordNextSignIn = "false"
}
}
Invoke-MgGraphRequest -Method POST `
-Uri "Beta/users/ID OF EXTERNAL USER HERE/convertExternalToInternalMemberUser" `
-Body $body `
-ContentType "application/json"
我还对此进行了一些扩展,并创建了一个有用的函数,可以轻松地将外部用户转换为内部用户。
function Convert-MgExternalUser {
<#
.AUTHOR
Daniel Bradley
ourcloudnetwork.co.uk
.DESCRIPTION
Convert external users in Microsoft Entra ID to internal users
.EXAMPLE
Convert-MgExternalUser -ExternalUser "externaluser#EXT#@contoso.com" -AccountName "New external user account name" -password "new password" -DefaultDomain
#>
[CmdletBinding()]
param(
[Parameter(mandatory=$true)]
[string]$ExternalUser,
[string[]]$AccountName,
[string[]]$password,
[string[]]$domain,
[switch]$DefaultDomain
)
#Grab default domain
If ($DefaultDomain.IsPresent){
$Domain = ((Invoke-MgGraphRequest -Method GET -Uri "beta/domains" -OutputType PSObject | Select -Expand Value) | Where {$_.isDefault -eq "True"}).id
}
#Check the external user and grab ID
$ExternalUser -match '^.*(?=(\#EXT#))' | Out-Null
$Normalised = $Matches[0]
$UserCheck = Invoke-MgGraphRequest -Method GET -Uri "/beta/Users?`$filter=startsWith(UserPrincipalName, '$Normalised') and userType eq 'Guest'" -OutputType PSObject | Select -Expand Value -ErrorAction Stop
IF ($UserCheck -eq $null){
Write-Output "Unable to find external user, please try again."
Return
}
#Create request body
$body = @{
userPrincipalName = "$AccountName@$Domain"
passwordProfile = @{
password = "$password"
forceChangePasswordNextSignIn = "false"
}
}
#Convert external user to internal
Invoke-MgGraphRequest -Method POST -Uri "Beta/users/$($UserCheck.id)/convertExternalToInternalMemberUser" -Body $body -ContentType "application/json"
}了解转换用户的影响
从最初的观察来看,对象的 ID 保持不变,因此任何组成员资格和权限也将保留。
如果外部用户登录到 Teams 桌面应用程序并查看他们作为外部用户受邀加入的组织,他们将看到以下错误。要解决此问题,他们必须退出 Teams、退出 Teams、清除缓存,然后使用新用户凭据重新登录。
这种体验对您来说可能会有所不同,因为转换为内部用户功能处于预览状态。
您可能只想单击登录来尝试再次登录。当我确实发现这一点时,它使用为内部用户转换创建的用户名预先填写了用户名框,但登录仍然失败。
为了使其正常工作,我必须退出 Teams,清除本地 Teams 缓存并重新登录。重新登录后,我的组成员身份保持不变,并且我在 Teams 中创建的讨论已删除 (来宾) 文本加在我的名字前面。
Microsoft 365 MyGroups 门户中列出的所有组成员身份与 SharePoint 中的任何共享文档和直接权限分配保持相同。
寻找什么
不幸的是,虽然过程很简单,但并不总是一帆风顺。以下是我在此过程中发现的一些注意事项:
概括
总的来说,这是一个将外部用户加入目录中作为内部用户的简单且省时的过程。然而,这些是在更大、更复杂的环境中需要考虑的一些重要注意事项,这就是将内部成员添加到您的组织(曾经是权限范围有限的外部用户)的影响。







