当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Azure AD + MSOnline 模块弃用

作者:精品下载站 日期:2024-12-14 05:33:18 浏览:13 分类:玩电脑

Azure AD + MSOnline 模块弃用


[玩转系统] Azure AD + MSOnline 模块弃用

随着 MS Online 和 Azure AD 模块的弃用,是时候将以前的任务映射到新方法了。我们希望以下想法对您有所帮助。

你受到影响了吗?

Microsoft 将于 2024 年 3 月末弃用一些重要的 PowerShell 模块,其中包括针对该日期的 MS Online (MSOL) 和 Azure AD/预览模块。虽然微软几年前就宣布了这些变化,但这些模块的发展现在似乎即将正式结束。

如果您使用这些模块进行 IT 管理和迁移项目,这对您意味着什么?

这意味着是时候学习如何使用 Graph PowerShell 并找到一种将以前的任务映射到新方法的方法了。一些管理员已经适应了这一变化并且没有出现任何问题,而其他管理员则发现 Microsoft Graph PowerShell 模块是一个不太宽容的模块,并且是完成任务的障碍。在本文中,我们将解决这些挑战,查看这些更改将如何影响 PowerShell 用户的示例,并查看 Microsoft 有关此转换的帮助文档。

什么是贬义的?

  • Azure AD/Azure AD 预览版
  • 微软在线(MSOL 或 MSOnline)

弃用通知

作为大型变革的典型,微软花了一些时间逐步推动管理员做出改变并为未来做好准备。通知已经进行了近两年:

2022 年 6 月/2023 年 6 月/2023 年 9 月/2023 年 12 月

可能还有更多通知,但这只是一个需要审查的小样本。

迁移到图表

Microsoft 提供了资源来帮助迁移 cmdlet、脚本和应用程序:

  • 迁移 Azure AD Graph(链接)
  • 迁移应用程序(链接)
  • 迁移步骤(链接)

兼容性检查器

使用此工具检查脚本的兼容性,可在 PowerShell 库中找到。

图 PowerShell 基础知识

如果您不熟悉使用 Graph,连接和准备的过程与其他 PowerShell 模块类似。

首先,安装 Microsoft Graph SDK PowerShell 模块:

Install-Module Microsoft.Graph

然后将模块导入 PowerShell:

Import-Module Microsoft.Graph

连接到图:这是一个非常简单的示例,因为图有一些细微差别,因为它在任务/权限方面更加精细。有关连接到 Graph、选择权限等的更多详细信息,请参阅本文。

Connect-MgGraph -Scopes 'Directory.ReadWrite.All'

现实世界的例子

在本节中,我们将回顾一些在旧模块中执行的一些任务的简短示例,以及现在如何在 Graph PowerShell 中执行这些任务。

微软在线

(1)列出某个租户下的所有用户

MSOnline服务模块:
(Get-MsolUser).Count
Microsoft Graph PS 模块:
(Get-MgUser -ALL).Count

[玩转系统] Azure AD + MSOnline 模块弃用

顶部是包含 119 个用户的图表,底部的示例来自同样包含 119 个用户的 MS Online。

(2) 用一句话列出来宾或租户成员用户

MSOnline服务模块:
Get-MsolUser | Where-Object UserType -eq Member | Sort-Object DisplayName
MSOnline 输出:

[玩转系统] Azure AD + MSOnline 模块弃用

现在,为了在 Graph 模块中执行相同的操作,我们执行过滤查找:

Get-MgUser -All -Filter "UserType eq 'Member'"
图形输出:

[玩转系统] Azure AD + MSOnline 模块弃用

默认输出不同,因此需要根据需要的用户属性进行调整。

(3) 团体许可

许可也发生了巨大变化,之前的步骤现在需要在 Microsoft Graph 中执行。之前,我为此博客撰写了一篇关于此主题的文章,您可以在此处找到“使用 Microsoft Graph PowerShell 进行许可”。

(4) 用户认证方式

对 Microsoft 365 租户中的帐户进行身份验证可能需要一些额外的身份验证方法(也称为 MFA),这些方法可以进一步验证谁正在连接到该帐户。在 MSOnline 服务中,有一种方法可以设置强身份验证设置,但随着模块 Graph 的弃用,现在我们的工具已成为我们的工具。 Graph PowerShell 有一定的粒度,我们将在这里进行探讨。首先,MSOnline:

$st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$st.RelyingParty = "*"
$st.State = "Enabled"
$sta = @($st)
Set-MsolUser -UserPrincipalName [email protected] -StrongAuthenticationRequirements $sta

Graph 有许多 cmdlet,但请记住,以上内容现在不仅在方法(每个用户 MFA)而且在模块(MSOnline)方面都被视为遗留。我们可以通过 Graph PowerShell 对其进行调整。首先,查询用户的配置:

Get-MgUserAuthenticationMethod 
-UserId [email protected] | Format-List

[玩转系统] Azure AD + MSOnline 模块弃用

我们看到该用户确实配置了 MFA,并使用三种不同的方法进行验证。 Graph PowerShell 允许我们使用 Remove-MgUserAuthentication* cmdlet 删除现有方法,使用 New-MgUserAuthentication* cmdlet 添加新的身份验证方法,使用 Update 更新身份验证方法-MgUserAuthentication* cmdlet 或使用 Get-MgUserAuthentication* cmdlet 列出各个设置。虽然通常不建议按用户 MFA 配置,但如果用户有用户,或者身份验证方法根本不起作用,我们可能需要进行调整。

添加方法 - 电话验证:

在此示例中,我们为用户添加电话身份验证方法并将其定义为其手机号码:

$params = @{
  phoneNumber = "+1 3125551212"
  phoneType = "mobile"
}
New-MgUserAuthenticationPhoneMethod -UserId [email protected] -BodyParameter $params
更新方法:

在此示例中,我们需要使用相同的 $params 变量来定义新的电话号码,我们还需要现有的电话身份验证方法,因为我们可以定义多行,最后是更新 cmdlet:

$PhoneAuthID = (Get-MgUserAuthenticationPhoneMethod -UserId postmaster@ powershellgeek.com).Id
$params = @{
  phoneNumber = "+1 3125551212"
  phoneType = "mobile"
}
Update-MgUserAuthenticationPhoneMethod -UserId postmaster@ powershellgeek.com -BodyParameter $params -PhoneAuthenticationMethodId $PhoneAuthId 
去除方法:

如果我们需要更新现有的电话身份验证方法(不能有两个相同类型)或者如果我们只是希望删除身份验证方法,我们可以使用 PowerShell 来执行此操作:

$PhoneAuthID = (Get-MgUserAuthenticationPhoneMethod -UserId [email protected]).Id
Remove-MgUserAuthenticationPhoneMethod -UserId [email protected] -PhoneAuthenticationMethodId $PhoneAuthID

Azure AD 示例

(1) 将用户添加到组中

在此示例中,PowerShell 通常用于将新用户添加到许可组或权限组,它需要读取 CSV 文件以获取要处理的用户列表,然后填充该组:

Azure AD 代码:
$CSV = Import-Csv .\MailboxesToAdd.txt
Foreach ($User in $CSV) {
 $ID = $User.Alias
 $UPN = $ID+'@mydomain.com'
 $ObjectID = (Get-AzureADUser -ObjectId $UPN).ObjectID
 Add-AzureADGroupMember -ObjectId a616b6a9-21ad-41f3-8204-f52e944d9df4 -RefObjectId $ObjectID
}
图表示例:
$CSV = Import-Csv .\MailboxesToAdd.txt
Foreach ($User in $CSV) {
 $ID = $User.Alias
 $UPN = $ID+'@mydomain.com'
 $ObjectID = (Get-MgUser -UserId $UPN).Id
 New-MgGroupMember -GroupId a616b6a9-21ad-41f3-8204-f52e944d9df4 -DirectoryObjectId $ObjectID
}

在此示例中,我们看到两个 cmdlet 发生了变化,从 Azure AD cmdlet 更改为 Graph 特定的 cmdlet。相当容易做到。请注意,在大多数情况下参数也会发生变化。

(2)查询所有用户详细信息

在此示例中,我们正在查询用户的属性列表,如果用户对象在租户之间移动,这些属性可用于文档记录、验证或可能用于存档。

Get-AzureADUser -Top 500 | Where-Object UserType -eq member | Sort-Object DisplayName | Select-Object UserPrincipalName, DisplayName, GivenName, Surname, Mail, MailNickName, Company, Country, Department, Title, Mobile, PostalCode, State, StreetAddress, TelephoneNumber, UsageLocation | Export-Csv -Path "c:\downloads\atlantix$Tenant-AzureAD-Export.csv" -NoTypeInformation

重叠

由于两个不同的模块同时被弃用,并且两者已经存在一些重叠,因此值得注意的是,Azure AD 和 MSOnline PowerShell 模块中的某些 cmdlet 可能最终会映射到 Graph PowerShell 模块中的单个 cmdlet。下面是一些例子:

Get-MgUser(图表)

Get-CorrespondingGraphCommand Get-AzureADUser
Get-CorrespondingGraphCommand Get-MsolUser

我们看到,在 Graph 中,来自不同模块的这两个 cmdlet 都使用 Get-MgUser 作为其后继者。

[玩转系统] Azure AD + MSOnline 模块弃用

请注意,尽管有重叠,但它并不理想,因为并非所有参数和选项都相同,因此真正的转换需要时间和学习。

Get-MgGroupMember(图表)

另一个示例是租户中存在的组。过去,我们使用了一系列来自 MSOnline 和 AzureAD 的 cmdlet 来管理这些组。下面我们看到 Get cmdlet 最终指向同一个 Graph PowerShell cmdlet:

Get-CorrespondingGraphCommand Get-MsolGroupMember
Get-CorrespondingGraphCommand Get-AzureADGroupMember

我们看到生成的 cmdlet 是 Get-MgGroupMember:

[玩转系统] Azure AD + MSOnline 模块弃用

未来

未来的好工具

当在 Graph 中查找相应的 cmdlet 时,我们有几种发现方法:

  • 使用 Microsoft 的此页面。
  • 使用这个漂亮的工具,它引用上一页并提取新的 cmdlet。

单个 cmdlet

将该工具与检查运行 Graph cmdlet 所需的 Graph 权限的功能相结合。以 Get-MsolUser cmdlet 为例,它是 MSOnline PowerShell 模块中的典型 cmdlet。使用 DependencySearch PowerShell 模块,我们可以拉取匹配的 cmdlet 并使用 Graph cmdlet 来拉取权限:

$NewCmdlet = (Get-CorrespondingGraphCommand Get-MSOLUser).GraphCommand
(Find-MgGraphCommand $NewCmdlet).Permissions

以下是这两个衬垫的输出的子集:

[玩转系统] Azure AD + MSOnline 模块弃用

Get-MsolUser cmdlet 的完整权限列表示例

一个复杂的情况是,某些 cmdlet 具有大量相应的权限列表,用于授予对该 cmdlet 的访问权限。选择最少的权限,如果可以的话,从权限的读取版本开始。

整个脚本

翻译单个 cmdlet 是一回事,但当我们拥有可能需要执行相同翻译的整个脚本时,情况就完全不同了。使用相同的 DependencySearch 模块,我们可以分析脚本是否存在潜在问题。在下面的示例中,我们首先提取所有可用模块,然后对示例脚本“C:\Repository\ScriptToAnalyze.ps1”应用搜索功能。

$AvailableModule = @(Get-Module -ListAvailable)
Get-CodeDependency -scriptPath "C:\Repository\ScriptToAnalyze.ps1" -AvailableModules $AvailableModule

这两行的结果将输出需要替换为 Graph cmdlet 的 cmdlet:

[玩转系统] Azure AD + MSOnline 模块弃用

结论——最后的话

Microsoft 已多次更改此更改的最终日期,我们不能指望这种情况会再次更改。现在是时候进行更改、学习如何使用 Graph 并从这些旧版 PowerShell 模块继续前进。否则,您可能会遇到一个不再起作用的关键脚本,或者更糟糕的是,业务流程不再处理并给您的组织带来金钱损失。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯