Automatycznie uruchom skrypt po zalogowaniu się do systemu Windows

27

Jak mogę automatycznie uruchomić skrypt po zalogowaniu się do systemu Windows?

Chciałbym uruchomić coś takiego przy każdym logowaniu do komputera:

echo %USERNAME% logged on at %DATE% %TIME% >> log.txt

Dodatkową korzyścią będzie możliwość uruchomienia tego samego skryptu za każdym razem, gdy odblokuję wygaszacz ekranu.

Hallgrim
źródło
potwierdzona odpowiedź jest bardzo wysoka liczba oktanowa - używając twojego jednowierszowego, poniżej oferuję coś bardziej skromnego (ale skutecznego) ;-)
Jeff

Odpowiedzi:

19

Możesz utworzyć zaplanowane zadanie, które będzie uruchamiane, gdy komputer zostanie odblokowany:

  1. Start> Narzędzia administracyjne> Harmonogram zadań
  2. lewy panel: wybierz Biblioteka harmonogramu zadań
  3. prawy panel: kliknij Utwórz zadanie ... (UWAGA: jest to jedyny sposób na uzyskanie prawidłowego wyzwalacza)
  4. w oknie dialogowym Utwórz zadanie:
    • Karta Ogólne - podaj nazwę swojego zadania
    • Karta Wyzwalacze - kliknij Nowy ... i wybierz Przy odblokowaniu stacji roboczej
    • Karta Działanie - kliknij Nowy ... i kliknij Przeglądaj ..., aby zlokalizować skrypt
    • Karta Warunki - odznacz Uruchom zadanie tylko wtedy, gdy komputer jest zasilany prądem przemiennym

Również poprawiłem ścieżkę w skrypcie, aby czytać

echo %USERNAME% logged on at %DATE% %TIME% >> %USERPROFILE%\log.txt
Jeff
źródło
22

Jeśli masz już skrypt:

Aby przypisać skrypt logowania do użytkownika lub grupy

  • Otwórz Zarządzanie komputerem.
  • W drzewie konsoli kliknij Użytkownicy.

Gdzie? Narzędzia systemowe / Użytkownicy lokalni i grupy / Użytkownicy

  • Kliknij dwukrotnie użytkownika, do którego chcesz przypisać skrypt logowania.
  • Kliknij kartę Profil.
  • W polu Skrypt logowania wprowadź ścieżkę i nazwę skryptu logowania, który chcesz przypisać temu użytkownikowi, a następnie kliknij przycisk OK.

Tutaj jest przydatny „HowTo” firmy Microsoft

Tworzenie skryptów logowania

Za pomocą skryptów logowania można przypisywać zadania, które będą wykonywane, gdy użytkownik zaloguje się na określonym komputerze. Skrypty mogą wykonywać polecenia systemu operacyjnego, ustawiać systemowe zmienne środowiskowe i wywoływać inne skrypty lub programy wykonywalne. Rodzina systemów Windows Server 2003 obsługuje dwa środowiska skryptowe: procesor poleceń uruchamia pliki zawierające polecenia języka wsadowego, a system Windows Script Host (WSH) uruchamia pliki zawierające polecenia Microsoft Visual Basic Scripting Edition (VBScript) lub Jscript. Możesz użyć edytora tekstu do tworzenia skryptów logowania. Niektóre zadania często wykonywane przez skrypty logowania obejmują:

  • Mapowanie dysków sieciowych.
  • Instalowanie i konfigurowanie domyślnej drukarki użytkownika.
  • Zbieranie informacji o systemie komputerowym.
  • Aktualizowanie sygnatur wirusów.
  • Aktualizacja oprogramowania.
  • Poniższy przykładowy skrypt logowania zawiera polecenia VBScript korzystające z usługi Active Directory
  • Interfejsy serwisowe (ADSI) do wykonywania trzech typowych zadań w oparciu o członkostwo w grupie użytkownika:

Odwzorowuje dysk H: na katalog domowy użytkownika, wywołując metodę MapNetworkDrive obiektu WSH Network w połączeniu z właściwością UserName obiektu WSH Network. Wykorzystuje obiekt ADSI IADsADSystemInfo do uzyskania nazwy wyróżniającej bieżącego użytkownika, która z kolei służy do łączenia się z odpowiednim obiektem użytkownika w usłudze Active Directory. Po ustanowieniu połączenia lista grup, których członkiem jest użytkownik, jest pobierana za pomocą atrybutu memberOf użytkownika. Wielowartościowa lista nazw grup jest łączona w pojedynczy ciąg znaków za pomocą funkcji Dołącz VBScript, aby ułatwić wyszukiwanie nazw grup docelowych.

Jeśli bieżący użytkownik jest członkiem jednej z trzech grup zdefiniowanych u góry skryptu, wówczas skrypt mapuje dysk G: użytkownika na udostępniony dysk grupy i ustawia drukarkę domyślną użytkownika jako drukarkę grupową. Aby utworzyć przykładowy skrypt logowania

  • Otwórz Notatnik.
  • Skopiuj i wklej lub wpisz następujące dane:

    Const ENGINEERING_GROUP     = "cn=engineering"
    Const FINANCE_GROUP         = "cn=finance"
    Const HUMAN_RESOURCES_GROUP = "cn=human resources"
    
    Set wshNetwork = CreateObject("WScript.Network")
    wshNetwork.MapNetworkDrive "h:",
    "\\FileServer\Users\" & wshNetwork.UserName
    
    Set ADSysInfo = CreateObject("ADSystemInfo")
    Set CurrentUser = GetObject("LDAP://" &
    ADSysInfo.UserName)
    strGroups = LCase(Join(CurrentUser.MemberOf))
    
    If InStr(strGroups, ENGINEERING_GROUP) Then
    
        wshNetwork.MapNetworkDrive "g:",
        "\\FileServer\Engineering\"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\EngLaser"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\Plotter"
        wshNetWork.SetDefaultPrinter
        "\\PrintServer\EngLaser"
    
    ElseIf InStr(strGroups, FINANCE_GROUP) Then
    
        wshNetwork.MapNetworkDrive "g:",
        "\\FileServer\Finance\"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\FinLaser"
        wshNetWork.SetDefaultPrinter
        "\\PrintServer\FinLaser"
    
    ElseIf InStr(strGroups, HUMAN_RESOURCES_GROUP) Then
    
        wshNetwork.MapNetworkDrive "g:",
        "\\FileServer\Human Resources\"
        wshNetwork.AddWindowsPrinterConnection
        "\\PrintServer\HrLaser"
        wshNetWork.SetDefaultPrinter
        "\\PrintServer\HrLaser"
    
    End If
    
  • W menu Plik kliknij polecenie Zapisz jako.

  • W polu Zapisz w kliknij katalog odpowiadający folderowi współdzielonemu Netlogon kontrolera domeny (zwykle SystemRoot \ SYSVOL \ Sysvol \ DomainName \ Scripts, gdzie DomainName jest w pełni kwalifikowaną nazwą domeny).
  • W polu Zapisz jako typ kliknij Wszystkie pliki.
  • W polu Nazwa pliku wpisz nazwę pliku, a następnie .vbs, a następnie kliknij przycisk Zapisz. WSH używa rozszerzenia .vbs do identyfikowania plików zawierających polecenia VBScript.
Ivo Flipse
źródło
Zawsze miło widzieć, że ktoś polubił odpowiedź :-D
Ivo Flipse
prawie chcę włączyć to CW i oznaczyć go jako najczęściej zadawane pytania :)
quack quixote
Bądź moim gościem @ quack ;-) FAQ na co właściwie?
Ivo Flipse
14

Najprostszym sposobem, jaki mogę wymyślić, byłoby umieszczenie tego w pliku .bat w folderze startowym.

Bardziej skomplikowanym sposobem byłoby dodanie pliku wsadowego do rejestru w

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

klucz rejestru.

Bruce McLeod
źródło
8
Jeśli chcesz uruchomić to po zalogowaniu dowolnego użytkownika, musisz umieścić go w folderze startowym Wszyscy użytkownicy ( % allusersprofile% / Start Menu \ Programs \ Startup ) lub wprowadzić pozycję w sekcji Uruchom w rejestrze LocalMachine: HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run )
Treb
W ten sposób uruchamiam .exe, ale czy istnieje sposób, aby działał on cicho? Bez otwierania i utrzymywania otwartego cmd?
bzupnick,
2

Dobrą alternatywną metodą jest utworzenie pliku wsadowego z poleceniami, które chcesz w nim uruchomić. Następnie w edytorze zasad na komputerze określisz, że ma on uruchamiać skrypt logowania w ramach procesu logowania. Szybka uwaga: ta opcja jest dostępna tylko w XP Pro, a nie w wersji domowej.

Samouczek edytora zasad grupy tutaj

Axxmasterr
źródło
2

Czy ktoś wie, czy można go również uruchomić, gdy ekran jest zablokowany / odblokowany?

Istnieje sposób na Windows 7 i / lub Windows Server 2008.

Użyj Harmonogramu zadań, utwórz nowe podstawowe zadanie, ponieważ Trigger używa „Po zalogowaniu”.

Tomas Tintera
źródło
Nie możesz użyć podstawowego zadania, jeśli chcesz, aby wyzwalaczem było „Na odblokowaniu stacji roboczej”
Jeff
2

Nie ma potrzeby! System Windows ma już mechanizm rejestrowania tego w dzienniku zdarzeń. Identyfikator zdarzenia to 4624 (528 w systemach starszych niż Vista).

Aryeh Leib Taurog
źródło