SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

PowerShell スクリプトをクラスターリソースとして登録

leave a comment

WSFC ではスクリプトをリソースとして登録するための [汎用スクリプト] があります。
このリソースですが Windows Scripting Host (WSH) を実行するためのリソースとなるため、PowerShell スクリプトを実行することができません。
image

既存資産を使用する場合は、WSH ベースの汎用スクリプトを使用してもいいと思いますが、新規にスクリプトを作成する場合は、PowerShell でスクリプトを書いたほうが効率的ですので、今回の投稿ではクラスターリソースとして PowerShell スクリプトを登録する方法を。

汎用スクリプトで ps1 は登録することができません。
そこで [汎用アプリケーション] を利用します。
汎用アプリケーションでは実行するコマンドラインとパラメーターを指定することができますので PowerShell.exe からスクリプトを実行するようにします。
# 以下の例ではローカルドライブのスクリプトを実行していますが、共有ディスクや共有フォルダのスクリプトを実行できるのであれば、スクリプトの二重管理をしなくてよいのでそちらにした方が楽かと。

コマンドライン powershell.exe
パラメーター -Command "<スクリプトのフルパス>"
例) -Command "C:PSResourceClusterResource.ps1"

 

注意点としてはスクリプトが終了するとリソースが失敗の状態になってしまいます。
image

そこで以下のスクリプトのようにスクリプトが終了しないように Read-Host 等の処理を入れておきます。
これで汎用アプリケーションリソースがオンラインのままの状態となります。

$ENV:Computername | Out-File -FilePath C:PSResourcetmp.txt -Force
Read-Host

クラスターリソースがオンラインになった時に待機系のノードで特定の処理を実行したい場合などは以下のようなスクリプトを登録することで処理ができます。

$ENV:Computername | Out-File -FilePath C:PSResourcetmp.txt -Force
$PassiveNodes = Get-ClusterNode | Where Name -ne $ENV:ComputerName
foreach ($PassiveNode in $PassiveNodes){
    Invoke-Command -ComputerName $PassiveNode.Name -ScriptBlock {Remove-Item C:PSResourcetmp.txt -Force}
}
Read-Host

 

注意点としてはクラスターのサービス (Cluster Service) は [Local System] として動作している点になります。

image

Invoke-Command に Credential を渡して実行することで、待機系ノードに対して処理を実行することもできるのですが、クラスターの各ノードの Administrators グループに自身以外のノードのコンピューターアカウントを指定することでも実行することができます

imageimage

他にも方法はあるかと思いますがメモとして。

Share

Written by Masayuki.Ozawa

7月 24th, 2014 at 10:03 pm

Posted in Windows Server

Tagged with

Leave a Reply