起動時またはシャットダウン時にバッチ ファイルを実行するようにスケジュールするにはどうすればよいですか?

起動時またはシャットダウン時にバッチ ファイルを実行するようにスケジュールするにはどうすればよいですか?

サーバーのシャットダウンまたは起動を通知するための電子メールを送信するバッチ ファイルが 2 つあります。バッチ ファイルは、送信するメッセージという 1 つの引数を持つ exe を呼び出します。exe は、system.net.mail を使用する vb.net プログラムから取得されます。

バッチファイルはコマンドプロンプトから正常に動作し、電子メールが受信されます。

ここで、OS の起動時とシャットダウン時に、ユーザーがログオンしなくてもこれらのバッチ ファイルが自動的に実行されるようにしたいと思います。

私はこれを Win 8.1 マシンでテストしてみましたが、Server 2012 R2 と同じように動作するはずです。この仮定が間違っている場合は、アドバイスをお願いします。

そこで私が試してみたのがこれです:

1) タスク スケジューラ (ただし、起動時のみ有効で、シャットダウン オプションはありません)

2) ローカル グループ ポリシー エディター > コンピューターの構成 > Windows の設定 > スクリプト (スタートアップ/シャットダウン)

どちらの場合も、セットアップは非常に簡単に思えましたが、電子メールは送信されませんでした。

明らかに私が考えていない考慮事項について、誰かアイデアをくれませんか?

問題は権限ですか? どうすればそれがわかりますか?

問題は「スケジュールされているように見えるが、実際にはスケジュールされていない」ということでしょうか?

問題は、バッチファイルをこのように使用できないことですか?

初めてなので、何か基本的なことが抜けているのは確かです。

答え1

これは、以下に示す 2 つの制限のため、実際には回答ではありませんが、コメントするには長すぎるので...

私は次の 2 つの欠点がある簡単なテストを実行しました。

  1. スクリプトは電子メールを送信しません。ISP の SMTP リレーが必要ですが、それを探すのは面倒すぎます。
  2. 私は Win8.1 ではなく、Win10 プレビューでテストしています。今晩はこれがすべてです。

内部ではLocal Group Policy Editor > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown)、ディレクトリに 1 つのスタートアップ PowerShell スクリプトを配置しstartup、ディレクトリに 1 つのシャットダウン PowerShell スクリプトを配置しましたshutdown

Powershell Scripts各スタートアップ ポリシー ノードとシャットダウン ポリシー ノード内のタブの下にスクリプトを追加するように特別な注意を払いました。

c:\tempスクリプトを作成するのが面倒だったので、というディレクトリがあることを確認しました。

また、次のコマンドを実行して、PowerShell スクリプトが許可されていることを確認しました。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

起動スクリプトは次のとおりです。

if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date 
$string = "$timestamp UP!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber

シャットダウン スクリプトは次のとおりです。

if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date 
$string = "$timestamp DOWN!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber

その後、コンピューターを再起動しました。c:\temp\log.txtファイルの内容は次のとおりです。

06/01/2015 00:07:45 DOWN!
06/01/2015 00:08:10 UP!

メールを送信した場合も同じ結果になると予想されますが、もちろん実際に試してみなければ確信は持てません。

答え2

皆さんのコメントや回答を勉強して活用することで、実際に私の問題は解決しましたが、時々あることですが、本当の問題は多少違っていました。そのため、他の誰かが同じ「落とし穴」に引っかかった場合に備えて、私にとって実際に何が問題であったかを投稿する義務があると感じています。

スクリプトテスト中に思われたWin 8.1マシンで作業する方が便利だと思ったが、そうではなかった。想定される私の Win 8.1 マシンは実際には Server 2012 R2 と同じように動作します。私の想定は間違っていました。

すべてを 2012 R2 サーバーに移行した瞬間から、スクリプトは問題なく動作し、それ以来ずっと問題なく動作しています。Win 8.1 マシンの反応がなぜ異なるのかは説明できませんが、そうなってしまったのです。

そこで私の解決策は、起動/シャットダウン スクリプトのテストに Win 8 または 8.1 マシンを使用せず、ターゲット サーバー上で実行するというものでした。

(返信が遅れて申し訳ありません。長期旅行で町を離れていたのです)

答え3

イベント ビューアーに移動し、ログオンおよびログオフのセキュリティ イベントを検索して右クリックし、電子メールを送信するこのイベントのタスクを追加します。

それが最善の方法です。

関連情報