Windows2000/XPで22時の時点でユーザーがログインしていなければ自動的にシャットダウンしたいです。


タスクにshutdown.exeコマンドを設定したところ、ログインの有無にかかわらず落ちてしまうので、アウトです。

*無償の範囲であれば手段(スクリプト(VBS,bat,etc)、フリーソフト等)は問いません。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/02/19 00:24:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント200pt

シャットダウンの動作検証はしていませんが、ログオンかどうかの判定は下記のようでできました。

(ログオン中はexplorer.exe が起動していることを判断材料にしています。)

If processCheck("explorer.exe") = True Then
	WScript.Echo "只今ログオン中なので、シャットダウンを実行しません。"
Else
    ' CreateObject("WScript.Shell").Run "shutdown.exe -s", 0, True
End If

'//------------------------------------------------
' プロセスが動いているかチェックする関数
'//------------------------------------------------
Function processCheck( pName )
'//------------------------------------------------
	processCheck = False

    Dim objPWMI
    On Error Resume Next
    Set objPWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\localhost\root\cimv2")
    Err.Clear
    On Error GoTo 0
    If Err.Number <> 0 Then Exit Function  '接続できなかったら、終了

    Dim colProc
    Set colProc = objPWMI.ExecQuery("Select * from Win32_Process WHERE Name='" & pName & "'")
	If colProc.Count > 0 Then processCheck = True
End Function

シャットダウン部分はコメントアウトしていますので、適宜変更ください。

id:kaasuke

ありがとうございます。

本日試してみてうまくいきました!

win2Kの場合shutdown.exe(system32に無い)でちょっとはまりましたが、なんとかなりそうです。

ありがとうございました!

2008/02/19 00:24:02
  • id:haruo-31
    VBSについてですが、ユーザがログイン中のとき実行されたことを
    悟られないようにするには、

    wscript script.vbs
    とし、
    WScript.Echo の記述を削除すれば良いです。
  • id:kaasuke
    haruo-31さん。

    ありがとうございます。
    >悟られないようにするには

    コメントどおり、そうしたかったです!
    ナイスコメントです。

    いやはや、VBS(WSH?←よくわかってませんが)のお勉強をしないといけないですね。
  • id:Mook
    多くのポイントとイルカありがとうございました。

    コードに一つミスがあります。
    Err.Clear は今回のケースでは不要なので、削除しておいてください。
    (使うなら Set の前に書かないといけないですね。)

    蛇足ですが、エラー時にもメッセージを表示させたくない場合には、
    WScript //B script.vbs
    のようにするのも手ですね。詳しくは WScript /? でご確認ください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません