我创建了以下Powershell脚本来更改sql server服务帐户。如果我通过Standalone sql server,这个脚本在我的本地工作正常。但是对于具有以下错误消息的集群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
我无法远程更改Clustered sql服务帐户。如果我将此脚本复制到集群的活动节点并在那里执行它,那么这个脚本工作正常。
BOL说
对于群集服务器:必须从SQL Server群集的活动节点执行更改SQL Server或SQL Server代理使用的服务帐户。(http://msdn.microsoft.com/en-us/library/ms345578.aspx)
这是否意味着我们需要TS进入群集的每个活动节点并更改服务帐户。我们不能自动化这个过程吗?这是desine吗?或者是否有其他方法可以更改群集SQL服务的服务帐户。