アプリ版:「スタンプのみでお礼する」機能のリリースについて

マシンをシャットダウンする時、ローカルコンピュータポリシーに設定された
シャットダウンスクリプトを実行するかどうか選択する仕組みを作ることはできないでしょうか?

やりたいことは以下です。
・毎日PCの電源を切るときにスクリプトを実行したい
・それは、ログオフしてシャットダウンする前(シャットダウンスクリプトのタイミング)で実行したい
・ただしそのスクリプトは時間がかかる
・業務中にシャットダウン(or再起動)した時には、スクリプトを実行したくない
・1日の終わりにシャットダウンしたときだけスクリプトを実行したい

方向性としては2つあると思っております。
【方向性1】
業務中のシャットダウン(or再起動)は、スタート→シャットダウンで実行する。
帰宅前のシャットダウンでは、用意してあるスクリプトを実行してシャットダウンする。
そのスクリプトでは、シャットダウンスクリプトを設定してからシャットダウンする(shutdown.exe)
スタートアップスクリプトでは、シャットダウンスクリプトが設定されていれば、その設定を解除するようにしておく。
→ <質問1>スクリプトでシャットダウンスクリプトを設定/解除する方法が分かりません。

【方向性2】
<質問2>シャットダウンスクリプトを実行するかどうか選択してシャットダウンする方法が存在する?

環境 : Windows XP Pro XP3

<質問1><質問2>をご存知の方、ご教授お願いします。
また、上記以外の方向性で実装できる手段がありましたら、同じくご教授お願い致します。

A 回答 (5件)

よくわかりませんが、



時間/曜日等の設定をしてタスクにスクリプトを登録すれば、
指定時間に実行されるかと思いますが・・。

その時間以外は手動(スタート→シャットダウン)ということに。

この回答への補足

やりたいことは、指定した場合のみシャットダウンスクリプトを実行し、
それ以外の場合は通常のシャットダウンを実行させることです。

Windowsのタスクでは、ログオン時・起動時の設定はできますが、
シャットダウン時の設定はできません。

補足日時:2009/12/16 18:07
    • good
    • 0

>帰宅前のシャットダウンでは、用意してあるスクリプトを実行してシャットダウンする。


私は「帰宅前このアイコンで電源を落としてください」という「操作指導」で終わらせました。
そのアイコンにはバックアップ用のプログラムを入れてます。このプログラムの最後でShutdown.exeを実行しています。(当然バックアップのみの選択もできます)
私もシャットダウンスクリプトは検討したのですが面倒なので「操作指導」で終わらせました。
運用でカバーできるならあまり複雑にしないほうがいいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

そもそもシャットダウンスクリプトである必要があるのかは確かに別途検討が必要かと思います。
その検討はしますが、ここではあくまで「シャットダウンスクリプトを選択的に実行する方法・仕組み」を質問させて頂きます。

お礼日時:2009/12/16 18:12

スクリプトを修正してよいのであれば、たとえば、VBScript の場合は MsgBox で問い合わせできますよ。


シャットダウン スクリプトでも動作します。

参考URL:http://www.upken.jp/wiki/vbs_msgbox_sample.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

この方法は良いかもしれません。

数分間ユーザの入力を待ち、
入力があった → スクリプトを実行しない
入力がなに → スクリプトを実行する
というケースで分ければ、要件を満たすかもしれません。
業務中必要なシャットダウンであれば、ユーザはマシンの前にいるはずですから。

検討してみます。ありがとうございました。

お礼日時:2009/12/16 18:16

他の方が回答されていますが、vbsのmsgboxの返り値を変数に入れれば、ユーザの応答を得ることが出来ます。


「本日の業務を終了しますか?(Y/N)」みたいなものです。
Yにしたばあいは特定の処理に移り、Nの場合は処理せずにシャットダウンまたは再起動になるようにします。

ローカルポリシーにスクリプトを設置する場合ですが、対象の作業をさせるスクリプトを直接登録しても、処理が終わる前にシャットダウンしてしまうことがあります。その場合はいくつか方法がありますが、「対象の作業」が何らかのアプリケーションを起動する場合、WMIのプロセス監視機能を同VBSに仕込んで、目的のプロセスが動いている間はスクリプトが終了しないようにループ文を作ることで対応できます。

私はこの方法で、WEBアプリを使い「帰宅時間管理」を運用をしていました。(WMIでIEを監視)

何かのご参考になればと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> ローカルポリシーにスクリプトを設置する場合ですが、対象の作業をさせるスクリプトを直接登録しても、処理が終わる前にシャットダウンしてしまうことがあります。

この点は、ShellオブジェクトのRunメソッドを使い外部プログラムの終了まで待機させることで、シャットダウンスクリプトにおいても確実にスクリプト全体を実行させることができることを確認済みでした。

Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run(EXE_PATH, 1, True)

お礼日時:2009/12/17 04:54

> 数分間ユーザの入力を待ち、


> 入力があった → スクリプトを実行しない
> 入力がなに → スクリプトを実行する
> というケースで分ければ、要件を満たすかもしれません。

この要件であれば、MsgBox ではなく、Popup の出番ですね。

参考URL:http://www.upken.jp/wiki/wsh_popup_sample.html
    • good
    • 0
この回答へのお礼

ちょうど明日実装方法を探してみようと思っていたところでした。
助かりました。ありがとうございます。

お礼日時:2009/12/17 04:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!