Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Sistemas Operativos: Realizar script para inicio de sesión de usuarios de Terminal Server
Windows


Os indicamos cómo realizar un script / aplicación de consola en Delphi que se ejecutará cada vez que un usuario inicie sesión en nuestros servidores de Terminal Server. Realizará determinadas tareas de mantenimiento (modificación fichero ini, copiar ficheros, identificación servidor y cliente que inicia sesión).

Realizar script para inicio de sesión de usuarios de Terminal Server

Realizar script para inicio de sesión de usuarios de Terminal Server

Windows 2000 / 2003 puede configurarse como servidor de terminales (Terminal Server). De esta forma sólo tendremos que instalar las aplicaciones de nuestra organización en los servidores de terminal server de que dispongamos. No será necesario instalar aplicaciones en los clientes, con los problemas de actualización y mantenimiento que supondría. Cada cliente se conectará al servidor y tendrá su propio escritorio, con los accesos directos a las aplicaciones que deseemos.

Si desea ver un manual sobre cómo instalar y configurar Terminal Server en Windows 2003 pulse aquí.

Cuando una organización tiene varios servidores de Terminal Server las tareas de mantenimiento se pueden complicar si se realizan de forma manual. Para ayudar a automatizar estas tareas podremos utilizar "script" de inicio de sesión. Se trata de miniaplicaciones que se ejecutarán cada vez que un usuario inicie sesión en el servidor de Terminal Server.

En este manual os explicamos con ejemplos y código fuente en Delphi y Visual Basic Script (VBScript) cómo realizar una miniaplicación que realiza las siguientes tareas de mantenimiento:

  • Comprueba si existen determinadas carpetas, si no existen las crea en el perfil del usuario que inicia sesión en Terminal Server. Estas carpetas son necesarias para la aplicación de Facturación de nuestra empresa.
  • Escribe un valor en una clave de un fichero .ini de una aplicación, en concreto escribe la ruta del perfil del usuario que inicia sesión en Terminal Server. Este dato es necesario para la aplicación de Contabilidad de la organización.
  • Copia ficheros de una ubicación a la carpeta "Windows" del perfil del usuario que inicia la sesión de Terminal Server. Estos ficheros son necesarios para el correcto inicio de la aplicación de Gestión de nuestra organización.
  • Guarda en un fichero .ini de información los datos del usuario que inicia sesión en Terminal Server: nombre de usuario, nombre del servidor de Terminal Server, nombre del equipo cliente del usuario, fecha y hora de inicio de sesión, número de conexiones que ha realizado el usuario. Esta información es muy útil para empresas que tengan varios servidores de Terminal Server. A veces, para realizar control remoto a un usuario (o cualquier otra tarea), hay que saber en qué servidor ha iniciado sesión un usuario. Con este script esa información se guardará en un fichero .ini de nuestra red, accesible para consulta de estos datos.

Para crear el script hemos utilizado Delphi 6, realizando una aplicación de consola. Para ello abriremos Delphi, menú "File" - "New" - "Other":

En la ventana "New Items" seleccionareos "Console Application" y pulsaremos "OK":

El código fuente completo en Delphi sería el que a continuación os mostramos:

program inicioSesion;

{$APPTYPE CONSOLE}

uses
  SysUtils, inifiles, Dialogs, windows, Classes;

function obtenerVariableEntorno
    (variable : string) : String;
var
  Env : PChar;
  valorVariable : string;
begin
  Result := '';
  Env := GetEnvironmentStrings;
  While Env^ <> #0 do
  begin
    valorVariable := StrPas(Env);
    if Pos (variable, valorVariable) = 1 then
    begin
      Result := copy (valorVariable,
          length(variable) + 1,
          length(valorVariable));
      exit;
    end;
    Inc(Env, StrLen(Env) + 1);
  end;
end;


var
  rutaPerfil : string;
  ficheroOrigen : string;
  ficheroDestino : string;
  nombreServidor : string;
  nombreUsuario : string;
  nombreEquipoCliente : string;
  numConexiones : integer;

const
  docInfo = '//servidor/datos/info.ini';

begin
  try

    rutaPerfil := obtenerVariableEntorno ('USERPROFILE=');


    //**** PARA PROGRAMA DE FACTURACIÓN ****

    //si no existe "Mis documentos" lo creamos
    if not DirectoryExists (rutaPerfil +
        '/Mis documentos') then
      MkDir(rutaPerfil + '/Mis documentos');

    //si no existe "TEMPFAC" lo creamos
    if not DirectoryExists (rutaPerfil +
        '/Mis documentos/TEMPFAC') then
      MkDir(rutaPerfil + '/Mis documentos/TEMPFAC');

    //**** PARA PROGRAMA DE CONTABILIDAD ****

    //escribimos en configuracion.ini del usuario
    //el valor de la carpeta anterior
    //para que guarde los documentos temporales
    with tinifile.create (rutaPerfil +
        '/WINDOWS/configuracion.ini') do
    try
      writeString ('Temporal', 'Ruta', rutaPerfil +
          '/Mis documentos/TEMPFAC');
    finally
      free;
    end;

    //**** PARA PROGRAMA DE GESTIÓN ****

    ficheroOrigen := 'C:/gestion/bin/conf.bak';
    ficheroDestino := rutaPerfil + '/WINDOWS/conf.ini';
    if FileExists(ficheroOrigen) then
      CopyFile (pchar(ficheroOrigen),
          pchar(ficheroDestino), false);

    ficheroOrigen := 'C:/gestion/bin/conf00.bak';
    ficheroDestino := rutaPerfil +
        '/WINDOWS/conf00.ini';
    if FileExists(ficheroOrigen) then
      CopyFile (pchar(ficheroOrigen),
          pchar(ficheroDestino), false);


    //****PARA GUARDAR EN QUÉ SERVIDOR
    //ESTÁ CADA USUARIO
    nombreServidor :=
        obtenerVariableEntorno ('COMPUTERNAME=');
    nombreUsuario :=
        obtenerVariableEntorno ('USERNAME=');
    nombreEquipoCliente :=
        obtenerVariableEntorno ('CLIENTNAME=');
    //escribimos en info.ini los datos del usuario
    with tinifile.create (docInfo) do
    try
      numConexiones := ReadInteger (nombreUsuario,
          'Nº Conexiones', 0);
      numConexiones := numConexiones + 1;
      writeString (nombreUsuario, 'Servidor',
          nombreServidor);
      writeString (nombreUsuario, 'Equipo cliente',
          nombreEquipoCliente);
      writeString (nombreUsuario, 'Hora Inicio sesion',
          datetimetostr(now));
      WriteInteger (nombreUsuario, 'Nº Conexiones',
          numConexiones);
    finally
      free;
    end;
  except
  end;
end.

Compilando el código Delphi anterior (Menú "Run" - "Run") nos creará un fichero .exe llamado inicioSesion.exe, con el tamaño de 363 KB, que copiaremos a una carpeta de nuestra red que esté compartida y a la que todos los usuarios tengan, al menos, permisos de lectura. En nuestro caso, puesto que tenemos varios servidores de Terminal Server y tenemos un servidor como Controlador de Dominio (que incluye el catálogo global), que no tiene los servicios de Terminal Server (tal y como recomienda Microsoft), copiaremos esta aplicación a la ruta:

//servidor_controlador/netlogon/script

Hemos dado permisos de lectura a todos los usuarios para la carpeta "script" del servidor "servidor_controlador".

Ahora crearemos un sencillo fichero de VBScript que ejecutará la aplicación creada en Delphi, con el siguiente contenido:


  'Ejecutar aplicación de script de Delphi 
  Set objEjecutarAplicacion = WScript.CreateObject("WScript.Shell")
  aplicacion = "//servidor_controlador/netlogon/Script/iniciosesion.exe"
  objEjecutarAplicacion.run (aplicacion) 

Copiaremos el código anterior en un fichero que guardaremos con extensión .vbs:

El script lo podríamos poner para que se ejecute para todos los usuarios o sólo para usuarios determinados. Si queremos que se ejecute para todos los usuarios accederemos a todos los servidores de Terminal Server y crearemos un acceso directo al script VB (VBScript) anterior en la carpeta:

C:/Documents and Settings/All User/Menú Inicio/Programas/Inicio

Si queremos que se ejecute sólo para determinados usuarios colocaremos el acceso directo en la carpeta "Inicio" de cada usuario:

C:/Documents and Settings/Fernando Alonso/Menú Inicio/Programas/Inicio

De esta forma el script se ejecutará cada vez de todos o los usuarios seleccionados inicien sesión en el servidor de Terminal Server.

Es posible que cuando se inicie sesión aparezca la ventana de confirmación de documento sin firmar. Para quitar este mensaje podéis consultar este hilo de nuestros foros.

También aparecerá durante uno o dos segundos una ventana de MS-DOS (del script creado en Delphi).

Si iniciáramos sesión con un usuario llamado "fernando.alonso", el script realizará las siguientes tareas automáticamente:

  • Creará la carpeta: C:/Documents and Settings/fernando.alonso/Mis documentos.
  • Creará la carepta: C:/Documents and Settings/fernando.alonso/Mis documentos/TEMPFAC.
  • Escribirá en el fichero C:/Documents and Settings/fernando.alonso/WINDOWS/configuracion.ini, en la clave "Temporal", "Ruta", el valor C:/Documents and Settings/fernando.alonso/Mis documentos/TEMPFAC.
  • Copiará el fichero C:/gestion/bin/conf.bak al destino C:/Documents and Settings/fernando.alonso/WINDOWS/conf.ini.
  • Copiará el fichero C:/gestion/bin/conf00.bak al destino C:/Documents and Settings/fernando.alonso/WINDOWS/conf00.ini.
  • Guardará los siguientes valores en el documento //servidor/datos/info.ini:
    • [fernando.alonso]
    • Servidor=SERVIDOR1
    • Equipo cliente=PC001
    • Hora Inicio sesión=26/05/2007 11:19:01
    • Nº Conexiones=8

Esta aplicación y el código fuente está disponible de forma totalmente gratuita (freeware) en nuestra web. Para descargarla deberá ser usuario registrado, si aún no lo es pulse aquí para registrarse:

AjpdSoft Script Inicio Sesión Terminal Server

 

La aplicación que complementa a esta: AjpdSoft Información Usuarios Terminal Server

 

ANEXO

Contenido de ejemplo del fichero info.ini (guarda los datos de inicio de sesión de los usuarios):

[fernando.alonso]
Servidor=SERVIDOR1
Equipo cliente=PC001
Hora Inicio sesion=26/05/2007 11:19:01
Nº Conexiones=8

[alonso.javier]
Servidor=SERVIDOR2
Equipo cliente=PC002
Hora Inicio sesion=25/05/2007 08:02:45
Nº Conexiones=74

[alonso.quijano]
Servidor=SERVIDOR1
Equipo cliente=PC003
Hora Inicio sesion=22/05/2007 10:10:50
Nº Conexiones=3



Nota: Revisado por AjpdSoft 25-03-2008.
Anuncios


Enviado el Sábado, 26 mayo a las 06:57:29 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A