排查验证输入参数时经常遇到的错误

本文介绍验证输入参数时可能发生的错误及其解决方法。

如果在创建本地参数时遇到任何问题,请使用 此脚本 获取帮助。

此脚本旨在帮助排查和解决与本地参数创建相关的问题。 访问脚本并利用其功能来解决创建本地参数期间可能遇到的任何困难。

按照以下步骤运行脚本:

  1. 下载脚本并使用 -Help 选项运行该脚本以获取参数。
  2. 使用域凭据登录到已加入域的计算机。 计算机必须位于用于 SCOM 托管实例的域中。 登录后,使用指定的参数运行脚本。
  3. 如果任何验证失败,请根据脚本的建议采取纠正措施,并重新运行脚本,直到它通过所有验证。
  4. 所有验证都成功后,请使用脚本中使用的相同参数,例如创建。

验证检查和详细信息

验证 说明
Azure 输入验证检查
在测试计算机上设置先决条件 1. 安装 AD PowerShell 模块。
2. 组策略 PowerShell 模块安装。
Internet 连接 检查出站 Internet 连接在测试服务器上是否可用。
SQL MI 连接 检查是否可从创建测试服务器的网络访问提供的 SQL MI。
DNS 服务器连接 检查提供的 DNS 服务器 IP 是否可访问并解析为有效的 DNS 服务器。
域连接 检查提供的域名是否可访问并解析为有效的域。
域加入验证 使用提供的 OU 路径和域凭据检查域加入是否成功。
静态 IP 和 LB FQDN 关联 根据提供的 DNS 名称检查是否已为提供的静态 IP 创建 DNS 记录。
计算机组验证 检查提供的计算机组是否由提供的域用户管理,并且管理员可以更新组成员身份。
gMSA 帐户验证 检查提供的 gMSA:
- 是否已启用。
- 将其 DNS 主机名设置为 LB 提供的 DNS 名称。
- SAM 帐户名称长度不超过 15 个字符。
- 设置了正确的 SPN。
密码可由提供的计算机组的成员检索。
组策略验证 检查托管管理) 服务器的域 (或 OU 路径是否受任何组策略的影响,这将更改本地管理员组。
验证后清理 从域取消加入。

运行验证脚本的一般准则

在载入过程中,验证在验证阶段/选项卡中执行。如果所有验证都成功,则可以进入创建 SCOM 托管实例的最后阶段。 但是,如果任何验证失败,则无法继续创建。

如果多次验证失败,最佳方法是在测试计算机上手动运行 验证脚本 ,一次性解决所有问题。

重要

最初,在为 SCOM 托管实例创建选择的同一子网中创建新的测试 Windows Server (2022/2019) 虚拟机 (VM) 。 随后,AD 管理员和网络管理员可以单独使用此 VM 来验证其各自更改的有效性。 此方法可显著节省 AD 管理员与网络管理员之间来回通信所花费的时间。

按照以下步骤运行验证脚本:

  1. 为 SCOM 托管实例创建所选子网中的 Windows Server 2022 或 2019 上运行的新虚拟机 (VM) 生成新的虚拟机。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。 例如,请参阅以下内容:

    属性的屏幕截图。

  2. 将验证脚本下载到测试 VM 并提取。 它由五个文件组成:

    • ScomValidation.ps1
    • RunValidationAsSCOMAdmin.ps1
    • RunValidationAsActiveDirectoryAdmin.ps1
    • RunValidationAsNetworkAdmin.ps1
    • Readme.txt
  3. 按照 Readme.txt 文件中提到的步骤运行 RunValidationAsSCOMAdmin.ps1。 在运行之前,请确保在 RunValidationAsSCOMAdmin.ps1 中用适用的值填充设置值。

    # $settings = @{
    #   Configuration = @{
    #         DomainName="test.com"                 
    #         OuPath= "DC=test,DC=com"           
    #         DNSServerIP = "190.36.1.55"           
    #         UserName="test\testuser"              
    #         Password = "password"                 
    #         SqlDatabaseInstance= "test-sqlmi-instance.023a29518976.database.windows.net" 
    #         ManagementServerGroupName= "ComputerMSG"      
    #         GmsaAccount= "test\testgMSA$"
    #         DnsName= "lbdsnname.test.com"
    #         LoadBalancerIP = "10.88.78.200"
    #     }
    # }
    # Note : Before running this script, please make sure you have provided all the parameters in the settings
    $settings = @{
    Configuration = @{
    DomainName="<domain name>"
    OuPath= "<OU path>"
    DNSServerIP = "<DNS server IP>"
    UserName="<domain user name>"
    Password = "<domain user password>"
    SqlDatabaseInstance= "<SQL MI Host name>"
    ManagementServerGroupName= "<Computer Management server group name>"
    GmsaAccount= "<GMSA account>"
    DnsName= "<DNS name associated with the load balancer IP address>"
    LoadBalancerIP = "<Load balancer IP address>"
    }
    }
    
  4. 通常, RunValidationAsSCOMAdmin.ps1 运行所有验证。 如果要运行特定检查,请打开 ScomValidation.ps1 并注释文件末尾的所有其他检查。 还可以在特定检查中添加断点,以调试检查并更好地了解问题。

        # Default mode is - SCOMAdmin, by default if mode is not passed then it will run all the validations  

    # adding all the checks to result set 

    try { 

        # Connectivity checks 

        $validationResults += Invoke-ValidateStorageConnectivity $settings 

        $results = ConvertTo-Json $validationResults -Compress 

         

        $validationResults += Invoke-ValidateSQLConnectivity $settings 

        $results = ConvertTo-Json $validationResults -Compress 

 

        $validationResults += Invoke-ValidateDnsIpAddress $settings 

        $results = ConvertTo-Json $validationResults -Compress 

 

        $validationResults += Invoke-ValidateDomainControllerConnectivity $settings 

        $results = ConvertTo-Json $validationResults -Compress 

 

        # Parameter validations 

        $validationResults += Invoke-ValidateDomainJoin $settings 

        $results = ConvertTo-Json $validationResults -Compress 

 

        $validationResults += Invoke-ValidateStaticIPAddressAndDnsname $settings 

        $results = ConvertTo-Json $validationResults -Compress 

 

        $validationResults += Invoke-ValidateComputerGroup $settings 

        $results = ConvertTo-Json $validationResults -Compress 

 

        $validationResults += Invoke-ValidategMSAAccount $settings 

        $results = ConvertTo-Json $validationResults -Compress 

             

        $validationResults += Invoke-ValidateLocalAdminOverideByGPO $settings 

        $results = ConvertTo-Json $validationResults -Compress 

    } 

    catch { 

        Write-Verbose -Verbose  $_ 

    } 
  1. 验证脚本显示所有验证检查及其各自的错误,这将有助于解决验证问题。 为了快速解决问题,请使用断点在 PowerShell ISE 中运行脚本,从而加快调试过程。

    如果所有检查都成功通过,请返回到载入页面,然后再次重启载入过程。

Internet 连接

问题:测试服务器上不存在出站 Internet 连接

原因: 由于 DNS 服务器 IP 不正确或网络配置不正确而发生。

解决方法:

  1. 检查 DNS 服务器 IP,并确保 DNS 服务器已启动并运行。
  2. 确保用于 SCOM 托管实例创建的 VNet 具有 DNS 服务器的视线。

问题:无法连接到存储帐户以下载 SCOM 托管实例产品位

原因: 由于 Internet 连接问题而发生。

分辨率:通过在与 SCOM 托管实例相同的子网上创建测试虚拟机,并从测试虚拟机测试出站连接,验证用于 SCOM 托管实例创建的 VNet 是否具有出站 Internet 访问权限。

问题:Internet 连接测试失败。 无法从 VNet 访问所需的终结点

原因:由于 DNS 服务器 IP 不正确或网络配置不正确而发生。

解决方法

  • 检查 DNS 服务器 IP,并确保 DNS 服务器已启动并运行。

  • 确保用于 SCOM 托管实例创建的 VNet 具有 DNS 服务器的视线。

  • 确保 SCOM 托管实例具有出站 Internet 访问权限,并且 NSG/防火墙已正确配置为允许访问所需的终结点,如防火墙要求中所述。

Internet 连接的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateStorageConnectivity的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  4. 若要检查 Internet 连接,请运行以下命令:

    Test-NetConnection www.microsoft.com -Port 80
    

    此命令验证与端口 80 上 www.microsoft.com 的连接。 如果此操作失败,则表示出站 Internet 连接存在问题。

  5. 若要验证 DNS 设置,请运行以下命令:

    Get-DnsClientServerAddress
    

    此命令检索计算机上配置的 DNS 服务器 IP 地址。 确保 DNS 设置正确且可访问。

  6. 若要检查网络配置,请运行以下命令:

    Get-NetIPConfiguration
    

    此命令显示网络配置详细信息。 验证网络设置是否准确且与网络环境匹配。

SQL MI 连接

问题:测试服务器上不存在出站 Internet 连接

原因: 由于 DNS 服务器 IP 不正确或网络配置不正确而发生。

解决方法:

  1. 检查 DNS 服务器 IP 并确保 DNS 服务器已启动并运行。
  2. 确保用于 SCOM 托管实例创建的 VNet 具有 DNS 服务器的视线。

问题:未能在 SQL 托管实例上为 MSI 配置数据库登录

原因:当 MSI 未正确配置为访问 SQL 托管实例时发生。

解决方法:检查 MSI 是否已配置为 SQL 托管实例上的Microsoft Entra 管理员。 确保向 SQL 托管实例提供所需的Microsoft Entra ID权限,以便 MSI 身份验证正常工作。

问题:无法从此实例连接到 SQL MI

原因:发生时,SQL MI VNet 未委派或未正确与 SCOM 托管实例 VNet 对等互连。

解决方法:

  1. 验证 SQL MI 是否已正确配置。
  2. 确保用于创建 SCOM 托管实例的 VNet 通过位于同一 VNet 或 VNet 对等互连中,具有 SQL MI 的视线。

SQL MI 连接的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateSQLConnectivity的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  4. 若要检查出站 Internet 连接,请运行以下命令:

    Test-NetConnection -ComputerName "www.microsoft.com" -Port 80
    

    此命令通过尝试与端口 80 上的 www.microsoft.com 建立连接来验证出站 Internet 连接。 如果连接失败,则表示 Internet 连接存在潜在问题。

  5. 若要验证 DNS 设置和网络配置,请确保 DNS 服务器 IP 地址已正确配置,并在执行验证的计算机上验证网络配置设置。

  6. 若要测试 SQL MI 连接,请运行以下命令:

    Test-NetConnection -ComputerName $sqlMiName -Port 1433
    

    将 替换为 $sqlMiName SQL MI 主机名的名称。

    此命令测试与 SQL MI 实例的连接。 如果连接成功,则表示可以访问 SQL MI。

DNS 服务器连接

问题: (<DNS IP) 提供的 DNS IP> 不正确,或者 DNS 服务器无法访问

分辨率: 检查 DNS 服务器 IP,并确保 DNS 服务器已启动并运行。

DNS 服务器连接的常规故障排除

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateDnsIpAddress的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  4. 若要检查指定 IP 地址的 DNS 解析,请运行以下命令:

    Resolve-DnsName -Name $ipAddress -IssueAction SilentlyContinue
    

    将 替换为 $ipAddress 要验证的 IP 地址。

    此命令检查提供的 IP 地址的 DNS 解析。 如果命令未返回任何结果或引发错误,则表示 DNS 解析存在潜在问题。

  5. 若要验证与 IP 地址的网络连接,请运行以下命令:

    Test-NetConnection -ComputerName $ipAddress -Port 80
    

    将 替换为 $ipAddress 要测试的 IP 地址。

    此命令检查到端口 80 上指定 IP 地址的网络连接。 如果连接失败,则表明存在网络连接问题。

域连接

问题:无法从此网络访问域 <域名> 的域控制器,或者至少一个域控制器上未打开端口

原因: 由于提供的 DNS 服务器 IP 或网络配置有问题而发生。

解决方法:

  1. 检查 DNS 服务器 IP 并确保 DNS 服务器已启动并运行。
  2. 确保域名解析正确定向到为 Azure 或 SCOM 托管实例配置的指定域控制器 (DC) 。 确认此 DC 列在已解析 DC 的顶部。 如果解析定向到不同的 DC 服务器,则表示 AD 域解析存在问题。
  3. 检查域名,并确保 Azure 和 SCOM 托管实例的域控制器配置已启动并正在运行。

    注意

    端口 9389、389/636、88、3268/3269、135、445 应在为 Azure 或 SCOM 托管实例配置的 DC 上打开,DC 上的所有服务都应运行。

域连接的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateDomainControllerConnectivity的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  4. 若要检查域控制器可访问性,请运行以下命令:

    Resolve-DnsName -Name $domainName 
    

    将 替换为 $domainName 要测试的域的名称。

    确保域名解析正确定向到为 Azure 或 SCOM 托管实例配置的指定域控制器 (DC) 。 确认此 DC 列在已解析 DC 的顶部。 如果解析定向到不同的 DC 服务器,则表示 AD 域解析存在问题。

  5. 若要验证 DNS 服务器设置,请执行以下操作:

    • 确保正确配置运行验证的计算机上的 DNS 服务器设置。
    • 验证 DNS 服务器 IP 地址是否准确且可访问。
  6. 若要验证网络配置,请执行以下操作:

    • 验证正在执行验证的计算机上的网络配置设置。
    • 确保计算机已连接到正确的网络,并且具有与域控制器通信所需的网络设置。
  7. 若要在域控制器上测试所需的端口,请运行以下命令:

    Test-NetConnection -ComputerName $domainName -Port $portToCheck
    

    将 替换为 $domainName 要测试的域的名称,并将 $portToCheck 替换为以下列表编号中的每个端口:

    • 389/636
    • 88
    • 3268/3269
    • 135
    • 445

    为上述所有端口执行提供的命令。

    此命令检查指定的端口是否在为 Azure 或 SCOM 配置的指定域控制器上打开,托管实例创建。 如果命令显示连接成功,则表示打开了所需的端口。

域加入验证

问题:测试管理服务器未能加入域

原因: 由于 OU 路径不正确、凭据不正确或网络连接出现问题而发生。

解决方法:

  1. 检查在 Key Vault 中创建的凭据。 用户名和密码机密必须反映正确的用户名,并且用户名值的格式必须是 domain\username 和 password,它们有权将计算机加入域。 默认情况下,用户帐户最多只能向域添加 10 台计算机。 若要配置,请参阅 用户可加入域的工作站数的默认限制
  2. 验证 OU 路径是否正确,并且不会阻止新计算机加入域。

域加入验证的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateDomainJoin的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  4. 使用创建 SCOM 托管实例中使用的域帐户将 VM 加入域。 若要使用凭据将域加入计算机,请运行以下命令:

    
    $domainName = "<domainname>"
    
    
    $domainJoinCredentials = New-Object pscredential -ArgumentList ("<username>", (ConvertTo-SecureString "password" -AsPlainText -Force))
    
    
    
    $ouPath = "<OU path>"
    if (![String]::IsNullOrWhiteSpace($ouPath)) {
    $domainJoinResult = Add-Computer -DomainName $domainName -Credential $domainJoinCredentials -OUPath $ouPath -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
    }
    else {
    $domainJoinResult = Add-Computer -DomainName $domainName -Credential $domainJoinCredentials -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
    }   
    

    将用户名、密码、$domainName$ouPath替换为正确的值。

    运行上述命令后,运行以下命令以检查计算机是否成功加入域:

    Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty PartOfDomain
    

静态 IP 和 LB FQDN 关联

问题:由于服务器无法加入域,因此无法运行测试

分辨率: 确保计算机可以加入域。 按照 域加入验证部分中的故障排除步骤进行操作。

问题:无法解析 DNS 名称<>

分辨率: 提供的 DNS 名称不存在于 DNS 记录中。 检查 DNS 名称,确保它与提供的静态 IP 正确关联。

问题:提供的静态 IP <静态 IP> 和负载均衡器 DNS <DNS 名称>不匹配

分辨率: 检查 DNS 记录并提供正确的 DNS 名称/静态 IP 组合。 有关详细信息,请参阅 创建静态 IP 并配置 DNS 名称

静态 IP 和 LB FQDN 关联的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateStaticIPAddressAndDnsname的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  4. 使用创建 SCOM 托管实例中使用的域帐户将虚拟机加入域。 若要将虚拟机加入域,请按照 域加入验证部分中提供的步骤操作。

  5. 获取 IP 地址和关联的 DNS 名称,并运行以下命令以查看它们是否匹配。 解析 DNS 名称并提取实际 IP 地址:

    $DNSRecord = Resolve-DnsName -Name $DNSName
    $ActualIP = $DNSRecord.IPAddress
    

    如果无法解析 DNS 名称,请确保 DNS 名称有效且与实际 IP 地址相关联。

计算机组验证

问题:由于服务器无法加入域,无法运行测试

分辨率: 确保计算机可以加入域。 按照 域加入验证部分中指定的故障排除步骤进行操作。

问题:在你的域中找不到名称 <为计算机组名称> 的计算机组

分辨率:验证组是否存在并检查提供的名称,或者创建一个新名称(如果尚未创建)。

问题:输入计算机组 <计算机组名称> 不由用户 <域用户名管理>

分辨率: 导航到组属性,并将此用户设置为经理。 有关详细信息,请参阅 创建和配置计算机组

问题:输入计算机组计算机组<名称>的管理员<域用户名>没有管理组成员身份所需的权限

分辨率:导航到“组属性”并检查“管理可以更新成员身份列表”复选框。 有关详细信息,请参阅 创建和配置计算机组

计算机组验证的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidateComputerGroup的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 使用创建 SCOM 托管实例中使用的域帐户将 VM 加入域。 若要将虚拟机加入域,请按照 域加入验证部分中提供的步骤操作。

  4. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  5. 运行以下命令以导入模块:

    Add-WindowsFeature RSAT-AD-PowerShell -ErrorAction SilentlyContinue
    Add-WindowsFeature GPMC -ErrorAction SilentlyContinue
    
  6. 若要验证 VM 是否已加入域,请运行以下命令:

    Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty PartOfDomain
    
  7. 若要验证域是否存在以及当前计算机是否已加入域,请运行以下命令:

    $domainJoinCredentials = New-Object pscredential -ArgumentList ("<username>", (ConvertTo-SecureString "password" -AsPlainText -Force)) 
    $Domain = Get-ADDomain -Current LocalComputer -Credential $domainUserCredentials
    

    password将 替换为$username适用的值。

  8. 若要验证域中是否存在用户,请运行以下命令:

    $DomainUser = Get-ADUser -Identity $username -Credential $domainUserCredentials
    

    将 替换为$username$domainUserCredentials适用的值

  9. 若要验证域中是否存在计算机组,请运行以下命令:

    $ComputerGroup = Get-ADGroup -Identity $computerGroupName -Properties ManagedBy,DistinguishedName -Credential $domainUserCredentials
    

    $domainUserCredentials将 替换为$computerGroupName适用的值。

  10. 如果用户和计算机组存在,则确定该用户是否是计算机组的经理。

    Import-Module ActiveDirectory
      	$DomainDN = $Domain.DistinguishedName
      $GroupDN = $ComputerGroup.DistinguishedName
     $RightsGuid = [GUID](Get-ItemProperty "AD:\CN=Self-Membership,CN=Extended-Rights,CN=Configuration,$DomainDN" -Name rightsGuid -Credential $domainUserCredentials | Select-Object -ExpandProperty rightsGuid)
    
      # Run Get ACL under the give credentials
      $job = Start-Job -ScriptBlock {
          param (
              [Parameter(Mandatory = $true)]
              [string] $GroupDN,
              [Parameter(Mandatory = $true)]
              [GUID] $RightsGuid
          )
    
      Import-Module ActiveDirectory
      $AclRule = (Get-Acl -Path "AD:\$GroupDN").GetAccessRules($true,$true,[System.Security.Principal.SecurityIdentifier]) |  Where-Object {($_.ObjectType -eq $RightsGuid) -and ($_.ActiveDirectoryRights -like '*WriteProperty*')}
          return $AclRule
    
      } -ArgumentList $GroupDN, $RightsGuid -Credential $domainUserCredentials
    
      $timeoutSeconds = 20
      $jobResult = Wait-Job $job -Timeout $timeoutSeconds
    
      # Job did not complete within the timeout
      if ($null -eq $jobResult) {
          Write-Host "Checking permissions, timeout after 10 seconds."
          Remove-Job $job -Force
      } else {
          # Job completed within the timeout
          $AclRule = Receive-Job $job
          Remove-Job $job -Force
      }
    
      $managerCanUpdateMembership = $false
      if (($null -ne $AclRule) -and ($AclRule.AccessControlType -eq 'Allow') -and ($AclRule.IdentityReference -eq $DomainUser.SID)) {
          $managerCanUpdateMembership = $true
    
    

    如果 managerCanUpdateMembershipTrue,则域用户对计算机组具有更新成员身份权限。 如果 managerCanUpdateMembershipFalse,则向域用户授予计算机组管理权限。

gMSA 帐户验证

问题:由于服务器无法加入域,测试未运行

分辨率: 确保计算机可以加入域。 按照 域加入验证部分中指定的故障排除步骤进行操作。

问题:在域中找不到名称 <为计算机组名称> 的计算机组。 此组的成员必须能够检索 gMSA 密码

分辨率:验证组是否存在,并检查提供的名称。

问题:在你的域中找不到具有名称<域 gMSA 的 gMSA>

分辨率:验证 gMSA 帐户是否存在,并检查提供的名称,或者创建一个新帐户(如果尚未创建)。

问题:gMSA <域 gMSA> 未启用

分辨率: 使用以下命令启用它:

Set-ADServiceAccount -Identity <domain gMSA> -Enabled $true

问题:gMSA <域 gMSA> 需要将其 DNS 主机名设置为 <DNS 名称>

分辨率: gMSA 未 DNSHostName 正确设置 属性。 DNSHostName使用以下命令设置 属性:

Set-ADServiceAccount -Identity <domain gMSA> -DNSHostName <DNS Name>

问题:gMSA 域 gMSA <> 的 Sam 帐户名称超出了 15 个字符的限制

分辨率:SamAccountName使用以下命令设置 :

Set-ADServiceAccount -Identity <domain gMSA> -SamAccountName <shortname$>

问题:需要将计算机组 <计算机组名称> 设置为 gMSA 域 gMSA <的 PrincipalsAllowedToRetrieveManagedPassword>

分辨率: gMSA 未 PrincipalsAllowedToRetrieveManagedPassword 正确设置。 PrincipalsAllowedToRetrieveManagedPassword使用以下命令设置 :

Set-ADServiceAccount -Identity <domain gMSA> - PrincipalsAllowedToRetrieveManagedPassword <computer group name>

问题:尚未为 gMSA 域 gMSA <正确设置 SPN>

分辨率: gMSA 未设置正确的服务主体名称。 使用以下命令设置服务主体名称:

Set-ADServiceAccount -Identity <domain gMSA> -ServicePrincipalNames <set of SPNs>

gMSA 帐户验证的常规故障排除步骤

  1. 在所选子网中生成新的虚拟机 (VM) 在所选子网中运行,以便创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行ScomValidation.ps1脚本中调用Invoke-ValidategMSAAccount的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般指南

  3. 使用创建 SCOM 托管实例中使用的域帐户将 VM 加入域。 若要将虚拟机加入域,请按照 域加入验证部分中提供的步骤操作。

  4. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 “不受限制”。

  5. 运行以下命令以导入模块:

    Add-WindowsFeature RSAT-AD-PowerShell -ErrorAction SilentlyContinue
    Add-WindowsFeature GPMC -ErrorAction SilentlyContinue
    
  6. 若要验证服务器是否已成功加入域,请运行以下命令:

    (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
    
  7. 若要检查计算机组的存在,请运行以下命令:

    $Credentials = New-Object pscredential -ArgumentList ("<username>", (ConvertTo-SecureString "password" -AsPlainText -Force))
    $adGroup = Get-ADGroup -Identity $computerGroupName -Properties ManagedBy,DistinguishedName -Credential $Credentials
    

    将 username、password 和 computerGroupName 替换为适用的值。

  8. 若要检查 gMSA 帐户的存在,请运行以下命令:

    $adServiceAccount = Get-ADServiceAccount -Identity gMSAAccountName -Properties DNSHostName,Enabled,PrincipalsAllowedToRetrieveManagedPassword,SamAccountName,ServicePrincipalNames -Credential $Credentials
    
  9. 若要验证 gMSA 帐户属性,检查是否启用了 gMSA 帐户:

    (Get-ADServiceAccount -Identity <GmsaAccount>).Enabled
    

    如果命令返回 False,请在域中启用帐户。

  10. 若要验证 gMSA 帐户的 DNS 主机名是否与提供的 DNS 名称 (LB DNS 名称) 匹配,请运行以下命令:

    (Get-ADServiceAccount -Identity <GmsaAccount>).DNSHostName
    

    如果命令未返回预期的 DNS 名称,请将 gMsaAccount 的 DNS 主机名更新为 LB DNS 名称。

  11. 确保 gMSA 帐户的 Sam 帐户名称不超过 15 个字符的限制:

    (Get-ADServiceAccount -Identity <GmsaAccount>).SamAccountName.Length
    
  12. 若要验证 PrincipalsAllowedToRetrieveManagedPassword 属性,请运行以下命令:

    检查指定的计算机组是否设置为 gMSA 帐户的“PrincipalsAllowedToRetrieveManagedPassword”:

    (Get-ADServiceAccount -Identity <GmsaAccount>).PrincipalsAllowedToRetrieveManagedPassword -contains (Get-ADGroup -Identity <ComputerGroupName>).DistinguishedName
    

    将 和 ComputerGroupName 替换为gMSAAccount适用的值。

  13. 若要验证 gMSA 帐户的服务主体名称 (SPN) ,请运行以下命令:

    $CorrectSPNs = @("MSOMSdkSvc/$dnsHostName", "MSOMSdkSvc/$dnsName", "MSOMHSvc/$dnsHostName", "MSOMHSvc/$dnsName")
    (Get-ADServiceAccount -Identity <GmsaAccount>).ServicePrincipalNames
    

    检查结果是否具有正确的 SPN。 将 替换为 $dnsName SCOM 托管实例创建中给定的 LB DNS 名称。 将 替换为 $dnsHostName LB DNS 短名称。 例如:MSOMHSvc/ContosoLB.domain.com、MSOMHSvc/ContosoLB、MSOMSdkSvc/ContosoLB.domain.com 和 MSOMSdkSvc/ContosoLB 是服务主体名称。

组策略验证

重要

若要修复 GPO 策略,请与 Active Directory 管理员协作,并从以下策略中排除 System Center Operations Manager:

  • 修改或替代本地管理员组配置的 GPO。
  • 停用网络身份验证的 GPO。
  • 评估阻止本地管理员远程登录的 GPO。

问题:由于服务器无法加入域,无法运行此测试

分辨率: 确保计算机加入域。 按照 域加入验证部分中的故障排除步骤进行操作。

问题:在你的域中找不到域名 <为 gMSA 的 gMSA> 。 此帐户必须是服务器上的本地管理员

分辨率: 验证帐户是否存在,并确保 gMSA 和域用户是本地管理员组的一部分。

问题:无法将帐户 <域用户名> 和 <域 gMSA> 添加到测试管理服务器上的本地管理员组,或者在组策略更新后未保留在组中

分辨率: 确保提供的域用户名和 gMSA 输入正确,包括 (domain\account) 的全名。 此外,如果测试计算机上有任何组策略由于在 OU 或域级别创建的策略而替代本地 Administrators 组,则检查。 gMSA 和域用户必须是本地管理员组的一部分,SCOM 托管实例才能正常工作。 必须从覆盖本地管理员组的任何策略中排除 SCOM 托管实例计算机, (AD 管理员) 。

问题:SCOM 托管实例失败

原因: 域中的组策略 (名称: <组策略名称>) 覆盖测试管理服务器上的本地 Administrators 组,无论是在包含服务器的 OU 上还是域的根。

分辨率:确保 SCOM 托管实例管理服务器的 OU (<OU 路径>) 不受任何策略替代组的影响。

组策略验证的常规故障排除步骤

  1. (所选子网中 Windows Server 2022 或 2019 上运行的 VM) 生成新的虚拟机,以便创建 SCOM 托管实例。 登录到 VM,并将其 DNS 服务器配置为使用创建 SCOM 托管实例期间使用的同一 DNS IP。

  2. 可以按照下面提供的分步说明进行操作,或者如果熟悉 PowerShell,请执行在ScomValidation.ps1脚本中调用Invoke-ValidateLocalAdminOverideByGPO的特定检查。 有关在测试计算机上独立运行验证脚本的详细信息,请参阅 运行验证脚本的一般准则

  3. 使用 SCOM 托管实例创建中使用的域帐户将 VM 加入域。 若要将虚拟机加入域,请按照 域加入验证部分中提供的步骤进行操作。

  4. 在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted

  5. 运行以下命令以导入模块:

    Add-WindowsFeature RSAT-AD-PowerShell -ErrorAction SilentlyContinue
    Add-WindowsFeature GPMC -ErrorAction SilentlyContinue
    
  6. 若要验证服务器是否已成功加入域,请运行以下命令:

    (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
    

    命令必须返回 True

  7. 若要检查 gMSA 帐户是否存在,请运行以下命令:

    Get-ADServiceAccount -Identity <GmsaAccount>
    
  8. 若要验证本地 Administrators 组中是否存在用户帐户,请运行以下命令:

    $domainJoinCredentials = New-Object pscredential -ArgumentList ("<username>", (ConvertTo-SecureString "password" -AsPlainText -Force)) 
    $addToAdminResult = Add-LocalGroupMember -Group "Administrators" -Member $userName, $gMSAccount -ErrorAction SilentlyContinue 
    $gpUpdateResult = gpupdate /force 
    $LocalAdmins = Get-LocalGroupMember -Group 'Administrators' | Select-Object -ExpandProperty Name
    

    <UserName><GmsaAccount> 替换为实际值。

  9. 若要确定域和组织单位 (OU) 详细信息,请运行以下命令:

    Get-ADOrganizationalUnit -Filter "DistinguishedName -like '$ouPathDN'" -Properties CanonicalName -Credential $domainUserCredentials
    

    将 <OuPathDN> 替换为实际 OU 路径。

  10. 若要从域获取 GPO (组策略 对象) 报告,并检查在本地 Administrators 组上替代策略,请运行以下命令:

     [xml]$gpoReport = Get-GPOReport -All -ReportType Xml -Domain <domain name>
     foreach ($GPO in $gpoReport.GPOS.GPO) {
         # Check if the GPO links to the entire domain, or the input OU if provided
         if (($GPO.LinksTo.SOMPath -eq $domainName) -or ($GPO.LinksTo.SOMPath -eq $ouPathCN)) {
             # Check if there is a policy overriding the Local Users and Groups
             if ($GPO.Computer.ExtensionData.Extension.LocalUsersAndGroups.Group) {
             $GroupPolicy = $GPO.Computer.ExtensionData.Extension.LocalUsersAndGroups.Group | Select-Object @{Name='RemoveUsers';Expression={$_.Properties.deleteAllUsers}},@{Name='RemoveGroups';Expression={$_.Properties.deleteAllGroups}},@{Name='GroupName';Expression={$_.Properties.groupName}}
             # Check if the policy is acting on the BUILTIN\Administrators group, and whether it is removing other users or groups
             if (($GroupPolicy.groupName -eq "Administrators (built-in)") -and (($GroupPolicy.RemoveUsers -eq 1) -or ($GroupPolicy.RemoveGroups -eq 1))) {
              $overridingPolicyFound = $true
              $overridingPolicyName = $GPO.Name
                 }
             }
         }
     }
     if($overridingPolicyFound) {
      Write-Warning "Validation failed. A group policy in your domain (name: $overridingPolicyName) is overriding the local Administrators group on this machine. This will cause SCOM MI installation to fail. Please ensure that the OU for SCOM MI Management Servers is not affected by this policy"
     }
     else {
      Write-Output "Validation suceeded. No group policy found in your domain which overrides local Administrators. "
     }
    

如果脚本执行发出“ 验证失败”警告,则存在替代本地管理员组) 警告消息中的策略 (名称。 请与 Active Directory 管理员联系,并从策略中排除 System Center Operations Manager 管理服务器。