Я создал ниже скрипт Powershell для изменения учетных записей службы сервера sql.Этот скрипт работает нормально с моего локального, если я прохожу автономные сервера SQL.Но происходит сбой для кластеризованных служб sql с сообщением об ошибке ниже:
$OldServiceAccount = '****'
$NewServiceAccount = '*****'
$Password = '****'
$Servers = Get-Content D:\RP-Test\Service_Account_Change\Servers.txt | Select-Object -Unique
foreach($Server in $Servers) {
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null
$wmi = New-Object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $Server
$Services = $wmi.services | Where-Object { ($_.ServiceAccount -eq $OldServiceAccount) -and ($_.Type -ne 'ReportServer') }
foreach($Service in $Services) {
$Service.SetServiceAccount($NewServiceAccount,$Password)
$Service.Refresh()
}
$Services | Select-Object @{ label = "ServiceName"; expression = { $_.Name } }, Type, ServiceAccount, ServiceState | Format-Table -Auto
}
Сообщение об ошибке:
Exception calling "SetServiceAccount" with "2" argument(s): "Set service account failed. "
At line:3 char:27
+ $Service.SetServiceAccount <<<< ($NewServiceAccount,$Password)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Я не могу удаленно изменить учетную запись службы кластеризованного sql.Если я скопирую этот скрипт в активный узел кластера и выполню его там, то этот скрипт работает нормально.
BOL говорит
Для кластерных серверов: изменение учетной записи службы, используемой SQL Serverили агент SQL Server должен выполняться с активного узла кластера SQL Server. (http://msdn.microsoft.com/en-us/library/ms345578.aspx)
Означает ли это, что нам нужно подключиться к TS для каждого активного узла кластера и изменить учетную запись службы.мы автоматизируем этот процесс - это по назначению? или есть какой-либо другой способ изменения учетной записи службы для кластерных служб sql.