Bagaimana saya bisa menjadwalkan server restart dari baris perintah pada Windows 2012?

15

Saya ingin menjadwalkan restart server satu kali, mis. Untuk menyelesaikan menginstal pembaruan di pagi hari. Bagaimana saya bisa melakukan ini dari baris perintah pada Windows 2012?

Pada Windows 2008, saya akan menggunakan atperintah,

at 2am shutdown -r -f -c "restart"

dan mengambil sisa sore itu.

Tetapi pada Windows 2012, menjalankan perintah ini memberi tahu saya hal itu

The AT command has been deprecated. Please use schtasks.exe instead.

Jadi perintah yang setara dengan schtasks.exe mungkin

schtasks /create /sc once /tn restart /tr "shutdown - r -f ""restart""" /st 02:00

Selain sangat dilupakan, perintah ini memiliki kelemahan penting lainnya : perintah ini menjadwalkan tugas untuk jam 2 pagi hari ini — tidak banyak digunakan kecuali saya bangun jam 1 pagi untuk menjalankannya.

Menurut bantuan untuk schtasks.exe, /sdsaklar untuk pengaturan tanggal mulai tidak berlaku dengan /sc once. Jadi, bahkan jika saya ingin mengetik tanggal besok dalam format mm / hh / tttt — dan saya tidak — saya tidak bisa melakukan ini.

Satu-satunya solusi yang mungkin saya temukan adalah di sini , di mana Kevin Traas menyarankan untuk membuat file batch untuk membuat tugas terjadwal sebelum tengah malam yang menunggu beberapa menit dan kemudian membuat tugas terjadwal lain untuk menjalankan perintah yang sebenarnya ingin Anda jalankan. Pintar, tapi tidak sedekat ini at.

Luke Sampson
sumber
@Lijo tautan itu tidak mengandung informasi tentang cara menjadwalkan restart.
Luke Sampson
Ini hanya kebodohan total untuk mengganti AT dengan schtasks yang tidak dapat digunakan. Mengapa mereka tidak bisa membuat keduanya? Tersentak!
midenok

Jawaban:

13

The shutdownperintah itu sendiri memiliki parameter delay /tyang menunda shutdown untuk sejumlah detik hingga 10 tahun. Jika Anda ingin menjadwalkan penghentian dalam 14 jam, katakanlah, Anda mungkin lari

shutdown /r /t 50400

Anda juga dapat menambahkan alasan dengan /dparameter atau komentar dengan /c; lari shutdown /?untuk detail.

Eamon Nerbonne
sumber
9

Meskipun dokumentasi, /SDparameter tampaknya kompatibel dengan /SC ONCE. Tugas berhasil dibuat untuk dijalankan pada tanggal yang disediakan, pada waktu yang disediakan. (Diuji pada W8 dan W7)

Selain itu, dokumentasi XPschtasks.exe untuk mengatakan /SDparameter diperlukan saat menggunakan /SC ONCE, jadi saya membayangkan ada cukup banyak skrip menggunakan kombinasi.

Contoh:

C:\Users\Mitch>schtasks /create /sc once /tn restart /tr "shutdown -r -f ""restart""" /st 23:00 /sd 2013-06-13
SUCCESS: The scheduled task "restart" has successfully been created.

C:\Users\Mitch>

Jika bertentangan dengan dokumentasi tidak cocok dengan Anda, pertimbangkan untuk membuat file XML secara langsung ( skema ada di sini ), yang pasti didukung dan pasti mendukung tugas yang dijadwalkan untuk dijalankan sekali di masa mendatang. Cara mudah untuk mendapatkan file yang tepat adalah dengan membuatnya di mmcsnap Task Scheduler dan gunakan perintah ekspor .

Contoh:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-06-12T21:20:51.004181</Date>
    <Author>FOOBAR\Mitch</Author>
  </RegistrationInfo>
  <Triggers>
    <TimeTrigger>
      <StartBoundary>2013-06-13T22:20:29</StartBoundary>
      <Enabled>true</Enabled>
    </TimeTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>FOOBAR\Mitch</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>Your command here</Command>
    </Exec>
  </Actions>
</Task>

Perintah untuk mengimpor:

schtasks /CREATE /TN "Task Name" /XML filename.xml
Mitch
sumber
Terima kasih atas tip tentang /sddukungannya. Itu menarik tentang impor XML juga — meskipun secara pribadi saya tidak peduli menentang dokumentasi. Jadi setidaknya ini mungkin — hanya saja, jauh lebih sulit daripada sebelumnya at.
Luke Sampson
Mildy menarik: /sdtidak berfungsi dengan /sc oncedi Windows Server 2008. HasilnyaERROR: Incorrect Start Date.
Luke Sampson
4
Hmm ... Saya juga menguji Server 2008 SP2 dan Server 2008 R2 tanpa masalah. Saya akan perhatikan bahwa format tanggal didasarkan pada format tanggal / waktu lokal Anda, dan nol di depan diperlukan. Pada instalasi EN-us default, ini akan mengarah ke format seperti /SD 06/14/2013.
Mitch
2

Saya akhirnya menciptakan runat.ps1untuk meniru beberapa fitur sederhana at, menggabungkan kebijaksanaan dari jawaban Mitch.

Sintaksnya adalah runat (time) (command), mis

runat 2am shutdown -r -f -c "restarting the server"
runat 10:15 msg * it`'s 10:15 everyone!

Jika Anda juga bernostalgia untuk masa lalu yang baik ketika Anda tidak perlu mengetik ...

schtasks /create /ru system /rl highest /sc once /tn restart /tr shutdown -r -f -c \"restarting the server\" /st 02:00 /sd 06/15/2013

... maka Anda dapat menginstalnya dengan menjalankan perintah powershell ini:

iex (new-object net.webclient).downloadstring('https://gist.github.com/lukesampson/5779205/raw/install.ps1');install runat https://gist.github.com/lukesampson/5778559/raw

Atau Anda dapat mengunduh runat.ps1skrip secara manual di sini .

Luke Sampson
sumber
1
+1 Itu adalah skrip yang sangat membantu ... ini pasti akan menjadi favorit saya.
Mitch
1

Saya menggunakan ini dalam skrip untuk 2012 R2 dan berfungsi dengan baik; Ini akan membuat tugas harian yang me-restart server @ 4:30 pagi

schtasks /create /ru system /rl highest /sc DAILY /tn restart /tr "shutdown /r /f /c "Restarting" /st 04:30

Harap pastikan bahwa Anda menjalankan ini dari prompt CMD dengan hak administratif.

Andy

Andy Denley
sumber
1

Hanya skrip PowerShell lain untuk secara sistematis me-reboot komputer pada hari berikutnya pada waktu yang ditentukan

$tomorrowDate = (get-date).AddDays(1).ToString("dd/mm/yyyy")

schtasks /delete /tn restart /f
schtasks /create /sc once /ru MyDomain\administrator /rp /tn restart /tr "shutdown -r -f" /st 07:13 /sd $tomorrowDate
Marc Cals
sumber
0

Saya sarankan menggunakan perintah schtasks dengan parameter / f.

Menggunakan / f, jika ada tugas dengan nama yang sama, itu dimodifikasi.

Ini sangat berguna untuk menyebarkan tugas melalui skrip.

Contoh lengkap restart server jadwal:

schtasks /create /ru system /rl highest /sc DAILY /tn Reinicio /tr "shutdown /r /f /t 0 /c "Reinicio"" /st 22:30 /F

Diambil dari: http://www.sysadmit.com/2016/09/windows-programar-apagado-o-reinicio-automatico.html

Manuel Gómez
sumber
0

Jika tujuannya hanya untuk reboot setelah menginstal pembaruan, maka Anda dapat menggunakan modul PSWindowsUpdate untuk menginstal pembaruan. Anda dapat mengunduhnya dari sini . Setelah diinstal, cukup buka Powershell dan ketik

Get-WuInstall -AcceptAll -AutoReboot
Charles Burge
sumber