|
Responder
|
Página 12> |
| Autor | ||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Tema: Lanzar comandos DOS, Shell, Wscript.ShellEnviado: 26/Abril/2020 a las 20:39 |
|||
|
Tengo un problema bastante curioso con Shell, creo que se cuál es el problema pero no encuentro el camino para solucionarlo. El propósito es controlar los usuarios que se conectan en remoto a un servidor y poder 'cerrarles' la sesión desde un programa en Access cuando en vez de cerrar la sesión se desconectan quedando la sesión abierta y el programa de Access que están ejecutando también, con lo que impiden el mantenimiento de las BD y aplicaciones. Soy capaz de averiguar mediante el comando QUERY SESSION que usuarios figuran en el servidor y no están conectados: C:\Users\JESUS>query session NOMBRE DE SESIÓN NOMBRE DE USUARIO ID ESTADO TIPO DISPOSITIVO services 0 Desc >console JESUS 1 Activo rdp-tcp 65536 Escuchar Y despues puedo cerrarlos con: C:\Users\JESUS\Logoff 1 Hasta ahí todo bien, en el caso del comando QUERY puedo guardar los datos en un txt y explotarlo después desde Access. C:\Users\JESUS>query session >C:\Temp\Datos.txt Nota: estos comandos funcionan perfectamente tanto con el CMD como con el POWERSHELL El problema viene cuando quiero hacerlo desde Access: - El primer camino es lanzarlo mediante un Shell:
dice que archivo no encontrado - probando con Wscript.Shell:
dice que error en método Run - El segundo camino es crearme un bat con lo que necesito y lanzar el bat: El fichero .bat contiene una única línea: query session >C:\temp\datos.txt si lo ejecuto desde windows hace lo que debe y obtiene el fichero con los datos que busco si lo lanzo desde Access:
aparentemente funciona (tanto con Shell como con Wscript.Shell, obtiene el fichero de salida, pero en blanco - Intento lanzarlo con cmd.exe (con el modificador /k para que se quede abierto)
la respuesta es: "query" no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable. lo mismo ocurre si lanzo el .bat el resultado es el mismo si en vez de cmd.exe utilizo el powershell De todas formas aquí salta la pista importante (o eso creo), en la ventana cmd abierta ejecuto el comando QUERY SESSION manualmente y me da el mismo error (comando que en una ventana CMD abierta desde windows funciona perfectamente). Buscando por la nube encuentro que DIR que es un comando que funciona perfectamente con los métodos anteriormente descritos es un comando de DOS, en cambio QUERY SESSION es un comando de windows, por lo que entiendo que el problema radica en que la ventana que se abre desde windows con CMD es capaz de ejecutar comandos de los dos entornos, en cambio la ventana abierta desde programa -ya sea Shell, Wscript.Shell o Powershell- sólo es capaz de ejecutar comandos DOS. El punto dónde me he quedado es cómo lanzar un comando windows desde Access, no encuentro ninguna referencia, todo lo que encuentro me dirige a Shell y Wscript.Shell. ¿Ideas?. Gracias por leer el tocho que he soltado. Editado por Mihura - 26/Abril/2020 a las 20:42 |
||||
![]() |
||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4856 |
Enviado: 26/Abril/2020 a las 23:00 |
|||
|
Jesus , en la WEB de Buho encontraras ejemplos de como controlar los usuarios , como desconectarlos , controlar tiempos de inactividad etc etc.... ,....... quizás sea lo mas rápido para salir del atasco ,...... pero si prefieres seguir mediante Shell , Dos , Bat etc... eso ya es otra historia ........
|
||||
![]() |
||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4856 |
Enviado: 26/Abril/2020 a las 23:11 |
|||
|
[Topico:39] ¿Es posible conocer los usuarios que se encuentran conectados a una MDB concreta?
Usuarios conectados Las palabras claves de búsqueda son: usuarios conectados mdb access numero ejemplos [Topico:219] Unas buenas funciones donde se explica detalladamente como conectar con una MDb dese Sql Server, Ado, Dao, crear recordset's con Ado, Dao...no te pierdas este fichero Ver Funciones Las palabras claves de búsqueda son: conectar sql server dao ado access funciones [Topico:523] Una API para conectarse a una undiad de RED Ver codigo Las palabras claves de búsqueda son: access api conectar disco unidad red lan [Topico:598] Conexión a una base de datos de Vsual Fox Jairo Hernandez Las palabras claves de búsqueda son: access conectar base datos fox visual ado [Topico:792] Ejemplo del Búho para Access 2000, desde el cual, podrás desconectar a usuarios que en un momentos dado estén utilizando el módulo de datos de servicio de una determinada aplicación. Dentro del ejemplo hay un fichero de texto, que es conveniente que leas para que todo funcione bien. Es un ejemplo hecho muy rápido, así que no descarto que tenga algún error. De ser así, por favor, comunícamelo. He utilizado en una de las MDB que acompañan a este ejemplo, parte de un código extraído de una aplicación que muestra los usuarios activos en un momento dado Bajarse Ejemplo Las palabras claves de búsqueda son: access usuarios red desconectar seguridad proteger proteccion ejemplos [Topico:969] Para saber si estamos conectados a Internet Ver Código Las palabras claves de búsqueda son: access api internet conectados conexión [Topico:1035] Una forma de saber si estamos conectados a internet Ver Código Las palabras claves de búsqueda son: access internet conexion conectados [Topico:1131] Exposicion de Ricarado Hernandez sobre recordset desconectados y de cómo agilizar el resultado de mostrar registros Ver Código Las palabras claves de búsqueda son: access ado dao recordsets desconectados lentitud agilidad [Topico:1275] Ejemplo Búho: Conexión Internet-> Un sencillo ejemplo para decirnos en el PC que corre el código, qué tipo de conexión a Internet tenemos (MODEM, Adls etc) además de decirnos si en esos momentos estamos On-Line. Sencillo pero práctico. Este ejemplo «solo» funciona para Access 2000 o superior.(Octubre de 2004). Ver Código Las palabras claves de búsqueda son: access internet modem conexion api adsl conectados ejemplos [Topico:1305] Usuarios conectados (De nuevo al ataque) -> D. Emilio, en el foro de nuestra web, ha preparado un ejemplo en el cual dice: «Este ejemplo, pretende mostrar como forzar el cierre de las aplicaciones "cliente" o "Front-end" desde el "Back-end".El Back-End cuenta con una tabla "Config", que a su vez, entre otros, tiene un campo "Cerrar" tipo Si/No y que será únicamente controlado por el Administrador. El Front-End chequea periódicamente el estado de ese campo y en caso de que esté a "Sí", avisa al usuario de que debe cerrar; al cabo de un nuevo ciclo del temporizador, si el usuario no ha cerrado todavía la aplicación, cierra todos los formularios y la aplicación. Así mismo también permite realizar un cierre programado de la aplicación a una hora predeterminada, para por ejemplo realizar un compactado de la misma.» Bueno, pues el ejemplo de Emilio te le puedes bajar de aquí: Ver Código Las palabras claves de búsqueda son: access usuarios conectados desconectar mantenimiento ejemplos [Topico:1306] D. Emilio, en el foro de nuestra web, ha preparado un ejemplo en el cual dice: «Este ejemplo, pretende mostrar como forzar el cierre de las aplicaciones "cliente" o "Front-end" desde el "Back-end".El Back-End cuenta con una tabla "Config", que a su vez, entre otros, tiene un campo "Cerrar" tipo Si/No y que será únicamente controlado por el Administrador. El Front-End chequea periódicamente el estado de ese campo y en caso de que esté a "Sí", avisa al usuario de que debe cerrar; al cabo de un nuevo ciclo del temporizador, si el usuario no ha cerrado todavía la aplicación, cierra todos los formularios y la aplicación. Así mismo también permite realizar un cierre programado de la aplicación a una hora predeterminada, para por ejemplo realizar un compactado de la misma.» Así mismo, el rata del Búho tenía otro parecido, que hice hace tiempo, pero que le faltaba una mano de pintura bien dada y un lavado de cara. Y Emilio me animó a re hacerle de nuevo, por que no sé si te habías enterado todavía, pero el Búho es un envidioso de mucho cuidado :-P Pues aquí también te puedes bajar el ejemplo de Búho rejuvenecido (El ejemplo, no el Búho). EJEMPLO BUHO Estos ejemplos «solo» funcionan para Access 2000 o superior (El del Búho, además, algunas de sus rutinas necesitan tener Windows XP o Windows 2000 instalado (! Se siente !) (Enero de 2005, en plena cuesta del Ídem). Ver Código Las palabras claves de búsqueda son: access usuarios conectados desconectar mantenimiento ejemplos [Topico:1351] Bueno aquí tenemos un ejemplo de como saber los usuarios conectados a una MDB. Utiliza una DLL. Tanto Emilio como Buho, creo que hemos resuelto este tema de una forma mas eficiente y sencilla sin necesidad de recursos externos, como es el caso de este ejemplo, que utiliza una DLL. Los ejemplos de Emilio y Buho les podrás ver en nuestra web. (Sección Novedades o bien a través del buscador) Ver Código Las palabras claves de búsqueda son: access ejemplos usuarios conectados dll |
||||
![]() |
||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Enviado: 27/Abril/2020 a las 01:00 |
|||
|
Gracias Javier,
Me has puesto unos cuantos ejemplos, - como saber los usuarios conectados a una aplicación ya lo conocía, ... y de hecho lo uso en este proceso para saber quién tiene 'cazada' la aplicación - los ejemplos para desconectar a los usuarios son básicamente el mismo, control desde el front de un parámetro en el back, y si existe cerrar el programa, pero no es aplicable aquí, ya que estamos hablando de bastantes aplicaciones distintas y que no se quieren tocar - como conectar con una BD con ADO, DAO, crear recordsets con ADO, DAO ... no tiene que ver mucho con lo planteado - una API para conectar a una unidad de red ¿? - ¿conectarme a una BD de FOXPRO? - ¿saber si estoy conectado a internet? - ¿recordsets desconectados? - ¿saber si estoy conectado a internet con un MODEM o ADSL? - ... No comprendo que tienen que ver con lo preguntado. En principio es posible que resuelva el tema con un script vbs, pero de todas formas lo principal es saber como lanzar desde Access esos comandos que podemos utilizar en una pantalla de CMD o POWERSHELL. |
||||
![]() |
||||
Dabellaso
Asiduo
Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 27/Abril/2020 a las 02:17 |
|||
|
Desde mi total ignorancia, anduve mirando e hice esto: Dim x As Variant x = Shell("POWERSHELL.exe query user >c:\Temp\datos.txt", vbNormalFocus) En PowerShell funciona bien, pero en Access me sale un aviso de código malicioso en macro y sin dejarme otra opción sale de Access. Lo digo, porque a lo mejor tu que sabes más de esto, quizás puedas controlar la seguridad de las macros de modo que te permita ejecutarlo, al menos puntualmente Sólo respondí porque mi error era diferente a los tuyos, por si te servía de algo Sorry pero no doy para más Edito: En PowerShell funciona bien, siempre y cuando la ruta ya exista previamente, el archivo .txt lo genera y lo rellena, pero si la ruta no existe, da error Edito Otra vez He metido ese código en una función, habiendo habilitado en el centro de confianza la carpeta donde está la base de datos y funciona. Supongo que el secreto está en incluir la base de datos como de confianza para que el antivirus no de la lata
Editado por Dabellaso - 27/Abril/2020 a las 02:44 |
||||
|
El saber no ocupa lugar, sólo tiempo
|
||||
![]() |
||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Enviado: 27/Abril/2020 a las 09:37 |
|||
|
Dabellaso,
Lo primero gracias por el interés. La función que pones a mi me funciona (exista o no exista el fichero destino datos.txt) con una función DOS (por ejemplo DIR), pero si le pongo la funcion query user o query session no me da error, pero ni siquiera me genera el fichero de salida. ¿A ti te ha funcionado? Yo uso W10-PRO + Office 2010. P.D. Si abro manualmente una ventana de PowerShell (o CMD) y lanzo la función si que trabaja correctamente. P.D.1. Entra en las opciones de Access -> Centro de confianza -> configuración centro de confianza. Ahí tienes las distintas opciones que puedes cambiar, entre ellas el nivel de ejecución de macros. Editado por Mihura - 27/Abril/2020 a las 09:49 |
||||
![]() |
||||
Cont@BOT
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Nuevo
Unido: 30/Marzo/2020 Localización: Sevilla Estado: Sin conexión Puntos: 2 |
Enviado: 27/Abril/2020 a las 10:13 |
|||
|
Creo que esto puede ayudar Public Function Ejecuta_Cmd() As String
Dim Cadena As String Dim oShell As Object 'Creas el fichero bat o cmd o powershell... Cadena = "@ECHO OFF" Cadena = Cadena & vbCrLf & "Query User" Open Application.CurrentProject.Path & "\Ejecuta.cmd" For Output As #3 Print #3, Cadena Close #3 Cadena = "" 'Ejecutas el fichero Set oShell = CreateObject("WScript.Shell") 'Utilizas Exec en vez de Run, y además lees la salida de la consola Cadena = oShell.Exec("""" & Application.CurrentProject.Path & "\Ejecuta.cmd""").StdOut.ReadAll Set oShell = Nothing 'Borras el fichero creado Kill Application.CurrentProject.Path & "\Ejecuta.cmd" 'Aquí ya haces lo que quieras con Cadena para obtener lo que quieres Ejecuta_Cmd = Cadena End Function |
||||
|
Cont@BOT
IA para PYMES |
||||
![]() |
||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Enviado: 27/Abril/2020 a las 10:31 |
|||
|
Don Juan Carlos, .... bienvenido a esta jaula de grillos
.Muchas gracias por el interés, lo que apuntas me suena a variante de una de las muchas pruebas que llevo hechas, al fin y al cabo te creas un bat (o un cmd) y lo ejecutas desde un Shell. Porque ..... ¿a ti te funciona con query user? a mi no, si pongo como función dir (Cadena = Cadena & vbCrLf & "dir") va como un tiro, pero la que yo busco no va ... ![]() Un saludo y cuidaín con el bichito. ![]() |
||||
![]() |
||||
Dabellaso
Asiduo
Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 27/Abril/2020 a las 10:55 |
|||
Que menos!, gracias a ti por todo
Yo uso Win10-PRO + Office 2019 Con lo que expuse se me abre la ventana de Windows Power shell (La que tiene fondo azul, no el cmd que tiene fondo negro) y tras un momento se cierra, después fui a la carpeta indicada y efectivamente hay estaba el archivo con los datos. Modifique el contenido del txt y volví a repetir para ver si sobrescribía el fichero, y si, lo hace Era muy tarde y no hice muchas pruebas, me pondré en un rato, pero lo que si pude constatar es que como te indiqué, el archivo .txt no es necesario que exista ya que lo genera, pero la ruta de carpeta si debe existir antes, de otro modo me daba error. (Eso lo probé desde el PowerShell no desde Access, y era PowerShell quien se quejaba de ruta no encontrada) Lo del tema de la seguridad de macros tampoco lo probé mucho, sólo metí la base de datos en una carpeta de confianza y funcionó. Hice una ultima prueba después de saber que funcionaba sacándola nuevamente de esa carpeta y me volvió el aviso del antivirus. y así quedo ayer. Acabo de probarlo otra vez y me sigue funcionando. Seguiré haciendo pruebas , y mirando los valores que devuelve Shell. Si descubro algo te digo. Si de alguna manera te puedo ayudar para descubrir porque me funciona a mi y a ti no me dices que hacer saludos Edito. si me indias como obtenerlo, te digo la versión del Powershell, que como ya te digo es la primera vez que trasteo con el
Editado por Dabellaso - 27/Abril/2020 a las 11:02 |
||||
|
El saber no ocupa lugar, sólo tiempo
|
||||
![]() |
||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4856 |
Enviado: 27/Abril/2020 a las 11:02 |
|||
Al hacer la búsqueda dentro de la WEB de Buho me aparecieron todos esos resultados , ........ Ya vi que muchos resultados No se ajustaban a lo que pedías, simplemente hice un copia y pega de todo.
|
||||
![]() |
||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Enviado: 27/Abril/2020 a las 11:23 |
|||
|
Veamos, que se va viendo luz al final de este túnel ...
El problema es el entorno en el que se ejecuta, mirando con Cont@bot el porqué a él si le funciona y a mí no, al ponernos a analizar tema de antivirus, firewall, permisos de usuario, resulta que él lo ha ejecutado en un ordenador con Windows Server, he hecho la prueba en un equipo que tiene Windows Server + Office 2010 y me ha funcionado, en cambio en otro equipo 'servidor' con W7-Pro + Office 2010 no ha funcionado. Dabellaso, dices que a ti te funciona con W10-PRO + Office 2019 luego la versión de office puede ser también otra clave, voy a probar con W10 + Office 2016 (en una maquina virtual) a ver que pasa. Ed. W10 + Office 2016 funciona la rutina propuesta por Cont@bot
Editado por Mihura - 27/Abril/2020 a las 12:14 |
||||
![]() |
||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Enviado: 27/Abril/2020 a las 12:15 |
|||
|
Visto lo visto,
¿a alguien se le ocurre como atacar el problema desde Access por otro camino distinto?
|
||||
![]() |
||||
pitxiku
Colaborador
Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1536 |
Enviado: 28/Abril/2020 a las 17:47 |
|||
|
Has probado con WMI?
- https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logonsession |
||||
![]() |
||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Enviado: 28/Abril/2020 a las 17:54 |
|||
|
Ahí es justo dónde estamos, pero casca con W7 ...
|
||||
![]() |
||||
pitxiku
Colaborador
Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1536 |
Enviado: 29/Abril/2020 a las 14:30 |
|||
|
Esto está probado en Win7+Access 2013. Otra cosa será si sirve realmente, no tengo posibilidad de probar nada en ningún servidor, y a este equipo y mi usuario le han "capado" casi todo:
|
||||
![]() |
||||
Responder
|
Página 12> |
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |