はじめに
Windows Serverを触る機会があった時に、Windows Serverから他のWindows Serverの
batファイルを実行する事がしたかったけど、環境的にできませんでした。(技術的には可能)
Windows Serverを滅多にさわらない自分には良い勉強だと思い
調べた事を備忘録的にまとめたいと思います。
環境
Windows Server 2016 x 2台(ドメイン非参加)
検証項目
1.タスクスケジューラを使用
2.Powser Shellを使用
3.WMICを使用
1.タスクスケジューラを使用
タスクスケジューラを管理するコマンドは「schtasks」です。
このコマンドプロンプトのオプションは
>schtasks /?
今回は、接続先サーバにて予め登録しているタスクを実行する事が目的です。
なので、オプションは、「/Run」を使用します。
上記の/Runオプションを見て見ると「/S」オプションで対向サーバに接続できそうですね。
では、接続先(W2K16)にてテスト用のタスクスケジューラにタスクの追加を行います。
簡単なbatファイルを用意
createZeroFile.bat
内容:
type nul > c:\temp\hogehoge.txt
格納先:
c:\temp
上記のバッチファイルを作成し格納します。
また、タスク内容は以下の通りに登録しました。
接続先(タスクスケジューラ)
スタート → Windows 管理ツール → タスクスケジューラ
基本タスクの作成
名前:fileCreateZero
トリガー
1回限り
開始時間は、任意
操作
プログラムの開始
プログラム/スクリプト:C:\temp\createZeroFile.bat
これで、接続先サーバでの準備は完了。
今度は接続元でschtasksコマンドでリモートのタスクを実行していみます。
上記のエラー原因は、接続先のファイアウォールが原因でした。
DROPしたポート番号を調べ、許可ルールを設定したら実行できました。
そのポート番号が以下の通りです。
・49667/TCP
・137/TCP
・135/UDP
また、以下のコマンドで実行するとバッチファイルが実行されます。
2.Powser Shellを使用
まず、リモートのバッチファイルを実行するためには、
接続先にてWinRMが有効になっていなければなりません。
WinRMとは、Windows Remote Managementという名称で別のWindowsに対してリモート通信するためのプロトコルです。
なので、以下のコマンドを使用し状態を確認します。
Powershell起動
スタート → Windows PowerShell → PowerShell
上記の結果通り「Running」となっているので既に実行済みとなっているようです。
ファイアウォールが有効になっていると当然パケットがDROPされますので
以下のPowerShellコマンドを使って許可ルールへ登録します。
上記通り、登録が完了しました。
念のため、ファイアウォールのルールに登録されているか確認したところ
以下の通りに登録されていました。
ルール名:
Windows リモート管理 (HTTP 受信)
プロファイル
すべて
ポート番号
80
ADに参加しているサーバであれば不要っぽいのですが
信頼できるホストの登録を接続元で実行します。
確認コマンド:
コマンド実行
3.WMICを使用
コマンドプロンプトを開き以下のコマンドを実行する。
ここまで読んでくださって有難う御座います。
お疲れさまでした。