|
Sistemas Operativos: Realizar script para inicio de sesión de usuarios de Terminal Server
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 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:
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:
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):
Nota: Revisado por AjpdSoft 25-03-2008. Anuncios
Enviado el Sábado, 26 mayo a las 06:57:29 por ajpdsoft
|
|