2017-12-04 12 views
-1

毎週(土曜日)午後3時にスケジュールされたタスクを設定するのに問題はありませんが、月の最後の日が土曜日になると再起動する必要があります日曜日の午後3時にロールオーバーする必要があります。毎週土曜日にスケジュールされた再起動タスクを作成する

これはタスクスケジューラに除外オプションがないとわかりませんので、私のオプションが何であるか不思議です。

+2

毎週土曜日に実行され、月の最後の日でない場合にのみリブートを開始するスクリプトを作成します。日曜日と同じですが、月の初めであれば再起動します。 –

答えて

2

1つの方法は、スクリプトを実行して、現在の日付がその月の最終日であるかどうかを確認することです。
はいの場合は、すぐに再起動しない場合は、再起動後24時間待機してください。

次のPowershellスクリプトは、あなたが望むことをします。毎週土曜日午後3時にそれを走らせてください。

#Get the last day of the current month 
$lastDayOfMonth = ((Get-Date).AddMonths(1)). 
        AddDays(-(Get-Date ((Get-Date).AddMonths(1)) -format dd)).Date 

if ((Get-Date).Date -eq $lastDayOfMonth) 
{ 
    #It's the last day of this month, reboot in 24 hours (86400 seconds) 
    shutdown -r -t 86400 
} 
else 
{ 
    #Reboot immediately 
    shutdown -r -t 0 
} 

もう1つの解決策は、サードパーティのタスクスケジューラソフトウェアです。

+0

ありがとうございます、これはうまくいくように私はテストします! :) – Mikoyan

2

Matsnowが提供するがバッチファイルとして行ったのと同じ概念です。 Powershellにはたくさんのオブジェクト指向関数が組み込まれているので、バッチファイルはもう少しコードです。

@Echo off 

REM Get Date and Time 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set yyyy=%dt:~0,4% 
set mm=%dt:~4,2% 
set dd=%dt:~6,2% 

REM Get Last Day of month 
call :DaysOfMonth %yyyy% %mm% 

IF "%lastday%"=="%dd%" (
    shutdown /r /t 86400 
) else (
    shutdown /r /t 0 
) 
GOTO :EOF 

:DaysOfMonth Year Month 
setlocal DisableDelayedExpansion 
set /a "yy = %~1, mm = 100%~2 %% 100" 
set /a "n = 30 + !(((mm & 9) + 6) %% 7) + !(mm^2) * (!(yy %% 4) - !(yy %% 100) + !(yy %% 400) - 2)" 
endlocal &set lastday=%n% 
GOTO :EOF 
関連する問題