Windows скрипт при завершении работы

Well, its an easy way of doing some registry changes:
I tried this on 2008 r2 and 2016 servers.

Things need to be done:

  1. Create a text file «regedit.txt«
  2. Paste the following code in it:
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown] 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown]     

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0]  
"GPO-ID"="LocalGPO"    
"SOM-ID"="Local"    
"FileSysPath"="C:\\Windows\\System32\\GroupPolicy\\Machine"    
"DisplayName"="Local Group Policy"    
"GPOName"="Local Group Policy"    

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0\0]    
"Script"="terminate_script.bat"    
"Parameters"=""    
"ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00    

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown\0]
"GPO-ID"="LocalGPO"    
"SOM-ID"="Local"    
"FileSysPath"="C:\\Windows\\System32\\GroupPolicy\\Machine"    
"DisplayName"="Local Group Policy"    
"GPOName"="Local Group Policy"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown\0\0]    
"Script"="terminate_script.bat"    
"Parameters"=""
"IsPowershell"=dword:00000000
"ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
  1. Save this file as regedit.reg extension

  2. Run it on any command line using below command:

    regedit.exe /s regedit.reg
    

I need to run batch scripts at shutdown of Windows 10 home edition, both on manual restarts and on automatic restarts due to Windows automatic updates. This needs to work while no users are logged in too.
So far I’ve tried:

  1. Scheduled Task at eventid 1047 (discarded, won’t wait till my script is over).
  2. Manually adding Group Policy shutdown scripts to registry and to C:\WINDOWS\SYSTEM32\GroupPolicy (discarded, won’t run since it looks like the functionality is disabled by restraints imposed by the Windows edition.)
  3. Third party software. Weird enough, I couldn’t find any free tool that would run as a service and allow me to add .bat files to be run at system (or service) shutdown.
  4. I tried AutoHotkey + NSSM [The Non-Sucking Service Manager] as a custom service, but AutoHotkey’s events wouldn’t trigger every time.

I’m quite disenchanted with this limitation. 🙁
Any ideas?

Edit1: Take into account Windows automatic updates.
Edit2: This needs to work while no users are logged in too.
Edit4: I’m waiting for the next Windows automatic restart due to a Windows update to see if running shutdown -a at the beginning of the batch file and then shutdown -s at the end within a scheduled task at shutdown event approach works.
Edit5: Bummer, it didn’t work. The scheduled task did not start: Error: «Shutdown in progress». I guess my only hope is a third-party tool.

Hennes's user avatar

Hennes

64.8k7 gold badges111 silver badges168 bronze badges

asked Apr 21, 2017 at 20:51

B. Gray's user avatar

8

I’ve done this with AutoHotkey before. This script is tested and working.

I made a basic batch file that will create a «test file» on the desktop.
Just run the AHK file and leave it running. When the script detects a shutdown, it’ll run the batch file.

Make sure you set the path to your text file at the top of the script.

AutoHotkey Script:

;==============================
;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
}

Batch file I used for testing:

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

If you wanted to, you could always execute your batch file commands directly through AHK.

answered Apr 29, 2017 at 4:06

GroggyOtter's user avatar

3

Update: If it is something that needs to be done before the next user logs on, putting it in the machine startup script might fulfill your need. If it is something that has to be done before power off, shutdown script is your answer.

If Home edition does not allow you to modify the local policy to make these scripts work, then that is a limitation of the home edition and you may need to upgrade. However, TechNet does not narrow their explanation of how to set up a shutdown script beyond Windows #.

Also, the machine shutdown script will run with permissions of the computer. The user log off script will run with the logged on user’s permissions.

Use a batch script to shut down? Just use the shutdown command («shutdown -t 0») at the end of your shutdown script. Put a shortcut to the script on your desktop, use a power button icon. (Removed answer based on single user shutdown by script instead of start menu shutdown option).

answered Apr 24, 2017 at 14:26

Jeter-work's user avatar

Jeter-workJeter-work

5232 silver badges9 bronze badges

2

I’ve finally found out the solution after several months!

  • Open the Group Policy Management Console.
  • Then go to User Configuration\Policies\Windows Settings\Scripts (Logoff).
  • Now add your app or script.

Normally at this point is where it never worked for me.

  • The workaround is to go to User Configuration\Policies\Administrative Templates\System\Scripts.

  • And enable Display instructions in shutdown scripts as they run.

Run GPUPDATE /FORCE and enjoy!
For shutdown you do the same steps but under Computer Configuration.

Group policies

Destroy666's user avatar

Destroy666

5,6248 gold badges16 silver badges36 bronze badges

answered Jun 28 at 23:40

FLAMIN's user avatar

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

Выполнение сценариев при выходе из системы

Время на прочтение
1 мин

Количество просмотров 2.8K

Применительно к Windows XP.

Можно, конечно, как и советуют на разных форумах, создать файл quit.cmd, в котором написать все необходимые сценарии, поставить в конце выполнение shutdown и запускать его каждый раз чтобы выключить ПК. Можно и так, но мне более элегантным видится вариант с групповыми политиками:
Пуск \
   Выполнить \
      gpedit.msc

Запустилась консоль управления групповой политикой. В ней нужен пункт:

Конфигурация пользователя \
   Конфигурация Windows \
      Сценарии (вход/выход из системы)

И здесь, в пункте «Выход из системы» добавлять желаемые сценарии.

За

Не нужно запоминать, что для выхода необходимо запускать файл, он запускается самостоятельно при выходе. Элегантно, красиво, ненавязчиво.

Против

Метод с ручным запуском скрипта позволяет непривилегированным пользователям повесить предварительную отработку действий хотя бы при простом логоффе. Групповые политики же для непривилегированных недоступны полностью.

Допольнительно

  • Выполнение командного файла перед входом в систему
Категория:
Технические советы
– Автор:
Игорь (Администратор)
  • Редактор локальной групповой политики Windows
  • Запуск сценария или программы при завершении работы Windows
  • Запуск сценария или программы при выходе пользователя из системы Windows

Вы когда-нибудь хотели запустить программу или сценарий при выключении компьютера или при выходе пользователя из системы? В конце дня вызвать программу для очистки временных файлов или запустить резервное копирование регулярно используемых файлов. Несмотря на то, что выполнить автоматический запуск программы при старте Windows достаточно просто, настройка запуска программ при выключении не столь очевидна. Немногие пользователи об этом знают, но во многих версиях Windows есть встроенный инструмент, который позволяет сделать это достаточно просто. 

Редактор локальной групповой политики Windows

Хитрость заключается в том, чтобы использовать системный инструмент Windows под названием «Редактор локальной групповой политики» (GPE). К сожалению, Microsoft исключила GPE из всех Home версий, так что этот метод применим только к таким версиям, как Professional и Enterprise. Метод подходит для Windows XP и выше. Возможно вы уже знакомы с GPE, так как данный инструмент представляет множество удобных функций. Тем не менее, даже в таком случае, о возможности запуска сценариев и программ знают немногие.

Примечание: Как альтернативу, вы всегда можете использовать vbs-сценарии или пакетные файлы, вызов которых будет заканчивается запуском консольной команды выключения компьютера. 

GPE является одним из системных модулей Windows, известных под названием консоль управления Microsoft или оснастка. Хоть, некоторые из них можно запустить из панели управления Windows, найти их в списках программ нельзя. Учтите, что для запуска оснасток потребуются права администратора.

Запуск сценария или программы при завершении работы Windows

gpe - Как настроить автоматический запуск программ или скриптов при выключении Windows?

  1. Чтобы вызвать GPE, откройте окно «Выполнить», при помощи комбинации клавиш «WinKey (Клавиша Windows) + R». Или выполните следующий пункт в строке поиска меню Пуск.
  2. В поле ввода введите «gpedit.msc» (без кавычек) и нажмите Enter
  3. В левой панели диалогового окна GPE последовательно раскройте вкладки «Конфигурация компьютера» и «Конфигурация Windows», а затем выберите пункт «Сценарии (запуск/завершение)», как это показано на рисунке выше
  4. В правой панели окна дважды щелкните на пункте «Завершение работы»
  5. В открывшемся диалоговом окне нажмите кнопку «Добавить»
  6. Откроется окно, показанное ниже.
    добавить сценарий - Как настроить автоматический запуск программ или скриптов при выключении Windows?
  7. В поле «Имя сценария» укажите путь до исполняемого файла, который хотите запустить при выключении Windows. Или выберите файл из формы выбора, которая появится по нажатию на кнопку «Обзор…»
  8. В поле «Параметры сценария» укажите необходимые параметры, если это необходимо
  9. Нажмите «OK».

Запуск сценария или программы при выходе пользователя из системы Windows

Если вам необходимо запускать программу или сценарий только при выходе пользователя из системы, то в оснастке GPE необходимо использовать другой пункт. Сама инструкция остается точно такой же. Единственно, вам необходимо на шаге 3 раскрыть вместо вкладки «Конфигурация компьютера» вкладку «Конфигурация пользователя». И на шаге 4 дважды щелкнуть на пункте «Выход из системы» вместо «Завершение работы»

Примечание: Данная статья в большей степени предназначена для опытных пользователей. Дополнительные сведения об использовании и планировании через GPE можно найти на сайте Microsoft по этой ссылке.

Теперь вы знаете как запустить исполняемый файл при выключении Windows и при выходе пользователя из системы.

☕ Понравился обзор? Поделитесь с друзьями!

  • Как узнать какие программы подключены к Интернету (CurrPorts)?

    Как узнать какие программы подключены к Интернету (CurrPorts)?
    Технические советы

  • Как узнать какие процессы Windows используют файл?

    Как узнать какие процессы Windows используют файл?
    Технические советы

  • Как отключить историю поисковых запросов для аккаунтов Google?

    Как отключить историю поисковых запросов для аккаунтов Google?
    Технические советы

  • Программа Hwinfo характеристики компьютера и проверка состояния устройств в Windows

    Программа Hwinfo характеристики компьютера и проверка состояния устройств в Windows
    Технические советы

  • Как закрепить на панели задач в Windows 7 что угодно?

    Как закрепить на панели задач в Windows 7 что угодно?
    Технические советы

  • Как отменить подписку или удалить аккаунты из онлайн-сервисов?

    Как отменить подписку или удалить аккаунты из онлайн-сервисов?
    Технические советы

Добавить комментарий / отзыв

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
////////////////////////////////////////////////////////////////////////////////
// Remendir.cpp
//
// Made by osnu
 
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
 
TCHAR GWndname[]=TEXT("WndRem");
TCHAR GAppname[]=TEXT("Remendir");
 
TCHAR GFilename[32];    /* Текстовой файл, должен быть в каталоге программы
                        * При запуске не будет "Напоминание будет осуществленно..."
                        * если имя "zRemendir.txt", если "wRemendir.txt" будет:
                        * "Напоминание будет осуществленно..." */
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT retval=0;
    static UINT_PTR nTimer;
    switch(uMsg)
    {
        case WM_TIMER:
        {
            KillTimer(hWnd, nTimer);
            HANDLE hFile=CreateFile(GFilename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
            if(INVALID_HANDLE_VALUE!=hFile)
            {
                DWORD dwFileSize=GetFileSize(hFile, NULL);
                if( (0!=dwFileSize) && (2048>=dwFileSize) )
                {
                    char* InACh=(char*)GlobalAlloc(GMEM_FIXED,dwFileSize+1);
                    if(InACh)
                    {
                        DWORD dwBytesRead;
                        ReadFile(hFile,(LPVOID)InACh,dwFileSize,&dwBytesRead,NULL);
                        if(dwBytesRead)
                        {
                            TCHAR* UCh = new TCHAR[dwFileSize+1];
                            MultiByteToWideChar(CP_ACP,0,InACh,-1,UCh,dwFileSize);
                            UCh[dwFileSize]=0;
                            MessageBox(hWnd,UCh,GAppname,MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);
                            delete [] UCh;
                            GlobalFree(InACh);
                            CloseHandle(hFile);
                            SendMessage(hWnd,WM_DESTROY,0,0);
                            break;
                        }
                        GlobalFree(InACh);
                    }
                }
                CloseHandle(hFile);
            }
        }
        break;
 
        case WM_QUERYENDSESSION:
        ShowWindow(hWnd,SW_SHOW);
        nTimer=SetTimer(hWnd,1,50,NULL);
        if(!nTimer) return 1;
        else return 0;
 
        case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
        default: retval=DefWindowProc(hWnd,uMsg,wParam,lParam);
    } return retval;
}
 
BOOL CheckFileExists(const TCHAR* Filename)
{
    WIN32_FIND_DATA FindFile;
    HANDLE handle=FindFirstFile(Filename, &FindFile);
    if(INVALID_HANDLE_VALUE==handle)
        return FALSE;
    FindClose(handle);
    return TRUE;
}
 
//
// Entry point
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
    HWND hWnd=FindWindow(GWndname,NULL);
    if(hWnd)
    {
        if(IDYES==MessageBox(hWnd,TEXT("Программа уже работает...\nЗавершить программу?"),GAppname,MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_SYSTEMMODAL))
            SendMessage(hWnd,WM_CLOSE,0,0);
        return 0;
    }
 
    lstrcpy(GFilename,TEXT("zRemendir.txt"));
    if(!CheckFileExists(GFilename))
    {
        lstrcpy(GFilename,TEXT("wRemendir.txt"));
        if(!CheckFileExists(GFilename))
        {
            MessageBox(hWnd,TEXT("Нет файла напоминаний"),GAppname,MB_OK|MB_ICONWARNING|MB_SETFOREGROUND|MB_SYSTEMMODAL);
            return 0;
        }
    }
    if( 'w'==GFilename[0] )
        MessageBox(hWnd,TEXT("Напоминание будет осуществленно..."),GAppname,MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);
 
    WNDCLASSEX wcex={sizeof(WNDCLASSEX),CS_VREDRAW|CS_HREDRAW,WndProc,0,0,hInstance,
        LoadIcon(NULL,IDI_APPLICATION),LoadCursor(NULL,IDC_ARROW),0,NULL,GWndname,NULL,};
 
    ATOM Atom=RegisterClassEx(&wcex);
    if(Atom) {
        hWnd=CreateWindowEx(0,MAKEINTATOM(Atom),GAppname,
            0,0,0,0,0,HWND_DESKTOP,NULL,hInstance,NULL);
        if(hWnd) {
            MSG msg;
            while(GetMessage(&msg,NULL,0,0)>0) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
    return 0;
}
 
////////////////////////////////////////////////////////////////////////////////
// <<eof>> Remendir.cpp
////////////////////////////////////////////////////////////////////////////////

  • Windows сколько стоит подлинная версия windows
  • Windows скины для рабочего стола
  • Windows скачать бесплатно для windows 7 максимальная на русском языке
  • Windows системная переменная program files
  • Windows системная ошибка что значит