Ejecutar automáticamente un script cuando inicio sesión en Windows

27

¿Cómo puedo ejecutar automáticamente un script cuando inicio sesión en Windows?

Me gustaría ejecutar algo como esto cada vez que inicie sesión en mi computadora:

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

Una ventaja sería poder ejecutar el mismo script siempre que desbloquee el protector de pantalla también.

Hallgrim
fuente
la respuesta aceptada es de muy alto octanaje: usando tu one-liner, ofrezco algo más humilde (pero efectivo) a continuación ... ;-)
Jeff

Respuestas:

19

Puede crear una tarea programada que se ejecutará cuando su computadora esté desbloqueada:

  1. Inicio> Herramientas administrativas> Programador de tareas
  2. panel izquierdo: seleccione Biblioteca del Programador de tareas
  3. panel derecho: haga clic en Crear tarea ... (NOTA: esta es la única forma de obtener el activador correcto)
  4. en el cuadro de diálogo Crear tarea:
    • Pestaña general: proporcione un nombre para su tarea
    • Ficha Disparadores: haga clic en Nuevo ... y seleccione Al desbloquear la estación de trabajo
    • Pestaña Acción: haga clic en Nuevo ... y haga clic en Examinar ... para localizar su secuencia de comandos
    • Pestaña Condiciones: desmarque Iniciar la tarea solo si la computadora está alimentada con CA

Además, modifiqué la ruta en el script para leer

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

Si ya tienes un script:

Para asignar una secuencia de comandos de inicio de sesión a un usuario o grupo

  • Gestión informática abierta.
  • En el árbol de la consola, haga clic en Usuarios.

¿Dónde? Herramientas del sistema / Usuarios y grupos locales / Usuarios

  • Haga doble clic en el usuario al que desea asignar una secuencia de comandos de inicio de sesión.
  • Haz clic en la pestaña Perfil.
  • En el campo Script de inicio de sesión, ingrese la ruta y el nombre del script de inicio de sesión que desea asignar a ese usuario y luego haga clic en Aceptar.

De lo contrario, aquí hay un práctico "Cómo" de Microsoft

Crear secuencias de comandos de inicio de sesión

Puede usar secuencias de comandos de inicio de sesión para asignar tareas que se realizarán cuando un usuario inicie sesión en una computadora en particular. Los scripts pueden ejecutar comandos del sistema operativo, establecer variables de entorno del sistema y llamar a otros scripts o programas ejecutables. La familia Windows Server 2003 admite dos entornos de secuencias de comandos: el procesador de comandos ejecuta archivos que contienen comandos de lenguaje por lotes y Windows Script Host (WSH) ejecuta archivos que contienen Microsoft Visual Basic Scripting Edition (VBScript) o comandos Jscript. Puede usar un editor de texto para crear secuencias de comandos de inicio de sesión. Algunas tareas comúnmente realizadas por los scripts de inicio de sesión incluyen:

  • Mapeo de unidades de red.
  • Instalación y configuración de la impresora predeterminada de un usuario.
  • Recopilación de información del sistema informático.
  • Actualización de firmas de virus.
  • Actualización de software.
  • El siguiente script de inicio de sesión de ejemplo contiene comandos VBScript que usan Active Directory
  • Interfaces de servicio (ADSI) para realizar tres tareas comunes basadas en la pertenencia a grupos de un usuario:

Asigna la unidad H: al directorio de inicio del usuario llamando al método MapNetworkDrive del objeto de red WSH en combinación con la propiedad UserName del objeto de red WSH. Utiliza el objeto ADSI IADsADSystemInfo para obtener el nombre distinguido del usuario actual, que a su vez se utiliza para conectarse al objeto de usuario correspondiente en Active Directory. Una vez que se establece la conexión, la lista de grupos a los que pertenece el usuario se recupera utilizando el atributo memberOf del usuario. La lista multivalor de nombres de grupos se une en una sola cadena mediante la función Unir de VBScript para facilitar la búsqueda de nombres de grupos objetivo.

Si el usuario actual es miembro de uno de los tres grupos definidos en la parte superior de la secuencia de comandos, la secuencia de comandos asigna la unidad G: del usuario a la unidad compartida del grupo y establece la impresora predeterminada del usuario para que sea la impresora de grupo. Para crear un script de inicio de sesión de ejemplo

  • Abra el Bloc de notas.
  • Copie y pegue, o escriba, lo siguiente:

    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
    
  • En el menú Archivo, haga clic en Guardar como.

  • En Guardar en, haga clic en el directorio que corresponde a la carpeta compartida Netlogon del controlador de dominio (generalmente SystemRoot \ SYSVOL \ Sysvol \ DomainName \ Scripts donde DomainName es el nombre de dominio completo del dominio).
  • En Guardar como tipo, haga clic en Todos los archivos.
  • En Nombre de archivo, escriba un nombre de archivo, seguido de .vbs y luego haga clic en Guardar. WSH usa la extensión .vbs para identificar archivos que contienen comandos VBScript.
Ivo Flipse
fuente
Siempre es agradable ver que a alguien le gustó la respuesta :-D
Ivo Flipse el
casi quiero convertir este CW y etiquetarlo como faq :)
quack quixote
Sea mi invitado @quack ;-) ¿Preguntas frecuentes para qué?
Ivo Flipse el
14

La forma más simple en que puedo pensar sería poner esto en un archivo .bat en su carpeta de inicio.

Una forma más complicada sería agregar el archivo por lotes al registro en el

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

clave de registro.

Bruce McLeod
fuente
8
Si desea ejecutar esto cuando cualquier usuario inicia sesión, debe colocarlo en la carpeta de inicio Todos los usuarios ( % allusersprofile% / Start Menu \ Programs \ Startup ), o hacer una entrada en la sección Ejecutar de la sección LocalMachine: HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run )
Treb
Ejecuto un .exe de esta manera, pero ¿hay alguna manera de que se ejecute en silencio? Sin abrir y mantener abierto un cmd?
bzupnick
2

Un buen método alternativo es crear un archivo por lotes con los comandos que desea ejecutar en ellos. A continuación, especificará en el editor de políticas de la máquina que ejecuta un script de inicio de sesión como parte del proceso de inicio de sesión. Una nota rápida es que esta opción solo está disponible en XP Pro y no en la versión doméstica.

Tutorial del editor de directivas de grupo aquí

Axxmasterr
fuente
2

¿Alguien sabe si esto también se puede ejecutar cuando la pantalla está bloqueada / desbloqueada?

Hay una manera para Windows 7 y / o Windows Server 2008.

Use el Programador de tareas, cree una nueva tarea básica, ya que Trigger usa "Cuando inicio sesión".

Tomás Tintera
fuente
No puede utilizar una tarea básica si desea que el desencadenante esté "Desbloqueo de estación de trabajo"
Jeff