这是一个我想与社区分享的问题和答案,因为谷歌搜索“New-NlbCluster:访问被拒绝”没有带来任何结果。
问题:
从 2017 年 4 月 15 日开始,powershell 命令行 New-NlbCluster 开始在我们的实验室测试环境中给出错误消息:“New-NlbCluster:访问被拒绝”,该测试环境用于测试软件的安装和配置,其中还包括创建新的 NLB 群集。该命令也无法与本地管理员帐户配合使用。使用交互式 GUI(网络负载平衡)可以正常创建新的 NLB 群集。
以下是失败的确切命令(但略有掩盖):
Import-Module NetworkLoadBalancingClusters
try
{
New-NlbCluster -ErrorAction:Stop -InterfaceName "Xxxxx" -ClusterPrimaryIP "172.17.2.74" -SubnetMask "255.255.255.0" -HostName XX-XX-XX-R1 -ClusterName "xx-xx-xx-r-p.xxxxxxxxxx.xx.xxx.com" -OperationMode multicast
}
catch
{
echo $_.Exception | format-list -force
}
ErrorInformation : System.Management.ManagementBaseObject
ErrorCode : AccessDenied
Message : Access denied
Data : {}
InnerException :
TargetSite : Void ThrowWithExtendedInfo(System.Management.ManagementStatus)
StackTrace : at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options)
at Microsoft.NetworkLoadBalancingClusters.PowerShell.WMIHelper.SynchUpdateClusterConfigurationEx(String host, String adaptor, ManagementB
aseObject inParams)
at Microsoft.NetworkLoadBalancingClusters.PowerShell.NewNlbCluster.NlbProcessRecord()
at Microsoft.NetworkLoadBalancingClusters.PowerShell.NlbPSCmdlet.ProcessRecord()
at System.Management.Automation.CommandProcessor.ProcessRecord()
HelpLink :
Source : System.Management
HResult : -2146233087
2017 年 4 月 8 日,它仍然有效。可能是某些 Windows 更新触发了错误(中间有 7 个 Windows 更新)。我们所有的测试系统(总共 4 个)都发生了同样的错误,包括 Windows 2008 R2 和 Windows 2012 R2 版本。所有计算机都属于同一个实验室域。
我还在独立虚拟机中测试了它,该虚拟机不属于任何域,即使安装了最新的 Windows 更新,该命令仍然有效。我们的实验室域不应该有任何策略更改,所以我想知道是什么原因造成的。
我花了很长时间来排查这个问题。我为 WMI 活动定义了安全日志记录,但安全日志仅显示所有操作的成功消息。但是,WMI 活动调试跟踪(请参阅https://blogs.technet.microsoft.com/askperf/2008/03/04/wmi-debug-logging/) 能够显示错误:Start IWbemServices::ExecMethod - root\MicrosoftNLB : NlbsNic::UpdateClusterConfigurationEx 0x80041003 但是,这并没有揭示导致访问冲突的任何细节。从 c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\WbemCli.h 中,我们看到 WBEM_E_ACCESS_DENIED = 0x80041003
解决方法:
我更改了脚本,改为以 SYSTEM 用户帐户运行该命令,这很有帮助。(例如,可以通过定义 Windows 计划任务在 SYSTEM 帐户下运行该命令,但我创建了一个临时服务来运行该命令)。
更让我吃惊的是,我编写了一个 C++ 程序来创建 NLB 群集(通过使用 WMI)。即使在独立计算机中,这个 C++ 程序也遇到了相同的“访问被拒绝”错误,但相同的解决方法有所帮助,即通过在 SYSTEM 帐户下运行,NLB 群集成功创建。