Это одновременно вопрос и ответ, которым я хочу поделиться с сообществом, потому что поиск в Google «New-NlbCluster: Access denied» не дал никаких результатов.
Проблема:
Начиная с 15 апреля 2017 года, командлет PowerShell New-NlbCluster начал выдавать сообщение об ошибке: «New-NlbCluster: Access denied» в нашей лабораторной тестовой среде, которая проверяет установку и настройку программного обеспечения, включая создание нового кластера NLB. Команда не работала и с учетной записью локального администратора. Создание нового кластера 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
8 апреля 2017 года он все еще работал. Возможно, какое-то обновление 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, и это помогло. (Выполнение команды под учетной записью SYSTEM может быть выполнено, например, путем определения запланированной задачи Windows, но я создал временную службу для запуска команды).
Что меня еще больше удивляет, так это то, что я написал программу на C ++ для создания кластера NLB (с помощью WMI). В этой программе на C ++ возникла такая же ошибка отказа в доступе даже на автономном компьютере, но помогло то же решение, т. Е. При запуске под учетной записью SYSTEM кластер NLB был успешно создан.