Jak uruchomić skrypt wsadowy przy zamykaniu w domowej wersji systemu Windows 10?

5

Muszę uruchamiać skrypty wsadowe przy zamykaniu domowej wersji systemu Windows 10, zarówno przy ręcznym ponownym uruchamianiu, jak i przy automatycznym ponownym uruchamianiu z powodu automatycznych aktualizacji systemu Windows. Musi to działać, gdy żaden użytkownik nie jest zalogowany. Do tej pory próbowałem:

  1. Zaplanowane zadanie na eventid 1047 (odrzucone, nie będzie czekać, aż mój skrypt się skończy).
  2. Ręczne dodawanie skryptów zamykania zasad grupy do rejestru i do C: WINDOWS SYSTEM32 GroupPolicy (odrzucona, nie będzie działać, ponieważ wygląda na to, że funkcja jest wyłączona przez ograniczenia narzucone przez edycję Windows).
  3. Oprogramowanie osób trzecich. Dziwne, ale nie mogłem znaleźć żadnego darmowego narzędzia, które działałoby jako usługa i pozwalało mi dodawać pliki .bat do uruchomienia przy zamykaniu systemu (lub usługi).
  4. Próbowałem AutoHotkey + NSSM [Non-Sucking Service Manager] jako usługę niestandardową, ale zdarzenia AutoHotkey nie uruchamiały się za każdym razem.

Jestem rozczarowany tym ograniczeniem.
Jakieś pomysły?

Edytuj1: Uwzględnij automatyczne aktualizacje systemu Windows.
Edit2: To musi działać, gdy nie są zalogowani również użytkownicy.
Edit4: Czekam na następny automatyczny restart systemu Windows z powodu aktualizacji systemu Windows, aby sprawdzić, czy działa shutdown -a na początku pliku wsadowego, a następnie shutdown -s na koniec w ramach zaplanowanego zadania przy zamykaniu systemu działa podejście do zdarzenia.
Edit5: Bummer, to nie działa. Zaplanowane zadanie nie zostało uruchomione: Błąd: „Trwa zamykanie”. Myślę, że moja jedyna nadzieja to narzędzie innej firmy.

B. Gray
źródło
6
Możesz dodać zamknięcie -a na początku pliku wsadowego, a następnie zamknąć-na końcu. Spowoduje to przerwanie zamykania i pozwolenie procesowi na wykonanie, a następnie wznowienie zamykania po zakończeniu.
Neelix
@Neelix, jak dotąd proponowane rozwiązanie działa z wyłączeniami uruchomionymi przez shutdown -s ale nie przez menu Start Przycisk zasilania. Będę musiał poczekać do następnego automatycznego uruchomienia aktualizacji systemu Windows, aby sprawdzić, czy będzie działać dla mnie. Prześlę wyniki z powrotem. Dzięki.
B. Gray
Jakie rzeczy próbujesz zrobić? Pomogłoby to poznać kontekst, w którym próbujesz coś wykonać. Czy próbowałeś także edytora zasad grupy LOCAL i umieściłeś skrypt testowy, który kopiuje plik, aby potwierdzić, że poprawnie implementujesz skrypt?
Xalorous
Muszę zapisać wartość w pliku .db po zamknięciu systemu. Jest to program monitorujący, który potrzebuje tej konkretnej informacji do dokładnego rejestrowania. gpedit.msc nie jest dostępny w domowej wersji systemu Windows. Wydaje się, że cała funkcjonalność została usunięta z edycji.
B. Gray
Biorąc pod uwagę, że brzmi to tak, jakbyś próbował coś zrobić przy pracy z wersją systemu Windows przeznaczoną do użytku domowego, wtedy (zakładając obecność gpedit.msc rozwiąże Twój problem) Czy możesz przekonać swoją firmę do zapłacenia 99 USD za uaktualnienie z Home na Pro?
Richard

Odpowiedzi:

2

Zrobiłem to wcześniej za pomocą AutoHotkey. Ten skrypt jest testowany i działa.

Zrobiłem podstawowy plik wsadowy, który utworzy „plik testowy” na pulpicie. Po prostu uruchom plik AHK i pozostaw go uruchomiony. Gdy skrypt wykryje zamknięcie, uruchomi plik wsadowy.

Upewnij się, że ustawiłeś ścieżkę do pliku tekstowego na górze skryptu.

Skrypt AutoHotkey:

;==============================
;Set the path to your batch file.
path    := "C:\batch.bat"
;==============================

; Run script as admin. This will allow your batch file to be ran with admin priv.
if not A_IsAdmin
{
   Run *RunAs "%A_ScriptFullPath%"  ; Requires v1.0.92.01+
   ExitApp
}

; Only allow one instance of the script to run.
#SingleInstance, Force

; If you don't want an icon to show in the tray,
; remove the semicolon from the line below.
;#NoTrayIcon

; When script detects WM_QUERYENDSESSION (a shutdown), run OnShutDown function.
OnMessage(0x11, "OnShutDown")
return

OnShutDown(){
    ; Run the batch file.
    Run, % path
    ExitApp
}

Plik wsadowy, którego użyłem do testowania:

echo Write file before shutdown > %USERPROFILE%\Desktop\ShutdownTest.txt

Jeśli chcesz, możesz zawsze wykonywać polecenia wsadowe bezpośrednio przez AHK.

GroggyOtter
źródło
Potrzebuję tego do działania, gdy żaden użytkownik nie jest zalogowany, z powodu automatycznych aktualizacji Windows. Więc to nie zajmie się taką sytuacją.
B. Gray
Jeśli żaden użytkownik nie jest zalogowany, nie można uruchomić skryptu AHK. Jeśli tego potrzebujesz, będziesz musiał znaleźć inne rozwiązanie poza tym. Przepraszam.
GroggyOtter
OnMessage nie jest tutaj zdefiniowane?
Zeeshan
0

Aktualizacja: Jeśli jest to coś, co należy zrobić przed zalogowaniem się następnego użytkownika, umieszczenie go w skrypcie uruchamiania komputera może zaspokoić twoją potrzebę. Jeśli jest to coś, co trzeba zrobić przed wyłączeniem zasilania, odpowiedz na to pytanie.

Jeśli Home edition nie pozwala na modyfikację lokalnych zasad, aby te skrypty działały, jest to ograniczenie wersji domowej i może być konieczne uaktualnienie. Jednak, TechNet nie zawęża wyjaśnienia, jak skonfigurować skrypt wyłączający poza Windows #.

Ponadto skrypt zamykania komputera będzie działać z uprawnieniami komputera. Skrypt wylogowania użytkownika zostanie uruchomiony z uprawnieniami zalogowanego użytkownika.

Użyj skryptu wsadowego, aby zamknąć? Po prostu użyj polecenia shutdown („shutdown -t 0”) na końcu skryptu zamknięcia. Umieść skrót do skryptu na pulpicie, użyj ikony przycisku zasilania. (Usunięto odpowiedź na podstawie wyłączenia pojedynczego użytkownika za pomocą skryptu zamiast opcji wyłączania menu startowego).

Xalorous
źródło
Muszę także uruchamiać skrypty przy automatycznych ponownych uruchomieniach (z powodu automatycznych aktualizacji systemu Windows). Właśnie wyjaśniłem to na pytanie, przepraszam.
B. Gray
Z tego, co mogłem zebrać, cała funkcjonalność została usunięta z domowej wersji systemu Windows.
B. Gray