none
ログオフスクリプト、シャットダウンスクリプトが実行されない RRS feed

  • 質問

  • データバックアップの為にrobocopyをバッチファイルで作成して

    そのバッチファイルを実行するvbsスクリプトファイルを作成しています。

    会社の業務終了後、PCのシャットダウン前にバックアップを行うように、

    gpedit.msc>ユーザーの構成>ログオフスクリプトにvbsスクリプトファイルを設定しました。

    robocopyのバッチファイルはNAS(A)からNAS(B)へのバックアップです。

    vbsスクリプトファイル、バッチファイルともにNAS上に保存されています。

    この環境下でシャットダウンするとログオフスクリプトが実行できません。

    vbsスクリプトの内容はポップアップを表示させてユーザーがOKボタン押下でバッチファイルを実行、キャンセル、操作なしの場合はシャットダウンするような内容です。

    gpedit.msc>コンピューターの構成>管理用テンプレート>システム>ログオン>

    コンピューターの起動およびログオンで常に・・・・を有効としましたが駄目です。

    実行中のログオフスクリプトの命令を表示する

    グループポリシーの最大待機時間を指定する

    ネットで調べて上記も設定しました。

    vbsスクリプトを手動でダブルクリックして実行すれば正常にポップアップ表示がされますが、

    ログオフスクリプトに設定すると表示されなかったり、表示されてもタイトルやコメントOKキャンセルボタンが不完全な状態で表示されます。

    バックアップファイル、バックアップを実行するスクリプトファイル、バッチファイルが全てネットワーク上のファイルの為シャットダウンスクリプトでは動作しない?と思われる為、ログオフスクリプトに設定しましたが、

    他に設定が必要なんでしょうか。ご教授願います。


    2019年10月27日 3:25

すべての返信

  • 自分もログオフスクリプトやシャットダウンスクリプトでbatファイルを動作させた時に動作が安定しなかった経験があります。

    ※うまく動作したり、動作しなかったり。。。

    自分の検証していた時の感覚ですが、ログオフスクリプトやシャットダウンスクリプトで何か動作させようとすると、当然、ログオフやシャットダウンが開始している為、サービスもどんどん停止している感じがあります。

    それで上手く動作しないのではないかと感じ、ログオフスクリプトやシャットダウンを使用するのは諦めました。

    (自分が検証していた時はあるアプリケーションをアンインストールすることを検証していました。)

    ちなみにNAS(A)→NAS(B)へデータをバックアップしたいのであれば、NAS(A)のバックアップ機能で適宜バックアップするのは駄目なのでしょうか?

    おそらく、通常のNASであればバックアップ機能があるかと思うのですが、、

    最後にログオフスクリプトとシャットダウンスクリプトでは動作する権限が違うので注意が必要です。

    ログオンやログオフスクリプト・・・ユーザー

    スタートアップやシャットダウンスクリプト・・・SYSTEM

    その為、シャットダウンスクリプトでアクセス権が設定されているネットワーク上のフォルダにアクセスするためには「net use」コマンド等でアクセスするためのユーザー情報が必要になります。

    ※ログオンやログオフスクリプトは動作させているユーザー権限なので不要だと思われますが。

    参考になれば幸いです。

    2019年10月27日 20:48
  • ご回答ありがとうございます。

    NAS(A)のバックアップ機能ではUSB接続のHDDなら可能ですが、NASへのバックアップは不可です。

    USB接続のHDDにバックアップをしてる上でさらにNAS(B)にもバックアップを実行しております。

    また、robocopyの中身が上記のバックアップとは別にローカルから外付けHDDのバックアップも実行しています。

    WINDOWS7では問題なく動作していたのですが、10で同じ設定をしても上手く動作しなくなり諦めの悪い性格も仇となりドハマりしております。

    WINDOWS10で色々早くなったおかげで本問題が発生していると思うのですが。。。

    高速スタートアップを無効にしたり色々試していますが一向に解決の糸口が見つかりません。

    なんとか実現出来るようにもう少し調べてみます。

    2019年10月28日 9:21
  • その後、WINDOWSUPDATEやドライバーアップデートを実行したことにより?
    vbsスクリプトファイルのポップアップ表示は完全な状態で表示されるようになりました。

    ただし、うまく動作したり、動作しなかったり。。。の状況です。
    グループポリシーやWINDOWSの設定などPCの環境を変更したり確認したりした直後だけ?は正常に実行されますが、再起動して環境を何もさわらないままシャットダウンすると実行できません。

    ポップアップが表示されないだけで実はログオフスクリプト自体は実行できているのでしょうか?

    2019年11月9日 7:07
  • 本気で調べるなら Process Monitor でシャットダウン時のログを採取すれば良いかも。

    Hebikuzure aka Murachi Akira

    2019年11月9日 8:18
  • チャブーンです。

    この件ですが、まず大前提として「ログオン/ログオフ/スタートアップ/シャットダウンスクリプトにおいて、『UI操作を必要とする』コードを入れてはいけない」という仕様かなと思います。スクリプトは「完全自動化」だからこそ意味合いがあり、その前提で実装されているので、ユーザー操作で途中で止まる、ことは想定されていません。ムリにそのようなことを行うと、こういうケースが起こると思います。

    何が何でもそうしたい、というなら、次の2つのグループポリシーを設定してみてはどうでしょうか。

    • コンピューターの起動およびログオンで常にネットワークを待つ
    • ログオンスクリプトを同期的に実行する

    ログオンスクリプトを同期的に実行するよう設定した場合、ログオフスクリプトも同期的に動作するようになる可能性があります。これは以下のMS資料に"Setting logoff scripts to run synchronously may cause the logoff process to run slowly."とあるためで、おそらくこの設定を行った際の動作変更を指しているのかと思います。

    https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn789190(v%3Dws.11)?WT.mc_id=EM-MVP-8322


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    2019年11月11日 6:05
  • チャブーンさん

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

    ログオンスクリプトを同期的に実行する

    設定をしましたが残念ながら駄目でした。コンピューターの構成、ユーザーの構成のどちらも試して、両方共も設定したり色々試しましたが駄目でした。追記のとおりグループポリシー設定直後は正常に実行されてポップアップ表示されますが、再起動後はそれ以降、実行できません。おそらくグループポリシーを開いただけでもその直後はログオフスクリプトが実行されるようです。多分ですが。。。また、実行できないといっておりますが、ポップアップがうまく表示されていないだけで、ログオフスクリプト自体は実行されているのかもしれません。

    質問で書かせてもらいましたがユーザーの操作によりバックアップを実行するかしないかを分岐させるためにポップアップ表示させるvbsスクリプトをあてています。具体的にはUPS(無停電装置)のソフトと連携させており、UPSのバッテリーが設定値以下となった場合に自動でシャットダウンさせます。その際にはユーザーは意図せずシャットダウンする為に(会社の業務時間外で誰も操作出来ないと仮定)バックアップはせずにそのままシャットダウンさせたいと思っております。

    WINDOWS7では出来ていたのでWINDOWS10でも必ず出来ると思っており諦めきれません。ハード的な問題まで疑っております。モニタとPCとの連動でなんかタイミング的なものなのかと思ってきており、後日PCメーカーにBIOS設定で何か無いか確認してみようと思います。

    他にも何か気になる点がございましたら、ぜひともご教授ください。宜しくお願い致します。

    2019年11月12日 13:53
  • この話は「仕様として保証される動作」と「保証はされないけれど実際には機能してしまう動作」の違いのように思います。Windows 7 の時にログオフ スクリプトに UI インタラクションを入れて正常に動作したというのは後者で、それが「仕様として保証」されていた動作ではないということでしょう。

    ですから Windows 10 でもハードウエア環境やソフトウエア環境が変われば Windows 7 の時と同様に「動いてしまう」ことはあるかもしれませんが、そのような環境の組み合わせを探すのは現実的ではないし、安定して動作し続けることを保証するものでもないので、どちらかと言えば無駄働きの部類だと思います。

    どうしても UPS からの情報でシャットダウンする際のバックアップを止めたいのであれば、UPS からの情報を受信した後、シャットダウンを開始する前にフラグとなるファイルを作成し、ログオフスクリプトの中でそのフラグを確認して UPS からの指示でのシャットダウンであればバックアップを行わないよう分岐するというような方法が考えられます。


    Hebikuzure aka Murachi Akira

    2019年11月13日 8:54
  • Hebikuzure aka Murachi Akiraさん

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

    独自で色々と検証して進展がありました。ログオフスクリプトのファイルをデフォルトのC:\Windows\System32\GroupPolicy\User\Scripts\Logoffに置いて設定したところ正常に実行されることが分かりました。勝手な推測ですが、WINDOWS10の高速化を無効としましたが、ディスクドライブがSSDの為にスクリプトが実行される前にネットワークが切断されているのかな?と考えております。WINDOWS7はHDDでした。ネット上でたくさん見かけたのですが、システムが早くなると良いことばかりではないのでしょうか。。。

    ファイル管理を容易にしたいのでNAS上に上記のファイルを置いて正常に実行出来ないでしょうか。確実にスクリプトが実行されてからネットワークが切断されればすべて解決しそうです。

    どうか宜しくお願い致します。

    2019年11月13日 13:13
  • 仕様的に動作が保証されていないと考えられる方法を追求するより、原理的に確実に動作する方法を考えるべきだと思います。どうしても今のやり方にこだわられるのであれば、ご自身で検証していただくしかないでしょう。ただそれが「今」動作したとして、将来的に動作し続けるかどうかは別ですね。


    Hebikuzure aka Murachi Akira

    2019年11月14日 1:00