你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
排查验证输入参数时经常遇到的错误
本文介绍验证输入参数时可能出现的错误以及如何解决这些错误。
如果在创建本地参数时遇到任何问题,请使用此脚本寻求帮助。
此脚本旨在帮助排除故障并解决与本地参数创建相关的问题。 访问脚本并利用脚本功能来解决在创建本地参数期间可能遇到的任何困难。
按照以下步骤运行脚本:
- 下载脚本并使用 -Help 选项运行该脚本以获取参数。
- 使用已加入域的计算机的域凭据登录。 计算机必须位于用于 SCOM 托管实例的域中。 登录后,使用指定的参数运行脚本。
- 如果任意验证失败,请按照脚本建议采取纠正措施并重新运行该脚本,直到通过所有验证。
- 所有验证都成功后,请使用脚本中的相同参数来创建实例。
验证检查和详细信息
验证 | 说明 |
---|---|
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 管理员与网络管理员之间的来回通信所花费的时间。
按照以下步骤运行验证脚本:
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。 例如,请参阅以下内容:
将验证脚本下载到测试 VM 并执行解压缩。 此脚本由五个文件组成:
- ScomValidation.ps1
- RunValidationAsSCOMAdmin.ps1
- RunValidationAsActiveDirectoryAdmin.ps1
- RunValidationAsNetworkAdmin.ps1
- Readme.txt
按照 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>" } }
通常情况下,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 $_
}
验证脚本会显示所有验证检查及其各自的错误,这有助于解决验证问题。 为了快速解决问题,请在 PowerShell ISE 中运行脚本并设置断点,这样可以加快调试过程。
如果所有检查都成功通过,请返回到载入页面并再次重启载入过程。
Internet 连接
问题:测试服务器上不存在出站 Internet 访问
原因:由于 DNS 服务器 IP 不正确或网络配置不正确所致。
解决方法:
- 检查 DNS 服务器 IP,并确保 DNS 服务器正在运行。
- 确保用于创建 SCOM 托管实例的 VNet 具有 DNS 服务器的访问权限。
问题:无法连接到存储帐户以下载 SCOM 托管实例产品组件
原因:由于 Internet 访问问题所致。
解决方法:通过在与 SCOM 托管实例所处的相同子网上创建测试虚拟机并从测试虚拟机测试出站连接,验证用于创建 SCOM 托管实例的 VNet 是否具有出站 Internet 访问权限。
问题:Internet 访问测试失败。 无法从 VNet 访问所需的终结点
原因:由于 DNS 服务器 IP 不正确或网络配置不正确所致。
解决方法:
检查 DNS 服务器 IP,并确保 DNS 服务器正在运行。
确保用于创建 SCOM 托管实例的 VNet 具有 DNS 服务器的访问权限。
确保 SCOM 托管实例具有出站 Internet 访问权限,并且 NSG/防火墙已正确配置,以允许访问所需终结点,如防火墙要求中所述。
针对 Internet 访问的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateStorageConnectivity
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
若要检查 Internet 访问,请运行以下命令:
Test-NetConnection www.microsoft.com -Port 80
此命令会验证端口 80 上与 www.microsoft.com 的连接。 如果失败,则表明出站 Internet 访问存在问题。
若要验证 DNS 设置,请运行以下命令:
Get-DnsClientServerAddress
此命令会检索计算机上配置的 DNS 服务器 IP 地址。 确保 DNS 设置正确且可访问。
若要检查网络配置,请运行以下命令:
Get-NetIPConfiguration
此命令显示网络配置详细信息。 验证网络设置准确无误并与网络环境匹配。
SQL MI 连接
问题:测试服务器上不存在出站 Internet 访问
原因:由于 DNS 服务器 IP 不正确或网络配置不正确所致。
解决方法:
- 检查 DNS 服务器 IP,并确保 DNS 服务器正在运行。
- 确保用于创建 SCOM 托管实例的 VNet 具有 DNS 服务器的访问权限。
问题:无法在 SQL 托管实例上为 MSI 配置数据库登录
原因:MSI 配置不当,无法访问 SQL 托管实例。
解决方法:检查是否在 SQL 托管实例上将 MSI 配置为 Microsoft Entra 管理员。 确保向 SQL 托管实例提供所需的 Microsoft Entra ID 权限,以使 MSI 身份验证能够正常运行。
问题:无法从此实例连接到 SQL MI
原因:发生这种情况是因为 SQL MI VNet 未被委托或未与 SCOM 托管实例 VNet 正确对等互联。
解决方法:
- 验证是否已正确配置 SQL MI。
- 确保可以通过以下方法,让用于创建 SCOM 托管实例的 VNet 可以访问 SQL MI:在 SQL MI 所处的同一 VNet 种创建 SCOM 托管实例或使用 VNet 对等互连。
针对 SQL MI 连接的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateSQLConnectivity
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
若要检查出站 Internet 访问,请运行以下命令:
Test-NetConnection -ComputerName "www.microsoft.com" -Port 80
此命令通过尝试在端口 80 上建立与 www.microsoft.com 的连接来验证出站 Internet 访问。 如果连接失败,则表示 Internet 访问可能存在问题。
若要验证 DNS 设置和网络配置,请确保正确配置 DNS 服务器 IP 地址,并在执行验证的计算机上验证网络配置设置。
若要测试 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 服务器连接的常规故障排除
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateDnsIpAddress
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
若要检查指定 IP 地址的 DNS 解析,请运行以下命令:
Resolve-DnsName -Name $ipAddress -IssueAction SilentlyContinue
将
$ipAddress
替换为要验证的 IP 地址。此命令用于查看所提供 IP 地址的 DNS 解析。 如果该命令没有返回任何结果或抛出错误,则表明 DNS 解析可能存在问题。
若要验证 IP 地址的网络连接,请运行以下命令:
Test-NetConnection -ComputerName $ipAddress -Port 80
将
$ipAddress
替换为要测试的 IP 地址。此命令检查到端口 80 上指定 IP 地址的网络连接。 如果连接失败,则表明存在网络连接问题。
域连接
问题:无法从此网络访问域(<域名>)的域控制器,或者至少一个域控制器上的端口未打开
原因:由于提供的 DNS 服务器 IP 或网络配置存在问题所致。
解决方法:
- 检查 DNS 服务器 IP,并确保 DNS 服务器正在运行。
- 确保域名解析正确指向为 Azure 或 SCOM 托管实例配置的指定域控制器 (DC)。 确认此 DC 位于已解析的 DC 中的顶部。 如果解析指向不同的 DC 服务器,则表明 AD 域解析存在问题。
- 检查域名并确保为 Azure 和 SCOM 托管实例配置的域控制器已启动并正在运行。
注意
对于为 Azure 或 SCOM 托管实例配置的 DC,端口 9389、389/636、88、3268/3269、135、445 应打开,并且 DC 上的所有服务都应正在运行。
域连接的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateDomainControllerConnectivity
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
若要检查域控制器可访问性,请运行以下命令:
Resolve-DnsName -Name $domainName
将
$domainName
替换为要测试的域名。确保域名解析正确指向为 Azure 或 SCOM 托管实例配置的指定域控制器 (DC)。 确认此 DC 位于已解析的 DC 中的顶部。 如果解析指向不同的 DC 服务器,则表明 AD 域解析存在问题。
若要验证 DNS 服务器设置,请执行以下步骤:
- 确保已正确配置运行验证的计算机上的 DNS 服务器设置。
- 验证 DNS 服务器 IP 地址是否准确且可访问。
若要验证网络配置,请执行以下步骤:
- 验证正在执行验证的计算机上的网络配置设置。
- 确保计算机已连接到正确的网络并具有与域控制器通信所需的网络设置。
若要测试域控制器上的所需端口,请运行以下命令:
Test-NetConnection -ComputerName $domainName -Port $portToCheck
将
$domainName
替换为要测试的域名,将$portToCheck
替换为以下列表编号中的各个端口:- 389/636
- 88
- 3268/3269
- 135
- 445
为所有上述端口执行给定命令。
此命令检查为创建 Azure 或 SCOM 托管实例而配置的指定域控制器上的指定端口是否打开。 如果命令显示连接成功,则表明所需端口已经打开。
域加入验证
问题:测试管理服务器未能加入域
原因:由于 OU 路径不正确、凭据不正确或网络连接问题所致。
解决方法:
- 检查在密钥保管库中创建的凭据。 用户名和密码必须反映正确的用户名(用户名值的格式必须是 domain\username)和密码,对应的用户名和密码需有权限将计算机加入域。 默认情况下,用户帐户最多只能将 10 台计算机添加到域中。 若要配置,请参阅 用户可以加入域的工作站的默认数量限制。
- 验证 OU 路径准确无误并且不会阻止新计算机加入域。
域加入验证的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateDomainJoin
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
使用在创建 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 }
用正确的值替换 username、password、$domainName、$ouPath。
运行上述命令后,运行以下命令,检查是否已成功向域中添加计算机:
Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty PartOfDomain
静态 IP 和 LB FQDN 关联
问题:无法运行测试,因为服务器未能加入域
解决方法:确保计算机可以加入域。 按照“域加入验证”部分中的故障排除步骤操作。
问题:无法解析 DNS 名称 <DNS Name>
解决方法:DNS 记录中不存在提供的 DNS 名称。 检查 DNS 名称并确保它与提供的静态 IP 正确关联。
问题:提供的静态 IP (<static IP>) 与负载均衡器 DNS (<DNS Name>) 不匹配
解决方法:检查 DNS 记录并提供正确的 DNS 名称/静态 IP 组合。 有关详细信息,请参阅创建静态 IP 并配置 DNS 名称。
静态 IP 和 LB FQDN 关联的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateStaticIPAddressAndDnsname
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
使用在创建 SCOM 托管实例时使用的域帐户将虚拟机加入到域。 要将虚拟机加入域,请按照域加入验证部分提供的步骤进行操作。
获取 IP 地址和关联的 DNS 名称并运行以下命令,查看它们是否匹配。 解析 DNS 名称并提取实际 IP 地址:
$DNSRecord = Resolve-DnsName -Name $DNSName $ActualIP = $DNSRecord.IPAddress
如果无法解析 DNS 名称,请确保 DNS 名称有效并与实际 IP 地址相关联。
计算机组验证
问题:无法运行测试,因为服务器未能加入域
解决方法:确保计算机可以加入域。 按照“域加入验证”部分中指定的故障排除步骤操作。
问题:域中找不到名为 <computer group name> 的计算机组
解决方法:验证组是否存在,并检查提供的名称,或者新建一个名称(如果尚未创建)。
问题:输入的计算机组 <computer group name> 不由用户 <domain username> 管理
解决方法:导航到组属性,并将此用户设置为管理员。 有关详细信息,请参阅创建和配置计算机组。
问题:输入计算机组 <computer group name> 的管理员 <domain username> 没有管理组成员身份所需的权限
解决方法:导航到组属性并选中“管理员可以更新成员列表”复选框。 有关详细信息,请参阅创建和配置计算机组。
计算机组验证的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateComputerGroup
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。使用在创建 SCOM 托管实例时使用的域帐户将 VM 加入到域。 要将虚拟机加入域,请按照域加入验证部分提供的步骤进行操作。
在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
运行以下命令以导入模块:
Add-WindowsFeature RSAT-AD-PowerShell -ErrorAction SilentlyContinue Add-WindowsFeature GPMC -ErrorAction SilentlyContinue
若要验证 VM 是否已加入域,请运行以下命令:
Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty PartOfDomain
若要验证域是否存在以及当前计算机是否已加入域,请运行以下命令:
$domainJoinCredentials = New-Object pscredential -ArgumentList ("<username>", (ConvertTo-SecureString "password" -AsPlainText -Force)) $Domain = Get-ADDomain -Current LocalComputer -Credential $domainUserCredentials
用适用的值替换
$username
、password
。若要验证域中用户是否存在,请运行以下命令:
$DomainUser = Get-ADUser -Identity $username -Credential $domainUserCredentials
用适用的值替换
$username
、$domainUserCredentials
若要验证域中计算机组是否存在,请运行以下命令:
$ComputerGroup = Get-ADGroup -Identity $computerGroupName -Properties ManagedBy,DistinguishedName -Credential $domainUserCredentials
用适用的值替换
$computerGroupName
、$domainUserCredentials
。如果用户和计算机组存在,请确定用户是否是计算机组的管理员。
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
如果
managerCanUpdateMembership
为 True,则域用户对计算机组具有更新成员身份的权限。 如果managerCanUpdateMembership
为 False,则为域用户赋予计算机组管理权限。
gMSA 帐户验证
问题:测试未运行,因为服务器未能加入域
解决方法:确保计算机可以加入域。 按照“域加入验证”部分中指定的故障排除步骤操作。
问题:域中找不到名为 <computer group name> 的计算机组。 此组的成员必须能够取回 gMSA 密码
解决方法:验证组是否存在并检查提供的名称。
问题:无法在域中找到名为 <domain gMSA> 的 gMSA
解决方法:验证 gMSA 帐户是否存在,并检查提供的名称,或者新建一个名称(如果尚未创建)。
问题:未启用 gMSA <domain gMSA>
解决方法:使用以下命令启用:
Set-ADServiceAccount -Identity <domain gMSA> -Enabled $true
问题:gMSA <domain gMSA> 需要将其 DNS 主机名设置为 <DNS Name>
解决方法:gMSA 未正确设置 DNSHostName
属性。 使用以下命令设置 DNSHostName
属性:
Set-ADServiceAccount -Identity <domain gMSA> -DNSHostName <DNS Name>
问题:gMSA <domain gMSA> 的 SAM 帐户名称超出了 15 个字符的限制
解决方法:使用以下命令设置 SamAccountName
:
Set-ADServiceAccount -Identity <domain gMSA> -SamAccountName <shortname$>
问题:需要将计算机组 <computer group name> 设置为 gMSA <domain gMSA> 的 PrincipalsAllowedToRetrieveManagedPassword
解决方法:gMSA 未正确设置 PrincipalsAllowedToRetrieveManagedPassword
。 使用以下命令设置 PrincipalsAllowedToRetrieveManagedPassword
:
Set-ADServiceAccount -Identity <domain gMSA> - PrincipalsAllowedToRetrieveManagedPassword <computer group name>
问题:尚未为 gMSA <domain gMSA> 正确设置 SPN
解决方法:gMSA 的服务主体名称设置不当。 使用以下命令获取服务主体名称:
Set-ADServiceAccount -Identity <domain gMSA> -ServicePrincipalNames <set of SPNs>
gMSA 帐户验证的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidategMSAAccount
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。使用在创建 SCOM 托管实例时使用的域帐户将 VM 加入到域。 要将虚拟机加入域,请按照域加入验证部分提供的步骤进行操作。
在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
运行以下命令以导入模块:
Add-WindowsFeature RSAT-AD-PowerShell -ErrorAction SilentlyContinue Add-WindowsFeature GPMC -ErrorAction SilentlyContinue
若要验证服务器是否已成功加入域,请运行以下命令:
(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
若要检查计算机组是否存在,请运行以下命令:
$Credentials = New-Object pscredential -ArgumentList ("<username>", (ConvertTo-SecureString "password" -AsPlainText -Force)) $adGroup = Get-ADGroup -Identity $computerGroupName -Properties ManagedBy,DistinguishedName -Credential $Credentials
将 username、password 和 computerGroupName 替换为适用的值。
若要检查 gMSA 帐户是否存在,请运行以下命令:
$adServiceAccount = Get-ADServiceAccount -Identity gMSAAccountName -Properties DNSHostName,Enabled,PrincipalsAllowedToRetrieveManagedPassword,SamAccountName,ServicePrincipalNames -Credential $Credentials
若要验证 gMSA 帐户属性,请检查是否已启用 gMSA 帐户:
(Get-ADServiceAccount -Identity <GmsaAccount>).Enabled
如果命令返回 False,请启用域中的帐户。
要验证 gMSA 帐户的 DNS 主机名是否与提供的 DNS 名称(LB DNS 名称)匹配,请运行以下命令:
(Get-ADServiceAccount -Identity <GmsaAccount>).DNSHostName
如果命令未返回预期的 DNS 名称,请将 gMsaAccount 的 DNS 主机名更新为 LB DNS 名称。
确保 gMSA 帐户的 SAM 帐户名称不超过 15 个字符的限制:
(Get-ADServiceAccount -Identity <GmsaAccount>).SamAccountName.Length
若要验证
PrincipalsAllowedToRetrieveManagedPassword
属性,请运行以下命令:检查是否已将指定的计算机组设置为 gMSA 帐户的“PrincipalsAllowedToRetrieveManagedPassword”:
(Get-ADServiceAccount -Identity <GmsaAccount>).PrincipalsAllowedToRetrieveManagedPassword -contains (Get-ADGroup -Identity <ComputerGroupName>).DistinguishedName
用适用的值替换
gMSAAccount
和ComputerGroupName
。要验证 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。
问题:服务器未能加入域,因此无法运行此测试
解决方法:确保计算机加入域。 按照“域加入验证”部分中的故障排除步骤操作。
问题:无法在域中找到名为 <domain gMSA> 的 gMSA。 此帐户必须是服务器上的本地管理员
解决方法:验证帐户存在并确保 gMSA 和域用户属于本地管理员组。
问题:无法将帐户 <domain username> 和 <domain gMSA> 添加到测试管理服务器上的本地管理员组,或者在组策略更新后,这两项未保留在组中
解决方法:确保提供的域用户名和 gMSA 输入正确,包括全名 (domain\account)。 此外,检查测试计算机上是否有任何由于在 OU 或域级别创建的策略而覆盖本地管理员组的组策略。 gMSA 和域用户必须属于本地管理员组,SCOM 托管实例才能正常运行。 必须将 SCOM 托管实例计算机排除在任何覆盖本地管理员组(与 AD 管理员协调)的策略之外。
问题:SCOM 托管实例失败
原因:域中的组策略(名称:<group policy name>)正在覆盖测试管理服务器上的本地管理员组,这一情况会发生在包含服务器的 OU 上或域的根目录中。
解决方法:确保 SCOM 托管实例管理服务器 (<OU Path>) 的 OU 不受任何会覆盖组的策略的影响。
组策略验证的常规故障排除步骤
在所选子网内生成在 Windows Server 2022 或 2019 上运行的新虚拟机 (VM),以创建 SCOM 托管实例。 登录到 VM 并将其 DNS 服务器配置为使用在创建 SCOM 托管实例期间使用的相同 DNS IP。
可以按照下面提供的分步说明进行操作,或者如果你善于操作 PowerShell,请在 ScomValidation.ps1 脚本中执行名为
Invoke-ValidateLocalAdminOverideByGPO
的特定检查。 有关在测试计算机上独立运行验证脚本的更多信息,请参阅运行验证脚本的一般准则。使用在创建 SCOM 托管实例时使用的域帐户将 VM 加入到域。 要将虚拟机加入域,请按照域加入验证部分提供的步骤进行操作。
在管理员模式下打开 PowerShell ISE,并将 Set-ExecutionPolicy 设置为 Unrestricted。
运行以下命令以导入模块:
Add-WindowsFeature RSAT-AD-PowerShell -ErrorAction SilentlyContinue Add-WindowsFeature GPMC -ErrorAction SilentlyContinue
若要验证服务器是否已成功加入域,请运行以下命令:
(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
该命令必须返回 True。
若要检查 gMSA 帐户是否存在,请运行以下命令:
Get-ADServiceAccount -Identity <GmsaAccount>
若要验证本地管理员组中是否存在用户帐户,请运行以下命令:
$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>
替换为实际值。要确定域和组织单位 (OU) 的详细信息,请运行以下命令:
Get-ADOrganizationalUnit -Filter "DistinguishedName -like '$ouPathDN'" -Properties CanonicalName -Credential $domainUserCredentials
将 <OuPathDN> 替换为实际的 OU 路径。
若要从域获取 GPO(组策略对象)报告并查看本地管理员组上的覆盖策略,请运行以下命令:
[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 管理服务器。