Menjalankan program hanya ketika PC mulai menggunakan WOL

3

Apakah mungkin membuat acara atau skrip untuk diluncurkan saat komputer mulai menggunakan Wake-On-Lan?

Saya tidak ingin memulai program (secara otomatis) ketika komputer dinyalakan secara normal.

Inferno IV
sumber
1
Tidak ada acara Windows yang terpisah, jika mesin dihidupkan dengan WOL, atau dihidupkan menggunakan beberapa cara lain (tombol daya).
Ramhound

Jawaban:

3

Inilah ide saya untuk membuat pemicu seperti itu (tapi saya tidak bisa menjamin kesuksesan). Karena saya tidak memiliki lingkungan yang tepat untuk menguji ide, beberapa eksperimen diperlukan di pihak Anda.

Perintah berikut dapat digunakan untuk mengidentifikasi sumber bangun:

powercfg -lastwake

Dalam kasus Wake-On-Lan (WOL), perangkat bangun yang dilaporkan adalah milik Anda Pengontrol Ethernet.

Setelah Anda tahu bahwa peristiwa semacam itu telah terjadi dan nama persisnya bangun sumber, ini ide saya tentang cara menambahkan skrip pemicu:

  1. Buka Event Viewer dan temukan acara WOL (di mana sumber wake adalah pengontrol Ethernet)
  2. Klik kanan acara dan pilih "Lampirkan Tugas Ke Acara Ini ..."
  3. Pilih "Mulai Program" sebagai Tindakan
  4. Menambahkan Powershell.exe dan jalur menuju skrip Anda
  5. Untuk kontrol lebih lanjut, pada langkah Selesai pilih "Buka Properti ..." kotak centang
  6. Di tab Pemicu, edit pemicu acara untuk menambahkan pemicu yang lebih rinci

Beberapa referensi dan contoh untuk membantu memulai:

harrymc
sumber
Ini hanya berfungsi jika komputer sedang tidur, bukan ketika komputer benar-benar mulai (dari power ON). Tidak ada solusi yang ditemukan ...
Inferno IV
Sudahkah Anda mencari semua acara yang sumbernya adalah pengontrol Ethernet?
harrymc
Tidak ada sumber bernama pengontrol Ethernet. Saya mencari dari saat komputer mulai, acara ini ditunjukkan: "Sistem operasi dimulai pada waktu sistem 2018 - 07 - 27T06: 28: 13.494838200Z." (Kernel-General). Tetapi tidak ada acara sebelum atau setelah menunjukkan startup WoL. Satu-satunya hal yang dapat ditemukan adalah: "Jenis boot adalah 0x0.", Yang berarti: boot dingin dari shutdown penuh. Jadi sayangnya tidak ada indikasi jika komputer dimulai dari WoL ..
Inferno IV
Sumber tidak akan bernama "Ethernet controller" tetapi nama adapter jaringan. Juga, apakah Anda memiliki acara dengan sumber Kernel-Power?
harrymc
Saya memiliki acara dengan sumber Kernel-Power, namun mereka sama untuk boot WoL dan boot Normal. Tidak ada kejadian pada adaptor jaringan sekitar saat boot.
Inferno IV
2

Seperti Ramhound sudah disebutkan dalam komentar, Windows tidak memiliki cara untuk mengetahui bagaimana komputer dihidupkan. (WOL, acara Bios timer, dihidupkan secara manual, dan sebagainya.)

Satu-satunya hal yang dapat Anda peroleh dari Windows adalah apakah startup komputer terjadi setelah peristiwa restart atau shutdown yang normal atau jika komputer dinyalakan setelah kehilangan daya yang tak terduga atau shutdown paksa.
Informasi ini dapat ditemukan di log peristiwa.

Yang terbaik yang dapat Anda lakukan berlaku jika Anda tahu pasti bahwa acara WOL hanya terjadi dalam kerangka waktu yang Anda tidak akan pernah menggunakan komputer Anda sendiri. Anda dapat mengatur tugas yang dijadwalkan untuk dijalankan setiap 5 menit atau lebih selama jangka waktu yang menjalankan skrip untuk meluncurkan aplikasi.
Tugas harus dikonfigurasikan untuk TIDAK membangunkan komputer, sehingga hanya akan berjalan jika komputer dibangunkan oleh WOL. Script pada dasarnya harus memeriksa terlebih dahulu apakah aplikasi sudah berjalan (jika: keluar) dan meluncurkan aplikasi jika tidak berjalan.

Selain itu: Jika acara WOL datang secara acak, Anda masih dapat menggunakan pendekatan tugas terjadwal jika Anda mengkonfigurasi komputer untuk TIDAK menggunakan login otomatis. Jika Anda memastikan untuk LOGO keluar sebelum Anda meninggalkan komputer untuk tidur, komputer akan keluar dari tidur pada acara WOL tanpa ada yang login.
Anda dapat menguji ini dalam tugas yang dijadwalkan dan hanya menjalankan aplikasi jika tidak ada yang masuk. Ini agak rumit karena Windows tidak menyediakan pemeriksaan yang mudah untuk ini. Pendekatan saya yang biasa untuk ini adalah menggunakan tasklist | findstr explorer. Jika ada pengguna yang masuk, Anda akan mendapatkan 1 baris untuk setiap pengguna, karena masing-masing memiliki salinan explorer.exe yang berjalan. Tetapi jika tidak ada yang login, juga tidak ada explorer.exe yang berjalan.

Tonny
sumber