かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  メモ. タスクスケジューラを使用した、複数VMのオン/オフの自動化

 

 

メモ. タスクスケジューラを使用した、複数VMのオン/オフの自動化

2025年04月18日配信
2025年04月25日更新
執筆者:山内 和朗

 Hyper-Vサーバー上の複数のHyper-V仮想マシン(VM)を、Windowsの「タスクスケジューラ」を使用して自動的にオン/オフする方法を紹介します。現在連載中の「はじめてのIntune」シリーズは、この方法を利用して業務時間外に複数のVMを連続稼働させており、前日までの状況の変化が翌朝にはIntune上で確実に確認できるようにしています。

 

夜間のリソースを活用して、複数VMの連続稼働を自動化する

 

 3月からスタートした「はじめてのIntune」シリーズ(vol.89~)では、Intuneで管理するWindowsデバイスとActive Directoryのドメインコントローラーを、この連載の「ラボ環境 in オンプレを作る」シリーズ(vol.33~)で構築したHyper-V環境の仮想マシン(VM)として用意しました。Hyper-Vサーバーのリソースは限りがあるため、Intuneの評価のために多くのリソースを投入し続けるわけにはいきません。ラボ環境は、他の目的でも使用しています。だからといって、長時間オフラインにしておくと、Entraハイブリッド参加のための、オンプレミスのActive DirectoryドメインとEntraテナント間のディレクトリ同期が最新でないという通知に煩わされることになります(画面1)。

 

画面1 ドメインコントローラーのVMを長時間オフラインにすると、ディレクトリ同期が最新でないと警告される

画面1 ドメインコントローラーのVMを長時間オフラインにすると、ディレクトリ同期が最新でないと警告される

 

 また、Intuneに限らず、大規模な環境にも対応できるシステム運用管理ツール(サービス)の多くは、何かしら(更新プログラムやアプリ、設定)をデバイスに配布しても、その結果の情報を管理者が把握できるまでには数時間から数日かかることがあります。情報の更新を待たずに確認するには、デバイスに物理的またはネットワーク経由でアクセスして確認しなければなりません。運用環境では多少のタイムラグはしかたがないことですが、評価環境となると話は別です。更新プログラムが期待通りに配布されているのか、管理設定に誤りはないのか、この機能はどう動くのか、そういったことをすばやく把握できなければ、評価に無駄に時間がかかってしまいます。それには、ある程度の期間、VMをオンラインの状態にしておく必要があります。

 次のPowerShellスクリプト「start-intunevms.ps1」は、Intuneで管理されているWindowsデバイスのVMと、オンプレミスのActive Directoryドメインを提供するドメインコントローラーのVMの状態が、“オフ”または“保存完了”の場合は開始するスクリプトです。もう1つの「stop-intunevms.ps1]」は、それらのVMの状態が“実行中”の場合は、状態を保存してVMをオフにするスクリプトです(画面2)。Stop-VMの-Saveパラメーターを省略すると、シャットダウンしてからVMをオフにさせることができます。なお、$vms配列に定義してあるVMの名前(と数)はサンプルです。

[start-intunevms.ps1]プレーンテキストで表示)

$vms = "addc01", "intunecl01", "intunecl02", "intunecl03", "intunecl04"
foreach ($vm in $vms) {
  $ret = Get-VM -Name $vm
  if(($ret.State -eq "Off") -or ($ret.State -eq "Saved")) {
    Start-VM -Name $vm
  } else {
    Write-Host "Nothing to do: $vm"
  }
}

[stop-intunevms.ps1]プレーンテキストで表示)
$vms = "intunecl01", "intunecl02", "intunecl03", "intunecl04", "addc01"
foreach ($vm in $vms) {
  $ret = Get-VM -Name $vm
  if($ret.State -eq "Running") {
    Stop-VM -Name $vm -Save
  } else {
    Write-Host "Nothing to do: $vm"
  }
}

 

画面2 (予め指定した)VMが“実行中”の場合にのみ、保存してオフにするPowerShellスクリプト
画面2 (予め指定した)VMが“実行中”の場合にのみ、保存してオフにするPowerShellスクリプト

 これらのスクリプトを業務終了後から翌日の業務開始までの時間帯に実行するように「タスクスケジューラ」(taskshd.msc)にタスクを作成します。タスクのセキュリティオプションは「ユーザーがログオンしているかどうかにかかわらず実行する」にしてください。「最上位の特権で実行する」オプションの指定は不要です。

 

画面3 開始用および停止用スクリプトを業務時間外に実行するようにスケジュールする。毎週水曜日から金曜日は更新プログラムのインストールが行われる可能性を想定(Bリリース当日と7日遅延、2日期限を想定)
画面3 開始用および停止用スクリプトを業務時間外に実行するようにスケジュールする。毎週水曜日から金曜日は更新プログラムのインストールが行われる可能性を想定(Bリリース当日と7日遅延、2日期限を想定)

 

blog_yamanxworld_subscribe

blog_yamanxworld_comment

blog_yamanxworld_WP_ws2025

最新記事