Executar automaticamente um script ao fazer logon no Windows

27

Como posso executar automaticamente um script quando faço logon no Windows?

Eu gostaria de executar algo assim sempre que fizer login no meu computador:

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

Um bônus seria poder executar o mesmo script sempre que eu desbloquear o protetor de tela também.

Hallgrim
fonte
resposta accpeted é muito alta octanagem - usando o seu one-liner, eu oferecer algo mais humilde (mas eficaz) abaixo ... ;-)
Jeff

Respostas:

19

Você pode criar uma tarefa agendada que será executada quando o computador estiver desbloqueado:

  1. Iniciar> Ferramentas Administrativas> Agendador de Tarefas
  2. painel esquerdo: selecione Biblioteca do Agendador de Tarefas
  3. painel direito: clique em Criar tarefa ... (NOTA: esta é a única maneira de obter o gatilho correto)
  4. na caixa de diálogo Criar tarefa:
    • Guia Geral - forneça um nome para sua tarefa
    • Guia Disparadores - clique em Novo ... e selecione No desbloqueio da estação de trabalho
    • Guia Ação - clique em Novo ... e clique em Procurar ... para localizar seu script
    • Guia Condições - desmarque Iniciar a tarefa apenas se o computador estiver ligado à energia CA

Além disso, ajustei o caminho no script para ler

echo %USERNAME% logged on at %DATE% %TIME% >> %USERPROFILE%\log.txt
Jeff
fonte
22

Se você já possui um script:

Para atribuir um script de logon a um usuário ou grupo

  • Abra Gerenciamento do Computador.
  • Na árvore do console, clique em Usuários.

Onde? Ferramentas do sistema / Usuários e grupos locais / Usuários

  • Clique duas vezes no usuário ao qual você deseja atribuir um script de logon.
  • Clique na guia Perfil.
  • No campo Script de logon, digite o caminho e o nome do script de logon que você deseja atribuir a esse usuário e clique em OK.

Caso contrário, aqui está um prático "HowTo" da Microsoft

Criando scripts de logon

Você pode usar scripts de logon para atribuir tarefas que serão executadas quando um usuário fizer logon em um computador específico. Os scripts podem executar comandos do sistema operacional, definir variáveis ​​de ambiente do sistema e chamar outros scripts ou programas executáveis. A família Windows Server 2003 oferece suporte a dois ambientes de script: o processador de comandos executa arquivos que contêm comandos em linguagem em lote e o Windows Script Host (WSH) executa arquivos que contêm comandos Microsoft Visual Basic Scripting Edition (VBScript) ou Jscript. Você pode usar um editor de texto para criar scripts de logon. Algumas tarefas normalmente executadas por scripts de logon incluem:

  • Mapeando unidades de rede.
  • Instalando e configurando a impressora padrão do usuário.
  • Coletando informações do sistema do computador.
  • Atualizando assinaturas de vírus.
  • Atualizando software.
  • O seguinte script de logon de exemplo contém comandos VBScript que usam o Active Directory
  • Service Interfaces (ADSI) para executar três tarefas comuns com base na associação ao grupo de um usuário:

Ele mapeia a unidade H: para o diretório inicial do usuário chamando o método MapNetworkDrive do objeto Rede WSH em combinação com a propriedade UserName do objeto Rede WSH. Ele usa o objeto ADSI IADsADSystemInfo para obter o nome distinto do usuário atual, que por sua vez é usado para conectar-se ao objeto de usuário correspondente no Active Directory. Depois que a conexão é estabelecida, a lista de grupos dos quais o usuário é membro é recuperada usando o atributo memberOf do usuário. A lista de valores múltiplos de nomes de grupos é unida em uma única sequência usando a função Join do VBScript para facilitar a pesquisa de nomes de grupos de destino.

Se o usuário atual for membro de um dos três grupos definidos na parte superior do script, o script mapeia a unidade G: do usuário para a unidade compartilhada do grupo e define a impressora padrão do usuário como a impressora de grupo. Para criar um script de logon de exemplo

  • Abra o bloco de notas.
  • Copie e cole ou digite o seguinte:

    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
    
  • No menu Arquivo, clique em Salvar como.

  • Em Salvar em, clique no diretório que corresponde à pasta compartilhada Netlogon do controlador de domínio (geralmente SystemRoot \ SYSVOL \ Sysvol \ DomainName \ Scripts em que DomainName é o nome de domínio totalmente qualificado do domínio).
  • Em Salvar como tipo, clique em Todos os Arquivos.
  • Em Nome do arquivo, digite um nome de arquivo, seguido por .vbs e clique em Salvar. O WSH usa a extensão .vbs para identificar arquivos que contêm comandos VBScript.
Ivo Flipse
fonte
Sempre bom ver que alguém gostou da resposta:
Ivo Flipse
eu quase quero transformar este CW e tag faq :)
quack quixote
Seja meu convidado @quack ;-) FAQ para o que realmente?
Ivo Flipse
14

A maneira mais simples de pensar seria colocar isso em um arquivo .bat na sua pasta de inicialização.

Uma maneira mais complicada seria adicionar o arquivo em lotes ao registro no diretório

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Chave do registro.

Bruce McLeod
fonte
8
Se você quiser executar isso quando qualquer usuário fizer logon, será necessário colocá-lo na pasta de inicialização Todos os Usuários ( % allusersprofile% / Menu Iniciar \ Programas \ Inicialização ) ou faça uma entrada na seção Executar da seção LocalMachine: HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run )
Treb
Eu executo um .exe por esse caminho, mas existe uma maneira de ele ser executado silenciosamente? Sem abrir e manter aberto um cmd?
bzupnick
2

Um bom método alternativo é criar um arquivo em lotes com os comandos que você deseja executar neles. Em seguida, você especificará no editor de políticas na máquina que ele executa um script de login como parte do processo de login. Uma observação rápida é que essa opção está disponível apenas no XP Pro e não na versão inicial.

Tutorial do Editor de Diretiva de Grupo Aqui

Axxmasterr
fonte
2

Alguém sabe se isso pode ser usado para executar quando a tela está bloqueada / desbloqueada também?

Existe um caminho para o Windows 7 e / ou Windows Server 2008.

Use o Agendador de tarefas, crie uma nova tarefa básica, pois o gatilho usa "Quando eu efetuar logon".

Tomas Tintera
fonte
Você não pode usar uma tarefa básica, se você quiser o gatilho para ser "On desbloqueio de estação de trabalho"
Jeff
2

Não há necessidade! O Windows já possui um mecanismo para registrar isso no log de eventos. O ID do evento é 4624 (528 nos sistemas anteriores ao Vista).

Aryeh Leib Taurog
fonte