Windows OSをリモートから再起動するバッチのコマンド

JavaScript

特定のWindows OSのパソコンから、他のWindowsOSを搭載しているパソコンに再起動したい場合があります。
その場合、リモートデスクトップで接続して手動で再起動をおこなう方法をとる場合が多いかと思いますが、バッチファイルひとつで実行可能にすると便利です。


今回は、リモートでWindows OSを再起動するバッチについて紹介します。


環境情報


  • クライアント(バッチを実行する方):Windows10、WindowsServer2012
  • サーバ(再起動する方):Windows10、WindowsServer2012

クライアントとサーバの両方がWindows10、クライアントとサーバの両方がWindowsServer2012、の組み合わせでは確認できています。

Windows10とWindowsServer2012や、その他WindowsOSの組み合わせは試していませんが、たぶん以下に説明するバッチで正常に動作すると思います。


shutdown.exe と WMIC


リモートからバッチファイルを使って再起動することができるコマンドは2つあります。
shutdown.exe と WMIC です。


  • shutdown.exe

Windowsに標準格納されている再起動用の実行ファイル。
リモートで再起動する場合は、再起動するOSの資格情報(ID・パスワード)は指定できない。


  • WMIC

WMI(Windows Management Instrumentation)は、Windows OSにおけるシステム管理のための共通アーキテクチャ。
再起動だけではなく、Windows OSを操作する様々なコマンドを使用することができる。
リモートで再起動する場合は、再起動するOSの資格情報(ID・パスワード)が指定できる。


リモートで再起動する場合の2つの大きな違いは、資格情報を指定できるか?できないか?です。

「shutdown.exe」の場合は資格情報を指定することができないので、バッチファイルを実行するユーザと再起動するWindows OSのユーザは一致している必要があります。
しかし、WMICをつかった方法は、バッチファイル内で資格情報を指定できるので、同じユーザでのログインは不要です。


上記の理由から、WMICを使って再起動をおこなう方が使い勝手よいかと思います。


WMICでの再起動コマンド


リモートのWindows OSを再起動するための、WMICを使ったバッチファイルは以下になります。


set SERVER_REBOOT=192.168.1.100
set USER=administrator
set PASS=password01

WMIC /NODE:%SERVER_REBOOT% /USER:%USER% /PASSWORD:%PASS% OS WHERE Primary=1 CALL Win32Shutdown 6

上記のバッチファイルを実行することで、「SERVER_REBOOT」に定義したIPのWindows OSを再起動することができます。
「USER」「PASS」には、再起動するWindows OSのIDとパスワードを指定します。


WMICのコマンドは多機能なので、詳細はMicrosoftのマニュアルを参照して頂きたいのですが、ポイントとしては「Win32Shutdown 6」の部分です。
「6」は強制再起動なのですが、このパラメータを変更することで、強制再起動以外の操作も可能です。


以下に各パラメータの値と概要、および、説明を記述します。

説明分はMicroSoftのサイト(英文のみ)の文章をGoogle翻訳で訳して記載しているだけですので、日本語が少しおかしい部分があります。


0(0x0)

ログオフ

ユーザーをコンピューターからログオフします。ログオフする

exit関数を呼び出したプロセスのセキュリティコンテキストに関連付けられているすべてのプロセスが停止し、現在のユーザーがシステムからログオフされ、ログオンダイアログボックスが表示されます。

4(0x4)

強制ログオフ

ユーザーをコンピューターからすぐにログオフし、ログオンセッションが終了することをアプリケーションに通知しません。

これにより、データが失われる可能性があります。

1(0x1)

シャッタダウン

安全に電源を切れるところまでコンピュータをシャットダウンします。 (すべてのファイルバッファーがディスクにフラッシュされ、実行中のすべてのプロセスが停止します。)ユーザーにメッセージが表示されます。コンピューターの電源をオフにしても安全です。

シャットダウン中、システムは実行中の各アプリケーションにメッセージを送信します。アプリケーションは、メッセージの処理中にクリーンアップを実行し、Trueを返して、終了できることを示します。

5(0x5)

強制シャッタダウン

安全に電源を切れるところまでコンピュータをシャットダウンします。 (すべてのファイルバッファーがディスクにフラッシュされ、実行中のすべてのプロセスが停止します。)ユーザーにメッセージが表示されます。コンピューターの電源をオフにしても安全です。

強制シャットダウンアプローチを使用すると、WMIを含むすべてのサービスがすぐにシャットダウンされます。このため、リモートコンピューターに対してスクリプトを実行している場合、戻り値を受け取ることはできません。

2(0x2)

再起動

コンピュータをシャットダウンしてから再起動します。

6(0x6)

強制再起動

コンピュータをシャットダウンしてから再起動します。

強制再起動アプローチを使用すると、WMIを含むすべてのサービスがすぐにシャットダウンされます。このため、リモートコンピューターに対してスクリプトを実行している場合、戻り値を受け取ることはできません。

8(0x8)

パワーオフ

コンピュータをシャットダウンし、電源をオフにします(問題のコンピュータでサポートされている場合)。

12(0xC)

強制パワーオフ

コンピュータをシャットダウンし、電源をオフにします(問題のコンピュータでサポートされている場合)。

強制電源オフのアプローチを使用すると、WMIを含むすべてのサービスがただちにシャットダウンされます。このため、リモートコンピューターに対してスクリプトを実行している場合、戻り値を受け取ることはできません。




WordPressプラグインのページングデザインを変更する

WordPress

WordPressプラグインを開発する際、記事の一覧を表示するプラグインを開発する場合は、ページングがどうしても必須になってきます。
ページングとはページ送りのことで、一覧画面の次ページ・前ページ、といった機能の事です。


WordPressプラグインの標準機能で、「paginate_links」という機能を使えばページング自体は出力されるのですが、画面デザインについては自身でカスタマイズする必要があります。


今回は、WordPressプラグインのページングデザインを修正する方法を紹介します。


環境情報


  • WordPress 5.1.6

paginate_linksでのページング出力


WordPressプラグインでは、「paginate_links」を使用すればページングが出力されます。
記事一覧とページングを表示するサンプルプログラムは以下になります。


// 検索条件を設定
$paged = get_query_var('paged') ? get_query_var('paged') : 1 ;
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 20,
    'paged' => $paged
);
// クエリを実行
$query = new WP_Query($args);

// クエリ結果を表示
if ( $query->have_posts() ) {
    echo '<table>';
    $lc = 1;
    while ( $query->have_posts() ) {
        $query->the_post();
        echo '<tr>';
        echo '<td>';
        echo $lc;
        echo '</td>';
        echo '<td>';
        echo the_title();
        echo '</td>';
        echo '</tr>';
        $lc++;
    }
    echo '</table>';

    echo '
';
    echo paginate_links(array(
        'base' => str_replace(
            $big, '%#%', esc_url(get_pagenum_link($big))),
        'show_all' => true,
        'type' => 'list',
        'format' => '?paged=%#%',
        'current' => max(2, get_query_var('paged')),
        'total' => $query->max_num_pages,
        'prev_text' => '前へ',
        'next_text' => '次へ',
    ));
    echo '</table>';
    echo '
';
} else {
    echo "no result.
";
}

上記のプログラムでページング自体は表示されますが、デザインは何も設定されていない状態になります。



このページング部分について、CSSでデザインを設定していきます。


CSSを作成する


ページング部分のHTMLは以下になります。
このHTMLを「paginate_links」が出力しています。


<ul class="page-numbers">
    <li><a class="prev page-numbers" href="URL">前へ</a></li>
    <li><a class="page-numbers" href="URL">1</a></li>
    <li><span aria-current="page" class="page-numbers current">2</span></li>
    <li><a class="page-numbers" href="URL">3</a></li>
    <li><a class="page-numbers" href="URL">4</a></li>
    <li><a class="page-numbers" href="URL">5</a></li>
    <li><a class="next page-numbers" href="URL">次へ</a></li>
</ul>

<ul><li>のリスト形式でページングが構成されていることがわかります。
リスト形式を縦並びではなく横並びにする方法で何通りかあるのですが、inline-block形式で横並びにする方法でデザインを調整します。


以下のCSSを適用してみます。


ul {
  list-style: none;
}

ul.page-numbers {
  width: 1000px;
  padding:0;
  font-size:0px;
}

ul.page-numbers li {
  padding-top:10px;
  margin-left:10px;
  width:50px;
  border:1px solid black;
  display: inline-block;
  text-align: center;
  font-size:15px;
  height:30px;
}

ul.page-numbers li .current {
  font-size:15px;
}

ul.page-numbers li a {
  display: block;
  font-weight:bold;
}

ul.page-numbers li .current {
  padding-top:50px;
}

このCSSを適用することで、ページングのデザインが整います。



よくあるページングデザインにしてみたつもりですが、デザインを変更したい場合は、上記のサンプルCSSを調整すればデザインは調整できます。


CSSをプラグインに適用


CSSを自作したWordPressプラグインに適用する場合、プラグインのプログラムにCSSの読み込み処理を実装する必要があります。
まず、自作したCSSをプラグインフォルダに格納します。
以下の例では、プラグインフォルダの下にCSSという名前のフォルダを作成し、その中に「style.css」というファイルを格納しておきます。



WordPressプラグイン側の実装は、以下になります。


/**
コンストラクタ
*/
function __construct() {
    if (is_admin() && is_user_logged_in()) {
        wp_register_style(
            'myplugin_css', plugins_url('css/style.css', __FILE__));
        wp_enqueue_style('myplugin_css');
    }
}

使用する機能は以下の2つになります。


  • wp_register_style

CSSスタイルファイルの登録。


  • wp_enqueue_style

画面ページに CSSファイルを追加。


上記の実装をWordPressプラグインに実装することで、WordPressページにデザインが適用されます。