2014年7月14日月曜日

[Powershell] Hyper-Vにて仮想マシンの稼働日時の情報を設定する

Hyper-Vで仮想マシンをたくさん作ったりサーバを共有して使っていると、どの仮想マシンをいつまで実行させていたのかが分からなくなります。

ハードディスクの容量が足りなくなった場合など仮想マシンの整理が必要な状況では、動かしていない仮想マシンであればアーカイブしたり削除したりする対象になります。でも、既定の設定ではいつ動かしていたかの情報を取ることができません。

下記のスクリプトをタスクスケジューラ等で定期的に実行すれば、実行中の仮想マシンのメモ欄にスクリプト実行時の日時を書き込みます。


# 
# Hyper-v にて実行中の仮想マシンのメモ情報に処理実行時の日時を書き込むスクリプト
# 


# 実行中の仮想マシンの一覧を取得します。
$RuningVms = (Get-VM | ? {$_.State -eq "Running"}).Name

# 実行中の仮想マシンに対して処理を行います。
foreach ($VmName in $RuningVms){

    # 仮想マシンのメモの情報を取得します。
    $VmNote = (Get-VM -Name $VmName).Notes

    # メモの情報を1行ずつ取得できるように加工します。
    $VmNote = $VmNote -split "`n"

    # メモ情報の行数を取得します。
    $VmNoteLineCount = $VmNote.Length

    # 処理にて使用する変数に初期値を設定します。
    $VmNoteRevised = $null
    $i = 0
    $RunningFlag = 0

    # メモ欄の最終稼働確認日を更新します。
    # 最終稼働確認日が記載された行を削除し、現在の日時が記載された行を追加します。
    while ($i -lt $VmNoteLineCount){
        if($VmNote[$i] -like "最終稼働確認日*"){
            $VmNoteRevised += "最終稼働確認日:" + (Get-Date).DateTime
            $RunningFlag = 1}
        else{
            $VmNoteRevised += $VmNote[$i]}
        $i ++
        if($i -lt $VmNoteLineCount){$VmNoteRevised += "`n"}
        }

    # 最終稼働確認日が記載された行を追加します。
    if($RunningFlag -eq 0){
        $VmNoteRevised += "`n"
        $VmNoteRevised += "最終稼働確認日:" + (Get-Date).DateTime}


    # 仮想マシンのメモ情報を更新します。
    Set-VM -Name $VmName -Notes $VmNoteRevised

}
  
  



0 件のコメント:

コメントを投稿