Exchange Online PowerShell 和安全 & 合规性 PowerShell 中无人参与的脚本的仅限应用身份验证

Microsoft 365 中的审核和报告方案通常涉及 Exchange Online PowerShell 和安全与合规 PowerShell 中的无人参与脚本。 过去,无人参与登录需要将用户名和密码存储在本地文件或在运行时访问的机密保管库中。 但是,众所周知,在本地存储用户凭据不是一个很好的安全做法。

本文中所述,基于证书的身份验证 (CBA) 或仅限应用的身份验证支持无人参与的脚本和自动化方案,方法是使用 Microsoft Entra 应用和自签名证书。

注意

  • 是否知道可以使用 Azure 中的托管标识连接到 Exchange Online PowerShell? 查看使用 Azure 托管标识连接到 Exchange Online PowerShell

  • 本文中所述的功能和过程需要以下版本的 Exchange Online PowerShell 模块:

    • Exchange Online PowerShell (Connect-ExchangeOnline):版本 2.0.3 或更高版本。
    • 安全性 & 合规性 PowerShell (Connect-IPPSSession) :版本 3.0.0 或更高版本。

    有关如何安装或更新模块的说明,请参阅安装和维护 Exchange Online PowerShell 模块。 有关如何在 Azure 自动化中使用模块的说明,请参阅管理 Azure 自动化 中的模块

  • Exchange Online PowerShell V3 模块中的 REST API 连接需要 PowerShellGet 和 PackageManagement 模块。 有关详细信息,请参阅 PowerShellGet for 基于 REST 的连接在 Windows 中

    如果本文中的过程不起作用,请通过运行以下命令验证你没有安装 Beta 版本的 PackageManagement 或 PowerShellGet 模块: Get-InstalledModule PackageManagement -AllVersions; Get-InstalledModule PowerShellGet -AllVersions

  • 在 Exchange Online PowerShell 中,无法将本文中的过程与以下 Microsoft 365 组 cmdlet 配合使用:

    可以使用 Microsoft Graph 替换这些 cmdlet 中的大多数功能。 有关详细信息,请参阅 在 Microsoft Graph 中使用组

  • 在安全 & 合规性 PowerShell 中,不能将本文中的过程用于以下 Microsoft 365 组 cmdlet:

  • Exchange Online支持委托方案。 使用委派进行连接的建议方法是使用 GDAP 和应用许可。 有关详细信息,请参阅将 Exchange Online PowerShell v3 模块与 GDAP 配合使用和应用许可。 如果未与客户创建 CSP 关系,还可以使用多租户应用程序。 本文的常规说明中列出了使用多租户应用程序所需的步骤。

  • 如果使用 Windows PowerShell SDK 进行连接,请使用 Connect-ExchangeOnline cmdlet 上的 SkipLoadingFormatData 开关:The term 'Update-ModuleManifest' is not recognized as a name of a cmdlet, function, script file, or executable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

它的工作原理是什么?

Exchange Online PowerShell 模块使用 Active Directory 身份验证库,使用应用程序 ID、租户 ID (组织) 和证书指纹提取仅限应用的令牌。 在 Microsoft Entra ID 中预配的应用程序对象具有分配给它的目录角色,该角色在访问令牌中返回。 会话的基于角色的访问控制 (RBAC) 是使用令牌中提供的目录角色信息配置的。

连接示例

以下示例演示如何将 Exchange Online PowerShell 模块与仅应用身份验证配合使用:

重要

在以下连接命令中,使用组织的主 .onmicrosoft.com 域作为 Organization 参数的值。

以下连接命令具有许多可用的选项,如连接到Exchange Online PowerShell连接到安全性 & 符合性 PowerShell 中所述。 例如:

  • Microsoft 365 GCC High 或 Microsoft 365 DoD 环境需要以下附加参数和值:

    • GCC High 中的 Connect-ExchangeOnline-ExchangeEnvironmentName O365USGovGCCHigh
    • GCC High 中的 Connect-IPPSSession-ConnectionUri https://ps.compliance.protection.office365.us/powershell-liveid/ -AzureADAuthorizationEndpointUri https://login.microsoftonline.us/common
    • DoD 中的 Connect-ExchangeOnline-ExchangeEnvironmentName O365USGovDoD
    • DoD 中的 Connect-IPPSSession-ConnectionUri https://l5.ps.compliance.protection.office365.us/powershell-liveid/ -AzureADAuthorizationEndpointUri https://login.microsoftonline.us/common
  • 如果 Connect-IPPSSession 命令显示登录提示,请在 Connect-IPPSSession 命令之前运行命令$Global:IsWindows = $true

  • 使用证书指纹进行连接

    注意

    CertificateThumbprint 参数仅在 Microsoft Windows 中受支持。

    需要在运行命令的计算机上安装证书。 证书应该安装在用户证书存储区中。

    • Exchange Online PowerShell

      Connect-ExchangeOnline -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • 安全与合规 PowerShell

      Connect-IPPSSession -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
  • 使用证书对象进行连接

    不需要在运行命令的计算机上安装证书。 可以远程存储证书对象。 运行脚本时会提取证书。

    • Exchange Online PowerShell

      Connect-ExchangeOnline -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • 安全与合规 PowerShell

      Connect-IPPSSession -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
  • 使用本地证书进行连接

    注意

    使用 ConvertTo-SecureString 命令在本地存储证书的密码会破坏自动化方案的安全连接方法的用途。 使用 Get-Credential 命令来提示你安全输入证书的密码并不是自动化方案的理想选择。 换句话说,实际上没有使用本地证书进行连接的自动化 和安全 方法。

    • Exchange Online PowerShell

      Connect-ExchangeOnline -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (Get-Credential).password -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • 安全与合规 PowerShell

      Connect-IPPSSession -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (Get-Credential).password -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      

设置仅适用于应用的身份验证

初始加入需要使用应用程序对象进行身份验证。 应用程序和服务主体可互换使用,但应用程序类似于类对象,而服务主体类似于类的实例。 有关详细信息,请参阅 Microsoft Entra ID 中的应用程序和服务主体对象

有关在 Microsoft Entra ID 中创建应用程序的详细视觉流,请参阅 https://aka.ms/azuread-app

  1. 在 Microsoft Entra ID 中注册应用程序

  2. 向应用程序分配 API 权限

    默认情况下,应用程序对象具有 委派 API 权限 Microsoft Graph>User.Read 。 应用程序对象若要访问 Exchange 中的资源,它需要应用程序 API 权限Office 365 Exchange Online>Exchange.ManageAsApp

  3. 创建自签名证书

    • 对于 Microsoft Entra ID 中的仅限应用的身份验证,通常使用证书来请求访问权限。 拥有证书及其私钥的任何人都可以使用具有授予应用的权限的应用。

    • 创建并配置自签名 X.509 证书,该证书用于在请求仅限应用的访问令牌时针对Microsoft Entra ID对应用程序进行身份验证。

    • 此过程类似于为用户帐户生成密码。 证书也可以自签名。 有关在 PowerShell 中生成证书的说明,请参阅本文后面的 此部分

      注意

      加密:Exchange 的仅应用身份验证不支持下一代 (CNG) 证书。 CNG 证书默认在现代版本的 Windows 中创建。 必须从 CSP 密钥提供商处使用证书。 本部分 介绍创建 CSP 证书的两种受支持的方法。

  4. 将证书附加到 Microsoft Entra 应用程序

  5. 将Microsoft Entra角色分配给应用程序

    应用程序需要分配适当的 RBAC 角色。 由于应用是在 Microsoft Entra ID 中预配的,因此可以使用任何受支持的内置角色。

步骤 1:在 Microsoft Entra ID 中注册应用程序

注意

如果遇到问题,请检查 所需权限,以验证你的帐户是否可以创建标识。

  1. 在 处打开Microsoft Entra 管理中心https://portal.azure.com/

  2. 在页面顶部的“搜索”框中,开始键入应用注册,然后从“服务”部分的结果中选择“应用注册”。

    显示Azure 门户主页上的搜索结果中的应用注册的屏幕截图。

    或者,若要直接转到应用注册页,请使用 https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade

  3. 在“应用注册”页面,选择“新增注册”。

    在应用注册页面上选择“新增注册”。

    在打开的 注册应用程序 页面上,配置以下设置:

    • 名称:输入描述性内容。 例如,EXO PowerShell CBA。

    • 支持的帐户类型:验证 此组织目录中的帐户是否仅 (<YourOrganizationName> - 已选择单租户)

      注意

      若要使应用程序成为Exchange Online委托方案的多租户,请选择值“任何组织目录中的帐户” (任何Microsoft Entra目录 - 多租户)

    • 重定向 URI (可选) :此设置是可选的。 如果需要使用它,请配置以下设置:

      • 平台:选择“ Web”。
      • URI:输入发送访问令牌的 URI。

      注意

      无法为 本机应用程序创建凭据,因为不能将本机应用程序用于自动化应用程序。

      注册应用程序。

    完成应用注册页面后,选择“注册”。

  4. 你将被带到刚刚注册的应用的 “概述 ”页。 使此页面保持打开状态。 会在下一步中用到它。

步骤2:向应用程序分配 API 权限

在本部分中,选择以下方法 之一 ,为应用分配 API 权限:

  • 从门户选择并分配 API 权限。
  • 修改应用清单以分配 API 权限。 (Microsoft 365 GCC High 和 DoD 组织应使用此方法)

从门户选择并分配 API 权限

  1. 在“应用概述”页上,从“管理”部分选择“API 权限”。

    在应用程序概述页上选择“API 权限”。

  2. 在“应用 API 权限” 页上,选择“ 添加权限”。

    在应用程序的“API 权限”页上选择“添加权限”。

  3. 在打开的“请求 API 权限”浮出控件中,选择“我的组织使用的 API”选项卡,开始在“搜索”框中键入Office 365 Exchange Online,然后从结果中选择它。

    在“我的组织使用的 API”选项卡上查找并选择Office 365 Exchange Online。

  4. 在显示的“ 应用程序需要哪些类型的权限?” 浮出控件上,选择“ 应用程序权限”。

  5. 在显示的权限列表中,展开 “Exchange”,选择“ Exchange.ManageAsApp”,然后选择“ 添加权限”。

    从“应用程序权限”选项卡中查找并选择“Exchange.ManageAsApp 权限”。

  6. 返回应用 API 权限页,验证 Office 365 Exchange Online>Exchange.ManageAsApp 是否列出并包含以下值:

    • 类型应用程序

    • 需要同意管理员

    • 状态:未为<组织>授予当前不正确的值。

      通过选择“授予<组织的>管理员同意”,阅读打开的确认对话框,然后选择“”来更改此值。

      管理员需要同意,但不授予 Exchange.ManageAsApp 权限。

      状态”值现在已为<“组织>授予”。

      管理员授予 Exchange.ManageAsApp 权限的同意。

  7. 对于默认的 Microsoft Graph>User.Read 条目,请选择... >撤销管理员同意,然后在打开的确认对话框中选择“ ”,将 “状态” 返回到默认空白值。

    管理员默认 Microsoft Graph User.Read 权限中删除同意。

  8. 关闭当前 API 权限 页面(不是浏览器选项卡),以返回 应用注册 页面。 在后续步骤中使用应用注册页。

修改应用清单以分配 API 权限

注意

本部分中的过程追加对应用的现有默认权限, (Microsoft Graph) 中委托的 User.Read 权限,以及 Office 365 Exchange Online 中所需的应用程序 Exchange.ManageAsApp 权限。

  1. 在“应用概述”页上,从“管理”部分选择“清单”。

    在应用程序概述页上选择“清单”。

  2. 在“应用 清单” 页上,找到 requiredResourceAccess 第 42 行 () 的条目,并使条目类似于以下代码片段:

    "requiredResourceAccess": [
        {
            "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
            "resourceAccess": [
                {
                    "id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
                    "type": "Role"
                }
            ]
        },
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                }
            ]
        }
    ],
    

    注意

    Microsoft 365 GCC High 或 DoD 环境只能访问安全性 & 合规性 PowerShell。 对 requiredResourceAccess 条目使用以下值:

    "requiredResourceAccess": [
        {
            "resourceAppId": "00000007-0000-0ff1-ce00-000000000000",
            "resourceAccess": [
                {
                    "id": "455e5cd2-84e8-4751-8344-5672145dfa17",
                    "type": "Role"
                }
            ]
        },
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                }
            ]
        }
    ],
    

    完成 “清单 ”页后,选择“ 保存”。

  3. 仍在“清单”页上,从“管理”部分选择“API 权限”。

    从“清单”页中选择“API 权限”。

  4. “API 权限”页上,验证是否列出了Office 365 Exchange Online>Exchange.ManageAsApp 并包含以下值:

    • 类型应用程序

    • 需要同意管理员

    • 状态:未为<组织>授予Office 365 Exchange Online>Exchange.ManageAsApp 条目的当前错误值。

      通过选择“授予组织的>管理员同意<”,阅读打开的确认对话框,然后选择“”来更改“状态”值。

      管理员需要同意,但不授予 Exchange.ManageAsApp 权限。

      状态”值现在已为<“组织>授予”。

      管理员授予 Exchange.ManageAsApp 权限的同意。

  5. 对于默认的 Microsoft Graph>User.Read 条目,请选择... >撤销管理员同意,然后在打开的确认对话框中选择“ ”,将 “状态” 返回到默认空白值。

    管理员默认 Microsoft Graph User.Read 权限中删除同意。

  6. 关闭当前 API 权限 页面(不是浏览器选项卡),以返回 应用注册 页面。 在后续步骤中使用应用注册页。

步骤 3:创建自签名证书

使用下列方法之一创建一个自签名 x.509 证书:

  • (推荐)使用升级(以管理员运行)的 Windows PowerShell 会话中 New-SelfSignedCertificateExport-CertificateExport-PfxCertificate cmdlet 来请求自签名证书,并将其导出为 .cer.pfx(默认为 SHA1)。 例如:

    # Create certificate
    $mycert = New-SelfSignedCertificate -DnsName "contoso.org" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1) -KeySpec KeyExchange
    
    # Export certificate to .pfx file
    $mycert | Export-PfxCertificate -FilePath mycert.pfx -Password (Get-Credential).password
    
    # Export certificate to .cer file
    $mycert | Export-Certificate -FilePath mycert.cer
    
  • 使用 Create-SelfSignedCertificate script 脚本生成 SHA1 证书。

    .\Create-SelfSignedCertificate.ps1 -CommonName "MyCompanyName" -StartDate 2021-01-06 -EndDate 2022-01-06
    

步骤 4:将证书附加到 Microsoft Entra 应用程序

在应用程序中注册证书后,可以使用私钥(.pfx )或缩略图进行身份验证。

  1. 步骤 2 末尾的“应用注册”页上的“拥有的应用程序”选项卡上,选择应用程序。

    如果需要返回到 “应用注册 ”页,请使用 https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/RegisteredApps,验证是否已选中“ 拥有的应用程序 ”选项卡,然后选择应用程序。

    选择你的应用的应用注册页面。

  2. 在打开的应用程序页上,从“管理”部分选择“证书 & 机密”。

    在应用程序属性页上选择“证书 & 机密”。

  3. “证书 & 机密 ”页上,选择“ 上传证书”。

    在“证书 & 机密”页上选择“上传证书”。

    在打开的对话框中,浏览到在 步骤 3 中创建的自签名证书(.cer 文件)。

    浏览到证书,然后选择“添加”。

    完成后,选择“添加”。

    现在,证书显示在 证书 部分中。

    显示已添加证书的应用程序页面。

  4. 关闭当前 证书和机密 页面,然后关闭 应用注册 页面,已返回到主 https://portal.azure.com/ 页。 你会在下一步中用到它。

如果在步骤 1 中为Exchange Online委托方案创建应用程序多租户,则需要向管理员授予 Exchange.ManageAsApp 权限,以便应用程序可以在每个租户组织中的Exchange Online运行 cmdlet。 为此,请为每个客户租户生成管理员同意 URL。 在任何人使用多租户应用程序连接到租户组织中的Exchange Online之前,客户租户中的管理员应打开以下 URL:

https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=<client-id>&scope=https://outlook.office365.com/.default

  • <tenant-id> 是客户的租户 ID。
  • <client-id> 是多租户应用程序的 ID。
  • 默认范围用于授予应用程序权限。

有关 URL 语法的详细信息,请参阅 向目录管理员请求权限

步骤 5:向应用程序分配Microsoft Entra角色

方法有以下两种:

  • 将Microsoft Entra角色分配给应用程序
  • 使用服务主体将自定义角色组分配给应用程序:仅当在 REST API 模式下连接到 Exchange Online PowerShell 或 Security & Compliance PowerShell 时,才支持此方法。 安全性 & 合规性 PowerShell 支持 v3.2.0 或更高版本中的 REST API 模式。

注意

还可以结合使用这两种方法来分配权限。 例如,可以将Microsoft Entra角色用于“Exchange 收件人管理员”角色,还可以分配自定义 RBAC 角色来扩展权限。

对于Exchange Online委托方案中的多租户应用程序,需要在每个客户租户中分配权限。

将Microsoft Entra角色分配给应用程序

下表介绍了受支持的Microsoft Entra角色:

Role Exchange Online
PowerShell
安全与合规
PowerShell
合规性管理员
Exchange 管理员*
Exchange 收件人管理员
全局管理员*
全局读取器
支持管理员
安全管理员*
安全读取器

* 全局管理员和 Exchange 管理员角色为 Exchange Online PowerShell 中的任何任务提供所需的权限。 例如:

  • 收件人管理。
  • 安全和保护功能。 例如,反垃圾邮件、反恶意软件、反钓鱼和关联的报表。

安全管理员角色没有适用于这些相同任务的所需权限。

有关在 Microsoft Entra ID 中分配角色的一般说明,请参阅向用户分配Microsoft Entra角色

注意

以下步骤对于 Exchange Online PowerShell 与安全与合规 PowerShell 来说略有不同。 将显示适用于这两个环境的步骤。 要为这两个环境配置角色,请重复本部分中的步骤。

  1. 在 Microsoft Entra 管理中心 中的 https://portal.azure.com/,开始在页面顶部的“搜索”框中键入角色和管理员,然后从“服务”部分的结果中选择“Microsoft Entra角色和管理员”。

    显示Azure 门户主页上的 搜索结果中的Microsoft Entra角色和管理员的屏幕截图。

    或者,若要直接转到“Microsoft Entra角色和管理员”页,请使用 https://portal.azure.com/#view/Microsoft_AAD_IAM/AllRolesBlade

  2. 在打开的 角色和管理员 页面上,通过在结果中 单击角色名称 查找并选择受支持角色之一。

    • Exchange Online PowerShell:例如,查找并选择 Exchange 管理员角色。

      通过单击角色名称来查找并选择受支持的 Exchange Online PowerShell 角色。

    • 安全性 & 合规性 PowerShell:例如,查找并选择 合规性管理员 角色。

      通过单击角色名称查找并选择受支持的安全性 & 符合性 PowerShell 角色。

  3. 在打开 的“作业 ”页上,选择“ 添加作业”。

    • Exchange Online PowerShell

      在 Exchange Online PowerShell 的角色分配页上选择“添加分配”。

    • 安全与合规 PowerShell

      在“安全性 & 符合性 PowerShell”的角色分配页上选择“添加分配”。

  4. 在打开的“添加分配”浮出控件中,查找并选择在 步骤 1 中创建的应用。

    在“添加分配”浮出控件上查找并选择你的应用。

    完成“ 添加分配 ”浮出控件后,选择“ 添加”。

  5. 返回“ 分配” 页,验证角色是否已分配给应用。

    • Exchange Online PowerShell

      将应用添加到 Exchange Online PowerShell 角色后的角色分配页。

    • 安全与合规 PowerShell

      之后的角色分配页,将应用添加到安全 & 符合性 PowerShell 的角色。

使用服务主体将自定义角色组分配给应用程序

注意

在完成创建新服务主体的步骤之前,需要连接到 Exchange Online PowerShell 或 Security & Compliance PowerShell。 (需要Azure 应用 ID 和对象 ID 来创建新的服务主体) ,则无需连接到 PowerShell 即可创建新的服务主体。

仅当在 REST API 模式下连接到 Exchange Online PowerShell 或安全性 & 符合性 PowerShell 时,才支持此方法。 安全性 & 合规性 PowerShell 支持 v3.2.0 或更高版本中的 REST API 模式。

有关创建自定义角色组的信息,请参阅在 Exchange Online 中创建角色组和在 Microsoft Defender 门户中创建Email &协作角色组。 分配给应用程序的自定义角色组可以包含内置角色和自定义角色的任意组合。

若要使用服务主体将自定义角色组分配给应用程序,请执行以下步骤:

  1. Microsoft Graph PowerShell 中运行以下命令,将步骤 1 中注册的 Microsoft Entra 应用程序的详细信息存储在变量中:

    Connect-MgGraph -Scopes AppRoleAssignment.ReadWrite.All,Application.Read.All
    
    $<VariableName1> = Get-MgServicePrincipal -Filter "DisplayName eq '<AppName>'"
    

    例如:

    Connect-MgGraph -Scopes AppRoleAssignment.ReadWrite.All,Application.Read.All
    
    $AzureADApp = Get-MgServicePrincipal -Filter "DisplayName eq 'ExO PowerShell CBA'"
    

    有关详细语法和参数信息,请参阅 Get-MgServicePrincipal

  2. 在同一 PowerShell 窗口中,连接到 Exchange Online PowerShell安全性 & 符合性 PowerShell,并运行以下命令:

    • 为 Microsoft Entra 应用程序创建服务主体对象。
    • 将服务主体的详细信息存储在变量中,以用于下一步。
    New-ServicePrincipal -AppId $<VariableName1>.AppId -ObjectId $<VariableName1>.Id -DisplayName "<Descriptive Name>"
    
    $<VariableName2> = Get-ServicePrincipal -Identity "<Descriptive Name>"
    

    例如:

    New-ServicePrincipal -AppId $AzureADApp.AppId -ObjectId $AzureADApp.Id -DisplayName "SP for Azure AD App ExO PowerShell CBA"
    
    $SP = Get-ServicePrincipal -Identity "SP for Azure AD App ExO PowerShell CBA"
    

    有关详细语法和参数信息,请参阅 New-ServicePrincipal

  3. 在 Exchange Online PowerShell 或安全性 & 合规性 PowerShell 中,运行以下命令,将服务主体添加为自定义角色组的成员:

    Add-RoleGroupMember -Identity "<CustomRoleGroupName>" -Member <$<VariableName2>.Identity | $<VariableName2>.ObjectId | $<VariableName2>.Id>
    

    例如:

    Add-RoleGroupMember -Identity "Contoso View-Only Recipients" -Member $SP.Identity
    

    有关语法和参数的详细信息,请参阅 Add-RoleGroupMember