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

[玩转系统] 如何将 Get-MgUser 与 Microsoft Graph PowerShell 结合使用

作者:精品下载站 日期:2024-12-14 06:45:45 浏览:15 分类:玩电脑

如何将 Get-MgUser 与 Microsoft Graph PowerShell 结合使用


Microsoft Graph PowerShell 中的 Get-MgUser cmdlet 允许您从命令行查找有关组织内的用户、用户组或所有用户的信息。它还将公开更多有关用户的信息,这些信息比通常通过基于 Web 的管理门户(例如 Azure AD 管理中心或 Microsoft 365 管理中心)找到的信息要多。

在本教程中,我将引导您了解如何使用 Microsoft Graph PowerShell 中的 Get-MgUser cmdlet 来查找和导出有关用户的有用信息。我还将介绍如何过滤和操作搜索结果以查找您需要的特定信息。

内容

  • 为什么使用 Get-MgUser cmdlet?
  • 先决条件
  • 查找运行 Get-MgUser 所需的权限
  • 查找单个用户的信息
  • 选择特定属性
  • 使用 Microsoft Graph 参考文档查找嵌套属性
  • 使用 -ExpandProperty 或 -Expand 查找隐藏信息
  • 过滤 Get-MgUser 搜索结果
  • 使用搜索参数查找用户
  • 结合搜索和过滤选项

为什么使用 Get-MgUser cmdlet?

Get-MgUser 是通过命令行界面查找有关用户的信息的首选命令。该命令可在 Microsoft Graph PowerShell SDK 中找到,该 SDK 是 MSOnline 和 AzureAD 等 PowerShell 模块的后续版本。

您可以将许多不同的参数与 Get-MgUser 一起使用,例如:

-展开属性
-属性
-过滤
-搜索
-跳过
-排序
-顶部
-ConsistencyLevel
-PageSize
-全部
-CountVariable

先决条件

要使用 Get-MgUser 命令,您需要确保满足以下条件:

  • 您正在运行 PowerShell 5.1 或更高版本
  • 安装了 .NET Framework 4.7.2 或更高版本
  • 您已安装 Microsoft Graph PowerShell SDK

查找运行 Get-MgUser 所需的权限

在连接到 Microsoft Graph 之前,必须确保使用 -scope 参数并定义了运行命令的正确权限。

要查找查找用户信息所需的最低权限级别,请使用 Find-MgGraphCommand cmdlet 查找 Get-MgUser cmdlet 的权限。

Find-MgGraphCommand -command Get-MgUser |`
Select -First 1 -ExpandProperty Permissions

您不需要连接到您的组织即可运行此命令,但您需要安装 Microsoft Graph PowerShell。这是预期的输出,虽然描述没有显示,但可以根据权限名称准确地做出假设。

[玩转系统] 如何将 Get-MgUser 与 Microsoft Graph PowerShell 结合使用

根据上面的输出,为了运行我们的命令,我们可以使用以下命令以所需的最少权限连接到 Microsoft Graph。

Connect-MgGraph -Scopes "User.Read.All"

查找单个用户的信息

要查找单个用户的信息,您可以运行以下命令来显示所有用户的显示名称、用户名和 ID 的列表。您可以从此处复制目标用户的 ID,以便直接定位该用户。

Get-MgUser | select DisplayName, UserPrincipalName, Id

复制用户 ID 后,将其放入以下命令中以显示用户帐户的所有信息。

Get-MgUser -UserId 5965d511-e639-4a28-bfbb-b2cb08e83907 | fl

如果您已经知道用户的用户名,则可以将 Id 替换为用户名,以获得相同的结果。

Get-MgUser -UserId [email  | fl

选择特定属性

当您定位特定用户并包含“格式列表”参数时,您会获得信息页面,其中大部分是空的或不相关的。使用select参数,我们可以选择显示的属性。

例如,要仅显示显示名称、用户名和用户 ID,我们可以使用以下命令。

Get-MgUser -UserId [email  | `
select DisplayName, UserprincipalName, Id

使用带有 Format-Line 参数的 PIPE 来确定要报告的属性并保存命令以供日后使用。

您希望查看的某些属性可能不会立即可见,这是因为它们是嵌套的。例如,如果您想查看用户的邮箱是否启用了自动回复,您可以运行以下命令。

 Get-MgUser -UserId [email  -Property MailboxSettings | `
 Select @{Name = 'AutomaticReply'; Expression = {$_.MailboxSettings.AutomaticRepliesSetting.status}}

有时找到这些设置并不容易,但是,当您需要提取特定信息时,Microsoft Graph 文档是最好的起点。

使用 Microsoft Graph 参考文档查找嵌套属性

调用 Get-MgUser cmdlet 时的许多属性都是嵌套的。 Microsoft Graph 中的其他 cmdlet 也是如此,要查找这些属性,Microsoft Learn 上的 Graph API 参考文档是最好的查找位置。

在上面的示例中,我找到了邮箱的自动回复设置,我们可以在文档中查找,如下所示。

1. 首先访问 https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties,此页面显示所有属性、值类型和每个属性的解释。

2. 找到初始属性并选择类型字段(如果可单击)。这里我选择了mailboxSettings

[玩转系统] 如何将 Get-MgUser 与 Microsoft Graph PowerShell 结合使用

3. 您将看到一个类似的页面,其中显示了mailboxSettings 属性的所有属性。我在这里选择了automaticRepliesSetting

[玩转系统] 如何将 Get-MgUser 与 Microsoft Graph PowerShell 结合使用

4. 可以看到,如果我们想要查看用户邮箱的自动回复设置的状态,我们需要status属性。它嵌套在 MailboxSettings > AutomaticReplySettings 中。

[玩转系统] 如何将 Get-MgUser 与 Microsoft Graph PowerShell 结合使用

所以我们知道我们的设置值位于 MailboxSettings.AutomaticRepliesSetting.status 中,但是,它必须作为表达式包含在我们的命令中。如果不这样做,您将收到如下错误:

选择:缺少表达式的必填项。

因此,为了使这项工作正常进行,一旦我们在命令中定义了 -property 参数,我们就可以 PIPE,然后使用 select 命令来提取我们的值,如下所示:

选择 @{Name=‘自动回复’;表达式={$_.MailboxSettings.AutomaticRepliesSetting.status}}

自动回复
————-
已禁用

使用 -ExpandProperty 或 -Expand 查找隐藏信息

如果您使用format-list命令查看某个用户的所有用户属性,您可能会发现许多属性都是空的。我不确定这是为什么,但有些肯定包含信息。您可以使用Expand ExpandProperty 参数来显示不立即可见的信息。

另一个不寻常的怪癖是,并非所有命令都会在 Get-MgUser 之后接受用户用户名,因此为什么在教程开始时,我强调您可以将 UserPricincipalName 或 Id 解析到命令中。我将向您展示的下一个命令也是如此。

例如,要显示用户上次登录的信息,您可以执行以下操作。

get-mguser -userid (get-mguser -UserId "[email ").id `
-property signinactivity | Select-Object -expandproperty signinactivity

您可以在上面的命令中看到,在不知道用户 Id 的情况下,我们选择了 Id 属性并在命令中调用了用户两次。如果您没有在命令中指定 id,您将收到如下错误:

get-mguser : {“@odata.context”:”http://reportingservice.activedirectory.windowsazure.com/$metadata#Edm.String”,”value”:” Get By Key 仅支持 UserId 并且密钥必须是有效的 Guid”}

因此,要使用上面与用户 ID 相同的命令,您可以运行以下命令。

get-mguser -userid 841e1f59-a0e2-4062-896a-8c84c36f1811 `
-property signinactivity | Select-Object -expandproperty signinactivity

您会发现并非所有属性都以相同的格式呈现。这意味着信息不能总是以相同的方式提取。例如,如果我们想查看特定用户的管理员名称,我们可以运行以下命令。

Get-MgUser -UserId [email  -ExpandProperty manager | `
Select @{Name = 'Manager'; Expression = {$_.Manager.AdditionalProperties.displayName}}

过滤 Get-MgUser 搜索结果

您可以使用 -Filter 参数来过滤用户的搜索结果。使用过滤器参数时,只能使用几个逻辑运算符,它们是:

  • eq 属性等于
  • le 该属性小于或等于(按字母顺序)
  • gt 属性大于或等于(按字母顺序)
  • 属性 1 等于且属性 2 等于
  • 属性 1 等于或属性 2 等于
  • startswith属性开始于
  • endswith 属性以以下结尾

下面我将向您展示如何在命令中使用每个逻辑运算符的示例。

首先,我们可以使用 eq 运算符来查找属性与特定值匹配的用户,这里将过滤显示名称等于“John Smith”的用户。

get-mguser -filter "DisplayName eq 'John Smith'"

与上面的格式类似,我们可以使用 lege 运算符来查找显示名称以小于或大于字母表中“G”的字母开头的用户。

#Filter users whos name begins with a letter before G in the alphabet
get-mguser -filter "DisplayName le 'g'"

#Filter users whos name begins with a letter after G in the alphabet
get-mguser -filter "DisplayName ge 'g'"

要查找租户中显示名称以字母 D 开头的所有用户,您可以使用 startswith 运算符。

get-mguser -filter "startswith(Displayname, 'D')"

与上面类似,我们可以通过用户endswith运算符来查找主邮件地址以特定域名结尾的用户。对于此命令,指定 -CountVariable 和 -ConsistencyLevel 参数非常重要。

 Get-MgUser -CountVariable CountVar -Filter "endsWith(mail,'it-career.online')" `
 -Sort "displayName" -ConsistencyLevel eventual

上面的命令现在可以与 运算符配对来微调我们的结果。例如,要查找主域为 it-career.online 且显示名称以 D 开头的用户。

 Get-MgUser -CountVariable CountVar -Filter `
 "endsWith(mail,'it-career.online') and startswith(Displayname, 'D')" `
 -Sort "displayName" -ConsistencyLevel eventual

与上面类似,可以以相同的方式使用 or 运算符来扩大我们的结果。在这里,我们搜索主要邮件地址以“it-career.online”或“it-career.info”结尾的用户。

 Get-MgUser -CountVariable CountVar -Filter `
 "endsWith(mail,'it-career.online') or endsWith(mail,'it-career.info')" `
 -Sort "displayName" -ConsistencyLevel eventual

使用搜索参数查找用户

与过滤选项类似,我们也可以使用-search参数来微调我们的用户搜索结果。我上面提到了使用 -ConsistencyLevel 选项并设置为 最终,我们需要在以下命令中执行此操作。

下面我们正在搜索显示名称以字母 I 开头的用户。

Get-MgUser -ConsistencyLevel eventual -Search '"DisplayName:I"'

目前尚不清楚搜索参数的具体工作原理,例如它是按短语搜索的。如果显示名称是“John Smith”,我可以使用搜索词:

  • ''显示名称:J''
  • ''显示名称:约翰''
  • ''显示名称:Smith''
  • ''显示名称:S''

但是,它不会找到可能属于单词中间或末尾的值。例如,如果我使用以下内容,John Smith 将不会出现在我的搜索结果中:

  • ''显示名称:h''
  • ''显示名称:第''
  • ''显示名称:hn''

结合搜索和过滤选项

使用 Get-MgUser cmdlet 时,搜索和筛选参数并不相互排斥,尽管可能缺乏功能/文档,但将两者结合起来并不会带来全部好处,但您可以。

例如,如果您想要过滤域 it-career.online 的所有用户并搜索特定部门中的用户的结果,您可以运行以下命令。

Get-MgUser -Filter "endsWith(mail,'it-career.online')" `
-Search 'Department:Marketing' -ConsistencyLevel eventual

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

取消回复欢迎 发表评论:

关灯