フェールオーバークラスター内の名前付きSQLインスタンスのサービスアカウントを更新するPowershellスクリプトに取り組んでいます。これを更新するためにSMOとWMIを使用して、アクティブノードのサービスアカウントを更新し、他のパッシブノードに入力できるようにしようとしています(構成ツールで手動で更新した場合と同様)。ローカルマシンでスクリプトを実行しようとしていますが、リモートサーバーを更新しています。表示されたエラーは、Google検索に基づいたセキュリティ関連のようで、管理者としての昇格された権限でリモートマシン上でローカルにスクリプトを実行すると成功します。
コード:
[reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null
$mc=New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer "SQLHOST01"
$srvcs= $mc.Services | Where {$_.name -like "*INSTANCE01*"} | Where {$_.Type -like "Sql*"}
$srvcs | ft name,servicestate,serviceaccount
foreach ($s in $srvcs){
$s.SetServiceAccount("FOO\Bar","strongpass")
}
エラー:
Exception calling "SetServiceAccount" with "2" argument(s): "Set service account failed. "
At line:11 char:5
+ $s.SetServiceAccount("FOO\Bar","strongpass")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FailedOperationException
使用:Windows 2008 R2(リモート)SQL 2008 R2(リモート)Windows 7 with SQL 2012 sqlpsモジュール(ローカル)
更新:スクリプトを実行しているアカウントには、リモートマシンに対する管理者権限があります。
ここでの主な質問は、クライアントマシンからの呼び出しを、リモートマシンの昇格された権限で実行されているかのように動作させるにはどうすればよいですか?
私は同じ問題に遭遇し、SMOバグ(1番目のリンク)のように見えます(ただし、下の2番目のリンクからCredSSPのものを試していません)
http://www.ravichaganti.com/blog/?p=12
うまくいくかどうか教えてください。
Powershellスクリプトで単一引用符を試してください。私はそれを切り替える前に1時間これに頭をぶつけました、そしてそれは魅力のように働きました。