第 3 章 PowerShell スクリプトを利用した管理タスクの自動化
3.1 PowerShell によるファームのバックアップスクリプトの作成と起動
SharePoint 環境で発生する反復作業の代表は定期的なSharePointファームのバックアップ、復元です。
PowerShellではどのようにスクリプト化ができるかを確認します。
ファームとサイトのバックアップはそれぞれBackup-SPFarm、Backup-SPSiteコマンドレットです。
これらのコマンドレットをスクリプトファイルとして作成し、Windowsタスクに登録すれば定期バックアップの自動化ができ ます。
PowerShellではスクリプトファイルは拡張子がps1のテキストファイルとして作成します。
Windows PowerShell ISEを使用するとスクリプトの作成が効率よくできます。
1. PowerShellは既定ではセキュリティ対策のため、スクリプトの実行が禁止されています。
スクリプトを実行するためにはPowerShellの実行ポリシーをスクリプトが実行できるポリシーに変更する必要がありま すが、SharePoint Serverをインストールすると実行ポリシーはRemoteSignedに変更され、スクリプト実行が可能 になります。
実行ポリシーは Get-ExecutionPolicyコマンドレットで確認できます。
実行ポリシーの変更は Set-ExecutionPolicyコマンドレットです。
実行ポリシーには以下のような種類があります。
実行ポリシーの種類
実行ポリシー 意味 Restricted
既定の実行ポリシーであり、 個々のコマンドは許可されるが、スク リプトは実行されない。
AllSigned すべてのスクリプトと構成ファイルが信頼された発行元によって署 名されていればスクリプトを実行できる。
RemoteSigned
インターネットからダウンロードされたスクリプトおよび構成ファ イルは、信頼された発行元 によるデジタル署名がないとスクリプト は実行できないが ローカル コンピューターで実行されたスクリプ トおよび作成されたスクリプトは実行できる。
Unrestricted 署名なしスクリプトを実行できる。
2. 「スタート」-「アクセサリ」-「Windows PowerShell」-「Windows PowerShell ISE」メニューからPowerShell ISEを 起動します。
39
3. 既定で起動した場合、PowerShell ISEの画面は水平方向に3分割されています。上段の画面がスクリプト編集と デバッグ領域、中段はコマンドレットやスクリプトの実行結果を表示する領域です。下段がコマンドラインの入力領域 です。コマンドライン入力領域に
Add-PSSnapin Microsoft.SharePoint.PowerShell と入力し、SharePoint用のPowerShellスナップインを追加します。
出力領域にフォーカスし、ワイパーボタンを押すと、表示をクリアできます。
4. スクリプト編集領域にファームのバックアップ用コマンドレットを入力し、FarmBackup.ps1としてファイルに保存します。
この例では C:¥Backup¥Farmフォルダにファームの完全バックアップを作成します。また、バックアップ処理を3つのス レッドで処理します。BackupMethodパラメータは 完全バックアップFull、または 差分バックアップDifferentialを指 定できます。C:¥Backup¥Farmフォルダを作成します。
バックアップの終了が確認できるように、バックアップ開始メッセージとその時刻、およびバックアップ完了メッセージとその 終了時刻を画面に出力します。
画面へのメッセージ出力は Write-Hostコマンドレットを使用します。
$time変数に現在時刻を格納し、Write-Hostコマンドレットのメッセージとして表示します。
Write-Hostで表示するメッセージは両端を「 ” 」(ダブルクォート) または 「’」(シングルクォート)で囲みますが、「”」を
使用した場合「”」内で使用した変数の内容が表示されますが、「’」を使用した場合は「’」内で使用した文字がその まま出力されます。
$time = Get-Date
Write-Host “バックアップ開始: $time” # 開始時刻を表示
Backup-SPFarm –BackupMethod Full –Directory c:¥Backup¥Farm –BackupThread 3
$time = Get-Date
Write-Host “バックアップ終了: $time ” # 終了時刻を表示
40
5. ファームのバックアップ用コマンドレットの編集ができたら、PowerShell ISE環境から動作を確認します。
「ファイル」-「名前を付けて保存」メニューからC:¥ScriptsフォルダにBackupFarm.ps1としてファイルを保存します。
41
6. スクリプトファイルの保存を終えたら、「F5」キーを押すか、「スクリプト実行」ボタンを押してスクリプトを実行し、ファーム のバックアップファイルが作成されることを確認します。
この例では、バックアップが完了するまでに約5分かかっています。
7. 作成したスクリプトをSharePoint Server 2010 管理 コンソール画面から実行する場合は、パスを含んだスクリプト ファイル名を入力します。カレントフォルダにスクリプトファイルが存在する場合は、カレントフォルダを意味する 「 .¥ 」 を指定します。
C:¥Scripts¥BackupFarm.ps1
カレントフォルダをC:¥Scriptsに設定し、スクリプトを実行する場合、
Set-Location C:¥Scripts # カレントフォルダを移動 .¥BAckupFarm.ps1
42
8. 作成したスクリプトはSharePoint Server 2010管理コンソールからはうまく動作しますが、他のPowerShellセッショ ンから実行するにはSharePointスナップインを読み込む必要があります。
SharePointスナップインを読み込まないPowerShellセッションからの実行は失敗します。
43
SharePoint Server 2010管理コンソール以外のPowerShell環境からでもバックアップ用スクリプトを実行できるよう
にするためには、SharePointスナップインの追加処理をスクリプトに追加します。
Add-PSSnapin Microsoft.SharePoint.PowerShell
9. 定期タスクとして実行するために、コンソール画面に表示していた情報をログファイルに出力するように変更します。
ファイルへの書き込みはAdd-Content、またはSet-Contentコマンドレットで行います。
Add-Contentは指定ファイルに順次内容を追加しますが、Set-Contentはファイルの内容を置き換える動作をしま
す。バックアップの動作時刻を記録するためにも、Add-Contentを使用して時刻を順次追加するようにします。
# SharePoint スナップインを追加
# SharePoint Server 2010 管理コンソールから実行する場合はこの処理は不要 Add-PSSnapin Microsoft.SharePoint.PowerShell
# 開始時刻を表示
$time = Get-Date
Add-Content C:¥Backup¥Log¥FarmBck.log -Value "バックアップ開始: $time "
Backup-SPFarm –BackupMethod Full –Directory c:¥Backup¥Farm –BackupThread 3
# 終了時刻を表示
$time = Get-Date
Add-Content C:¥Backup¥Log¥FarmBck.log -Value "バックアップ終了: $time "
Add-Content C:¥Backup¥Log¥FarmBck.log -Value "" # 空白行を追加する
44
10.動作確認を終えたら、定期タスクとして実行できるようにバッチファイルに以下の編集を行います。
PowerShellスクリプトはコマンドプロンプト環境からは直接起動することはできません。
コマンドプロンプトからPowerShellスクリプトを実行するには、コマンドプロンプトからPowerShellを起動し、その引数
にPowerShellスクリプトファイル名を指定します。
この例では、C:¥Scriptsフォルダにバッチファイル BackupFarm.batとスクリプトファイルBackupFarm.ps1を作成して います。
BakupFarm.bat
PowerShell C:¥Scripts¥BackupFarm.ps1
45
11. 「スタート」-「管理ツール」メニューからタスクスケジューラを起動し、「基本タスクの作成…」リンクをクリックします。
12.基本タスクの作成ウィザードが起動したらタスク名を「BackupFarm」と定義します。
46
13. 「タスクトリガー」画面では動作確認用に「1回限り」を選択します。
14.起動時刻を現在時刻から5分後に設定します。
47
15. C:¥Scripts¥BackupFarm.batファイルを実行プログラムとしてタスクを定義します。
16.タスクの設定を完了します。
48
17. 指定時刻まで待ち、タスクが実行されることを確認します。もし、指定時刻までにタスクの定義が完了できなかった場 合は実行ボタンを押してタスクを手動で起動します。
49
18. バックアップしたファームはRestore-SPFarmコマンドレットで復元します。
次の例は、ファームの構成情報だけを上書きして戻します。
Rstore-SPFarm –Directory C:¥Backup¥Farm
–RestoreMethod Overwrite –ConfigurationOnly -Force
19.リストアする対象は Restore-SPFarm のShowTreeスイッチパラメータで確認することができます。
Restore-SPFarm –Directory C:¥Backup¥Farm -ShowTree
50
20.Get-Credentialコマンドレットでファームのクレデンシャルを取得し、これをRestore-SPFarmコマンドレットの
FarmCredentialsパラメータの値とするとリストア対象を指定し、復元を実行できます。
$admin = Get-Credential # リストア権限のあるユーザー名とパスワードを取得 Restore-SPFarm -Directory C:¥Backup¥Farm `
-RestoreMethod Overwrite -item `
"ファーム¥Microsoft SharePoint Foundation Web Application¥Contoso社内サイト" ` -FarmCredentials $admin –RestoreThreads 3 -Force
51
52 コラム
Get-Variableコマンドレットで表示される定義済みの変数の1つに$PSHome変数があります。
この変数はPowerShell.exeがインストールされているファイルパスを保持します。
PowerShell.exeはC:¥Windows¥System32¥WindowsPowerShell¥v1.0フォルダにインストールされています。
タスク登録時の実行プログラムをバッチファイルではなく、
C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥PowerShell.exe
に指定し、起動時の引数にスクリプトファイルのパスを指定してPowerShellスクリプトファイルを実行することがもきます。
53