SQL Server故障转移群集服务帐户通过Powershell进行更改

时间:2011-10-12 11:07:23

标签: powershell

我创建了以下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服务的服务帐户。

0 个答案:

没有答案