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を含むすべてのサービスがただちにシャットダウンされます。このため、リモートコンピューターに対してスクリプトを実行している場合、戻り値を受け取ることはできません。




FortniteAPIを使って対戦履歴を取得する

fortnite-Victory Royale

Fortniteおもしろいですよね。
筆者もハマっています。
下手ですが。


自分の対戦履歴(プレイ時間やキル数、など)などを知りたいなと思い、調べてみると「Fortnite Tracker」というサイトで調べることができます。


こういうサイト作ってみたいなと思い、もうちょっと調べてみるとAPIが準備されているみたいですね。
でも、このAPIのいい感じの日本語ドキュメントが見つからず。。。


という訳で、自分なりにAPIの処理結果を解析してみたので、その結果を紹介していきます


環境情報


使用するAPIは、Rakuten Rapid APIで公開されているAPIを使用します。
Epic(Fortniteの運営会社)が公開しているAPIをラップしている形ですかね。
使いやすいです。


今回は、上記のAPIをPHPから呼び出して、処理結果をWEBページに表示する形にします。


  • 言語:PHP5.5.35
  • API:Rakuten Rapid API/Fortnite-API

Rakuten Rapid API は従量課金制ですが、お試しで使う分には課金されるまではトラフィックは使わないと思います。


ステータス取得のAPI実行


APIの実行サンプルを紹介します。


今回はcurlを使ってAPIを実行しています。
キー情報(x-rapidapi-key)は、Rakuten Rapid APIで取得したキー情報を使用します。


Fortnite APIは、「Status」「Others」「PVE」の3つがありますが、戦歴を取得できるのは「Status」のようです。
「Status」APIをcurlで実行して、取得した結果をJSONデコードします。


$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://fortnite-api.p.rapidapi.com/stats/" . $_POST['__nickname'],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
        "x-rapidapi-host: fortnite-api.p.rapidapi.com",
        "x-rapidapi-key: '※APIのキー"
    ),
));
$response = curl_exec($curl);

// 実行失敗時はエラー表示
$err = curl_error($curl);
curl_close($curl);
if ($err) {
    echo "cURL Error #:" . $err;
} 

// JSONの処理結果をデコード
$resDecode = json_decode($response, true);

ソロ結果


ソロ結果を表示するWEB画面を作りました。

ニックネームを入力して「表示する」ボタンを押下すると、ニックネームユーザの戦歴が画面上に表示されます。


以下に、API実行結果の解析方法を紹介していきます。


ソロ結果の画面表示


「Fortnite Tracker」のソロ結果表示画面は以下になります。
吹き出しでコメントを入れている数値が、APIで取得できているはず、という事です。


FortniteAPIの実行結果

ソロ結果のAPI取得


FortniteAPIの実行結果に対する日本語マニュアルがみつからず、筆者が独自で解析した結果をまとめます。


まず、ソロ結果は”defaultsolo”キーに格納されているようです。

ソロ結果の格納場所
ソロ結果の各値

  • マッチ数

‘matchNum’キーの値。


  • 勝利数(ビクロイ)

‘winrate’キーの値。


  • キル数

‘kills’キーの値。


  • 勝率(ビクロイ率)

‘winrate’キーの値。


  • 1日あたりのキル数

‘kills’キーの値 / ’matchNum’キーの値。


  • TOP10の入賞数

‘placetop10’キーの値。


  • TOP25の入賞数

‘placetop25’キーの値。


  • 総プレイ時間

‘minutesplayed’キーの値。
値は分なので、日と時間にするには計算が必要。


  • 1マッチの平均時間

‘minutesplayed’キーの値 / ’matchNum’キーの値


  • 1マッチの平均キル数

‘kills’キーの値 /’matchNum’キーの値


  • 1分あたりのの平均キル数

‘kills’キーの値 /’mminutesplayed’キーの値


  • 1マッチの平均スコア数

‘score’キーの値 /’matchNum’キーの値


  • 1分あたりのの平均スコア数

‘score’キーの値 /’minutesplayed’キーの値


  • 総スコア数

‘score’キーの値。



MicrosoftProjectでスケジュールを作成する。タスクの作成や休日の設定方法。

スケジュール

システム開発において、まずPM(プロジェクトマネージャ)が作成するのがスケジュールかと思います。
「誰が」「いつまでに」「何を」を明確にしてスケジューリングします。


この際、スケジュールを作成するツールが必要になるのですが、筆者は「MicrosoftProject」がおすすめです。
ずっと使っていて慣れているという理由もあるのですが、とても高機能なので、スケジュール管理でやりたい事はほぼ全てできます。


今回は、「MicrosoftProject」でのスケジュールの作成方法について最低限覚えておくべきことを紹介します。
とても高機能なので、全ての機能を使うのは大変です。
というよりも、全ての機能を使わなくても実際のプロジェクトで耐えられるレベルのスケジュールは作成できます。
最低限、“これさえ覚えていれば大丈夫”という使い方を説明していきます。


環境


  • MicrosoftProject2007

プロジェクト全般の設定


タスクを作成していく前に、まずはプロジェクト全般の設定をおこないます。
プロジェクト全般の設定をきちんとおこなっていないと、以降のタスク作成に影響が出てしまいますので、まずはこの設定をきちんとおこなっていきましょう。


開始日の設定


プロジェクトの開始日を設定することができます。
ここの日付は様々な箇所で参照されますが、ここで設定する日付がタスクのデフォルト日付になります。


「プロジェクト」→「プロジェクト情報」から、『開始日』をプロジェクトの開始日とします。

MicrosoftProjectで開始日の設定

休日の設定


休日の設定も可能です。
デフォルトの休日設定では、通常の土日は休日に設定されていますが、祝祭日は休日に設定されていないので、自分で設定する必要があります。
また、人によっては個別の休日(有給を使って夏休み、とか)がありますが、祝祭日のようなPJ全体ではない、人毎の休日設定も可能です。


「ツール」→「稼働時間の変更」から、休日の設定をおこなうことができます。


全体の休日を設定する場合は、カレンダーの部分で「標準(プロジェクト カレンダー)」を設定して休日の設定をおこないます。

MicrosoftProjectで休日の設定

人によって異なるの休日の設定をおこなう場合は、「カレンダー」で休日を設定したい要員を選択して休日の設定をおこないます。
こうすることで、選択した要員(リソース)に対してだけ適用される休日を設定することができます。

MicrosoftProjectで休日の設定

タスクの作成


タスクを作成して、実際に各メンバに作業を割り振りします。


タスクを新規登録


タスク名の部分をダブルクリックすると、タスクの新規登録ウィンドウがひらくので、タスク名を入力してタスクを新規登録します。
タスクの新規登録ウィンドウで、期間・担当者の入力も可能です。

MicrosoftProjectでタスクの作成

子タスクを作成(レベル上げ・レベル下げ)


実際のプロジェクトでは、タスクは親子関係であることがほとんどです。
例えば、各画面のコーディングは『製造』というタスクの子タスクですし、各画面の試験は『試験』というタスクの子タスクです。
こういった、タスクの親子関係は、タスクの「レベル上げ・レベル下げ」で設定することができます。


以下例では、画面A・B・Cのコーディングと試験スケジュールを、親子関係を表現する形でスケジューリングしています。

MicrosoftProjectでタスクのレベル上げ・下げ

↓↓↓

MicrosoftProjectでタスクのレベル上げ・下げ

先行タスクを設定


「先行タスク」という形で、タスクの前後関係を設定することができます。
“このタスクが終わったらこのタスク”っていう設定が可能です。
「先行タスク」という名の通り、タスクの前のタスクを設定していきます。

MicrosoftProjectで先行タスクの設定

進捗の入力


スケジュールを作成した後に実際の作業を進めていくことになるのですが、各タスクの進捗を入力する必要があります。
この進捗管理もMicrosoftProjectで可能です。


この進捗の入力は「達成率」というフィールドで管理可能ですが、デフォルトではこの列は非表示となっています。
まずはこの列を表示する必要があります。


任意の列を選択して左クリックし、「列の挿入」を選択します。
そこで「達成率」を選択すれば、達成率フィールドが一覧に表示されるようになります。

MicrosoftProjectで進捗率の表示
MicrosoftProjectで進捗率の設定

この達成率フィールドにパーセンテージを入力するこで、各タスクの進捗を管理することができます。


印刷する


「MicrosoftProject」でスケジュールを作成しても、作成したスケジュールは「MicrosoftProject」がインストールされていないと参照できません。
Viewerで参照もできますが、一番手っ取り早い方法はPDFにして印刷する方法です。
そうすれば、皆が参照できます。


しかしそうした場合、デフォルトの設定だと1P目にしかタスク名が表示されず、とても見辛いです。


1P目

MicrosoftProjectで印刷

2P目

MicrosoftProjectで印刷

上記を解消するために、全てのページに左のタスク名等を表示することができます。
「ファイル」→「ページ設定」から、左からN列目までをすべてのページに印刷する、についてチェックをおこない、全ての印刷ページに印刷する列数を定義することができます。


MicrosoftProjectで印刷ページの設定

2P目

MicrosoftProjectで印刷

まとめ


MicrosoftProjectは非常に強力なスケジュール作成ツールで、とても高機能です。
しかし、今回紹介した機能さえ覚えていれば、プロジェクトを進めていく中で最低限必要な情報は定義・管理していくことができます。


上手にツールを使い、円滑なプロジェクト運営をしていきましょう!



Windows10でFTPサーバを構築して、DOSコマンドで動作確認までおこなう。

FTP

FTPサーバを使った開発をおこなう場合、各開発メンバそれぞれにFTPサーバを準備するのは骨が折れる作業です。
そういった場合は、Windows10で標準的に使えるFTPサーバを使用する方法が一般的と言えます。


今回は、Windows10上でFTPサーバを構築する方法と、動作確認方法まで紹介していきます。


環境情報


  • Windows10

IISを使ってFTPサーバを構築する


IISはInternet Infomation Service(インターネット インフォメーション サービス)の略で、Windowsに標準装備されているサーバサービス群になります。
今回は、このIISを使ってFTPサーバを構築します。


IISを有効にする


IISはWindows10に標準搭載されていますが、デフォルトでは無効になっています。
まずはこれを有効にして、IISを使用できるようにします。


「すべてのコントロールパネル項目」→「プログラムと機能」から、『Windowsの機能の有効化または無効化』をクリックして、Windowsの機能ウィンドウをひらきます。


Windowsの機能の有効化または無効化

Windowsの機能ウィンドウにおいて、インターネットインフォメーションサービスの「FTP Service」と「IIS 管理コンソール」の2つをチェックし、OKボタンを押下して終了します。


FTP Service」と「IIS 管理コンソール」

変更の適用が始まりますので、しばらく待ちます。


変更の適用

「変更が完了しました」のメッセージが表示されれば、IISの有効化は完了です。



IISが有効化されたかを確認してみましょう。
Windowsのプログラムバーに「インターネットインフォメーションサービス(IIS)マネージャー」が表示されていれば、IISの有効化は成功です。


インターネットインフォメーションサービス(IIS)の有効化完了

FTPユーザを作成する


FTPのユーザは、Windowsのユーザとして準備する必要があります。
管理ツール → コンピュータの管理からユーザを選択し、新しいユーザを作成します。


今回は、以下の情報を入力しています。


ユーザ名 ftp
フルネーム FTPユーザ
説明 IIS接続用ユーザ
パスワード password

Windowsユーザの作成

作成ボタンを押下したら、ユーザが作成されていることを一覧で確認します。



FTPサイトの作成と設定


FTPサイトを作成し、ファイルの格納場所を確保します。


Windowsのプログラム検索でIISと入力するとIISが表示されるので、アプリケーションを選択してインターネットインフォメーションサービス(IIS)マネージャーを起動します。



接続ペーンで「サイト」を選択し、操作ペーンで「FTPサイトの追加」を選択します。



FTPサイトの追加ウィンドウが表示されます。


FTPサイト名は任意で構いません。
解りやすい名前をつける形でよいでしょう。
コンテンツディレクトリは、接続先のパスとなります。


今回は、以下の情報を入力しています。


FTPサイト情報の作成

FTPサイト名 FTP接続試験
物理パス D:\temp

入力が完了したら次へボタンを押下します。


バインドとSSLの設定ウィンドウに移ります。
バインドするIPアドレスはすべて「全て未割当」を選択します。


FTPサイトを自動的に接続するはチェックでよいです。


SSLは無しにします。


入力が完了したら次へボタンを押下します。


FTPサイトの追加

バインドとは、FTPでの接続を指定したIPでのみ許可する設定となります。


バインドに関しては、複数のNICでIPアドレスを複数所有していなければ、「全て未割当」でよいです。


認証情報の入力に進みます。


認証方法は匿名とし、匿名ユーザに対して読み取り・書き込みを許可するようにします。


入力が完了したら終了ボタンを押下します。



サイトの一覧に追加したサイトが表示されていれば、サイトの追加に成功です。



DOSコマンドを使って動作確認


FTPサーバで想定通りに構築できたかを確認します。
Windowsに標準搭載されているFTPコマンドを使って確認するのが一番早いです。


以下のFTPコマンドは、DOSプロンプトで実行します。


ftpモードにする(ftp)


ftpコマンドで、ftpモードに移行します。


D:\work>ftp
ftp>

サイトに接続する(open)


openコマンドでサイトに接続をおこないます。
「open ※ホスト名」の書式になります。


今回はローカルPC上でFTPサーバを構築しているので、ホスト名はlocalhostになります。


ftp> open localhost
DESKTOP-U7JE3FQ に接続しました。
220 Microsoft FTP Service
200 OPTS UTF8 command successful - UTF8 encoding now ON.

ユーザ名とパスワードを入力すればFTPサーバにログインできます。
最初の手順でWindowsユーザとして作成したユーザ名とパスワードを指定します。


ユーザー (DESKTOP-U7JE3FQ:(none)): ftp
331 Anonymous access allowed, send identity (e-mail name) as password.
パスワード:
230 User logged in.
ftp>

ローカルディレクトリの指定(lcd)


転送するファイルが格納されているディレクトリ(転送元)に移動します。


ftp> lcd d:\work
ローカル ディレクトリは現在 D:\work です。

リモートディレクトリの指定(cd)


転送先ディレクトリに移動します。


ftp> cd ./dest
250 CWD command successful.

現在のディレクトリ位置を確認(pwd)


cdで移動しましたが、意図したディレクトリに移動されているかを確認します。


ftp> pwd
257 "/dest" is current directory.

転送モードを指定(ascii bin)


転送モードはASCIIモード(ascii)とバイナリモード(bin)の二種類があります。
今回はファイルを転送しよう思いますので、asciiを指定します。


ftp> ascii
200 Type set to A.

ローカルディレクトリからFTPサーバへ転送する(put)


ファイルをFTPサイトにアップロードします。
アップロードはputコマンドを使用します。


ftp> put test.txt
200 EPRT command successful.
150 Opening data connection
226 Transfer complete.
ftp: 16 バイトが送信されました 0.01秒 1.60KB/秒。

「Transfer complete.」が表示されれば転送成功です。
実際に転送されているかは、FTPサーバをエクスプローラーで確認可能です。


FTPサイトをエクスプローラーで確認

FTPサーバからローカルディレクトリに転送する(get)


FTPサーバからファイルをダウンロードします。
ダウンロードはgetコマンドを使用します。


ftp> get test.txt
200 EPRT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
ftp: 16 バイトが受信されました 0.00秒 16000.00KB/秒。

「Transfer complete.」が表示されれば転送成功です。
ローカルディレクトリ(lcdで確認)にgetしたファイルが表示されていれば転送成功です。


FTPのコマンドを確認する(help)


この記事で紹介したコマンド以外にも、ftpコマンドは存在します。
全てのコマンドはhelpコマンドで確認できます。


ftp> help
コマンドは省略することができます。コマンド:

!               delete          literal         prompt          send
?               debug           ls              put             status
append          dir             mdelete         pwd             trace
ascii           disconnect      mdir            quit            type
bell            get             mget            quote           user
binary          glob            mkdir           recv            verbose
bye             hash            mls             remotehelp
cd              help            mput            rename
close           lcd             open            rmdir

まとめ


IISでFTPサーバを構築してから動作確認まで解説しました。


まとめ
  • IISはWindowsに標準搭載されているサーバサービス群
  • 構築後の動作確認はFTPコマンドで実施するのが早い

FTPコマンドを使用すると、実際のFTPの挙動を直感的に把握することもできるのでお勧めです。