Bagaimana saya bisa skrip kelelawar atau cmd untuk berhenti dan memulai layanan andal dengan pengecekan kesalahan (atau beri tahu saya bahwa itu tidak berhasil karena alasan apa pun)?
288
Bagaimana saya bisa skrip kelelawar atau cmd untuk berhenti dan memulai layanan andal dengan pengecekan kesalahan (atau beri tahu saya bahwa itu tidak berhasil karena alasan apa pun)?
Jawaban:
Gunakan perintah
SC
(kontrol layanan), ini memberi Anda lebih banyak opsi daripada hanyastart
&stop
.sumber
dan
memberi tahu Anda apakah mereka berhasil atau gagal dengan cukup jelas. Sebagai contoh
Jika dijalankan dari file batch, Anda memiliki akses ke ERRORLEVEL dari kode kembali. 0 menunjukkan kesuksesan. Apa pun yang lebih tinggi mengindikasikan kegagalan.
Sebagai file bat,
error.bat
:Outputnya terlihat seperti ini:
Kembalikan Kode
Sunting 20.04.2015
Kembali kode:
Lihat di sini: http://ss64.com/nt/net_service.html
sumber
NET
tidak hanya untuk fungsi layanan terkait sementaraSC
ini hanya untuk fungsi layanan terkait.errorlevel
dikembalikan adalah 2, lihat di sini bagaimana menafsirkan hasil kesalahan .Anda dapat menggunakan perintah NET START dan kemudian memeriksa variabel lingkungan ERRORLEVEL, misalnya
Penafian: Saya sudah menulis ini dari atas kepala saya, tetapi saya pikir itu akan berhasil.
sumber
Alih-alih memeriksa kode, ini juga berfungsi
sumber
Saya telah membuat file batch pribadi saya untuk ini, milik saya sedikit berbeda tetapi merasa bebas untuk memodifikasi sesuai keinginan Anda. Saya membuat ini beberapa waktu yang lalu karena saya bosan dan ingin membuat cara sederhana agar orang dapat memasukkan akhir, mulai, berhenti, atau pengaturan ke otomatis. File BAT ini hanya meminta Anda memasukkan nama layanan dan akan melakukan sisanya untuk Anda. Saya tidak menyadari bahwa dia sedang mencari sesuatu yang menyatakan kesalahan, saya pasti salah membaca bagian itu. Meskipun biasanya ini dapat dilakukan dengan memasukkan >> output.txt pada akhir baris.
% Var% hanyalah cara bagi pengguna untuk dapat memasukkan layanan mereka sendiri ke dalam ini, alih-alih harus memodifikasi file bat setiap kali Anda ingin memulai / menghentikan layanan yang berbeda.
Jika saya salah, siapa pun dapat merasa bebas untuk memperbaiki saya dalam hal ini.
sumber
Menggunakan kode kembali dari
net start
dannet stop
sepertinya metode terbaik bagi saya. Coba lihat ini: Net Mulai kode pengembalian .sumber
Sintaks selalu membuatku .... jadi ...
Di sini secara eksplisit cara menambahkan baris ke file batch yang akan mematikan layanan jarak jauh (di komputer lain) jika Anda seorang admin di kedua mesin, jalankan .bat sebagai administrator, dan mesin berada di domain yang sama. Nama mesin mengikuti format UNC \ myserver
Dalam hal ini ... p4_1 adalah Nama Layanan dan Nama Tampilan, saat Anda melihat Properti untuk layanan di Manajer Layanan. Anda harus menggunakan Nama Layanan.
Untuk pecandu Layanan Ops Anda ... pastikan untuk menambahkan kode alasan dan komentar Anda! yaitu '4' yang sama dengan 'Direncanakan' dan komentar 'Menghentikan server untuk pemeliharaan'
sumber
CMD
sebagai pengguna / ID lain dengan melakukanrunas /user:Domain\UserName cmd
lalu masukkan kata sandi Anda. CMD akan mulai berjalan sebagai akun pengguna yang ditentukan.Kami ingin berpikir bahwa "stop net" akan menghentikan layanan. Sayangnya, kenyataan tidak hitam dan putih. Jika layanan membutuhkan waktu lama untuk berhenti, perintah akan kembali sebelum layanan berhenti. Anda tidak akan tahu, kecuali Anda memeriksa tingkat kesalahan.
Solusinya tampaknya untuk loop mencari kondisi layanan sampai dihentikan, dengan jeda setiap kali putaran loop.
Tapi sekali lagi ...
Saya melihat layanan pertama membutuhkan waktu yang lama untuk berhenti, kemudian "penghentian bersih" untuk layanan selanjutnya tampaknya tidak melakukan apa pun. Lihatlah layanan di manajer layanan, dan kondisinya masih "Memulai" - tidak ada perubahan menjadi "Berhenti". Namun saya dapat menghentikan layanan kedua ini secara manual menggunakan SCM, dan berhenti dalam 3 atau 4 detik.
sumber
atau Anda dapat memulai layanan jarak jauh dengan cmd ini:
sc \\<computer> start <service>
sumber
Saya baru saja menggunakan contoh Jonas di atas dan membuat daftar lengkap 0 hingga 24 tingkat kesalahan. Posting lain benar
net start
dannet stop
hanya menggunakanerrorlevel
0 untuk sukses dan 2 untuk kegagalan.Tetapi inilah yang berhasil bagi saya:
Ubah
stop
kestart
dan bekerja secara terbalik.sumber
Restart layanan manual ok - service.msc memiliki tombol "Restart", tetapi dalam baris perintah perintah sc dan net tidak memiliki sakelar "restart" dan jika restart dijadwalkan dalam file cmd / bat, layanan dihentikan dan mulai segera, kadang-kadang mendapat kesalahan karena layanan belum berhenti, perlu waktu untuk mematikannya.
Ini dapat menghasilkan kesalahan: sc stop sc start
Adalah ide bagus untuk menyisipkan batas waktu, saya menggunakan ping (ping setiap 1 detik): sc stop ping localhost -n 60 sc start
sumber
Berikut adalah perintah Windows 10 untuk memulai Pemulihan Sistem menggunakan batch:
Anda mungkin juga menyukai perintah-perintah itu:
Ubah nilai registri untuk secara otomatis memulai Pemulihan sistem
REG TAMBAHKAN "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f
Buat titik pemulihan sistem
Wmic.exe / Namespace: \ root \ default Path SystemRestore Call CreateRestorePoint "djibe menyelamatkan PC Anda", 100, 12
Ubah Pemulihan Sistem penggunaan disk
vssadmin mengubah ukuran shadowstorage / for = C: / on = C: / maxsize = 10%
Nikmati
sumber
SC
dapat melakukan segalanya dengan layanan ... mulai, berhenti, periksa, konfigurasikan, dan lainnya ...sumber
Kadang-kadang Anda dapat menemukan berhenti tidak berfungsi ..
SQlServer saya terkadang melakukan ini. Menggunakan baris perintah berikut akan membunuhnya. Jika Anda benar-benar membutuhkan skrip Anda untuk membunuh hal-hal yang tidak berhenti. Saya ingin ini melakukan ini sebagai pilihan terakhir
sumber
Saya menulis layanan windows di C #, loop stop / uninstall / build / install / start terlalu melelahkan. Menulis skrip mini, menyebutnya
reploy.bat
dan menjatuhkannya di direktori output Visual Studio saya (yang memiliki layanan dibangun yang dapat dieksekusi) untuk mengotomatiskan loop.Cukup atur 3 vars ini
servicename
: ini muncul di panel kontrol Layanan Windows (services.msc)slndir
: folder (bukan path lengkap) yang berisi file solution (.sln) Andabinpath
: path lengkap (bukan path folder) ke layanan yang dapat dieksekusi dari buildCATATAN: Ini perlu dijalankan dari Baris Perintah Pengembang Visual Studio agar
msbuild
perintah berfungsi.Mungkin ini membantu seseorang :)
sumber