0

これが実行可能かどうかはわかりませんが、次のバッチ スクリプトを 1 行で記述しようとしています。

@echo off

echo Shutdown initiated...
echo.
choice /c xy /n /t 10 /d y /m "To cancel shutdown press "X""
if errorlevel 2 goto EXEC
if errorlevel 1 goto ABORT

:EXEC
echo.
echo Computer shutting down 
timeout /t 10 
exit
:ABORT
echo.
echo Shutdown cancelled 
timeout /t 10
exit

上記のスクリプトは、vbs run コマンドを介して cmd に渡す必要があります。以下は私が得ることができる最も近いものです:

option explicit
dim wshell, strcmd

set wshell = createobject("wscript.shell")

if hour(now()) >= 0 and hour(now()) < 6 then
strcmd = "cmd /c @echo off & echo ""Pre-Dawn Shutdown initiated"" & echo. & choice /c xy /n /t 10 /d y /m ""To cancel shutdown press ""X"""" & if errorlevel 2 goto exec & if errorlevel 1 goto abort & :exec & echo. & echo ""Computer shutting down"" & timeout /t 10 & exit & :abort & echo. & echo ""Shutdown cancelled"" & timeout /t 10 & exit"
wshell.run strcmd
end if

上記は、選択コマンドに到達するまで期待どおりに機能し、スクリプトは残りを正しく実行できません。これを解決するための助けをいただければ幸いです。

4

2 に答える 2

2

これは、ヘルプの Win32_OperatingSystem クラス トピックの Win32Shutdown メソッドからのものです- https://msdn.microsoft.com/en-us/library/aa394058(v=vs.85).aspx

Dim testResult 
Dim WMIServiceObject, ComputerObject  

'Now get some privileges 
WMIServiceObject = GetObject(
"Winmgmts:{impersonationLevel=impersonate,(Debug,Shutdown)}")
ForEach ComputerObject In WMIServiceObject.InstancesOf("Win32_OperatingSystem") 
    testResult = ComputerObject.Win32Shutdown(0, 0) 'logoff 
    If testResult <> 0 Then 
        MsgBox("Sorry, an error has occurred while trying to perform selected operation") 
    EndIf 
Next

これは、あなたが何をしたいのかを示す表です。(最初のパラメーター)

0 (0x0) ログオフ - ユーザーをコンピュータからログオフします。ログオフすると、exit 関数を呼び出したプロセスのセキュリティ コンテキストに関連付けられているすべてのプロセスが停止し、現在のユーザーがシステムからログオフされ、ログオン ダイアログ ボックスが表示されます。

4 (0x4) 強制ログオフ (0 + 4) - ユーザーをコンピュータからすぐにログオフし、ログオン セッションが終了することをアプリケーションに通知しません。これにより、データが失われる可能性があります。

1 (0x1) シャットダウン - 電源を安全にオフにできるポイントまでコンピューターをシャットダウンします。(すべてのファイル バッファーがディスクにフラッシュされ、実行中のすべてのプロセスが停止されます。) ユーザーには、コンピューターの電源を切っても安全ですというメッセージが表示されます。シャットダウン中、システムは実行中の各アプリケーションにメッセージを送信します。アプリケーションは、メッセージの処理中にクリーンアップを実行し、終了できることを示すために True を返します。

5 (0x5) 強制シャットダウン (1 + 4) - 電源を安全にオフできるポイントまでコンピューターをシャットダウンします。(すべてのファイル バッファーがディスクにフラッシュされ、実行中のすべてのプロセスが停止されます。) ユーザーには、コンピューターの電源を切っても安全ですというメッセージが表示されます。強制シャットダウン アプローチを使用すると、WMI を含むすべてのサービスが即座にシャットダウンされます。このため、リモート コンピュータに対してスクリプトを実行している場合、戻り値を受け取ることができません。

2 (0x2) 再起動 - コンピュータをシャットダウンしてから再起動します。

6 (0x6) 強制再起動 (2 + 4) - コンピューターをシャットダウンしてから再起動します。強制再起動の方法を使用すると、WMI を含むすべてのサービスがすぐにシャットダウンされます。このため、リモート コンピュータに対してスクリプトを実行している場合、戻り値を受け取ることができません。

8 (0x8) 電源オフ - コンピュータをシャットダウンし、電源をオフにします (問題のコンピュータでサポートされている場合)。

12 (0xC) Forced Power Off (8 + 4) - コンピュータをシャットダウンし、電源をオフにします (問題のコンピュータでサポートされている場合)。強制電源オフ アプローチを使用すると、WMI を含むすべてのサービスがすぐにシャットダウンされます。このため、リモート コンピュータに対してスクリプトを実行している場合、戻り値を受け取ることができません。

于 2016-09-04T20:27:38.827 に答える
1
于 2016-09-04T06:40:39.947 に答える