2 votos

¿Cómo controlar programáticamente un módem?

Actualmente, hay alrededor de 20-30 equipos en los que he marcado en una base regular. Actualmente estoy usando HyperTerminal en Windows XP SP3 para ello. Una vez que mi equipo se conecta a otro ordenador, me sale una cadena impresión de cierta información que me manualmente el globo ocular y el tipo en Excel.

Mientras que funciona bien para el manual de las conexiones, es un proceso tedioso que siento debe ser automatizado. Yo estoy haciendo una vez a la semana, ahora, porque es muy laborioso (generalmente de 30 a 40 minutos por), pero lo ideal sería que me gustaría que se ejecuta como una tarea programada cada día. Sin embargo, HyperTerminal no parece ofrecer ningún capacidades de scripting. Además, he intentado utilizar la sesión de registro de la característica y no parece funcionar de forma fiable, que bien.

Hay alguna manera, tal vez con un lote o VBS o secuencia de comandos de PowerShell, que podía secuencialmente marcar una serie de equipos y, a continuación, iniciar sesión automáticamente el terminal de salida a un archivo de texto, sellos de tiempo?

El agregado de la salvedad es que yo también necesita ser capaz de manejar excepciones, por ejemplo, si el equipo está ocupado. HyperTerminal tiene un "volver a marcar en la Concurrida" característica, y a veces puedo usar o que marque el resto de los equipos y, a continuación, volver a eso. Necesito construir que en mi script, también.

Teniendo en cuenta que el marcado de guerra es posible, aunque no la de registro de la salida, sólo la ausencia o la presencia de un tono de portadora, siento que esta es alcanzable. Cómo se podría ir sobre la ejecución de este tipo?

Necesito un Lote o VBS solución, si es posible. No estoy seguro de cómo de buena es la compatibilidad de PowerShell en Windows XP, y por diversas razones, prefiero no instalar herramientas adicionales (por ejemplo, Python, etc.) en la máquina.

Aclaración: tengo un amigo que en un momento se hizo un guión que podría marcar con Hayes comandos en la línea. Esa es la parte fácil, la parte difícil es ser capaz de detectar la impresión desde el equipo remoto y registro a un archivo de texto.

La versión de pago de HyperTerminal ofrece instalaciones de secuencia de comandos de cosas a lo largo de estas líneas, pero me gustaría hacer esto de forma gratuita mediante el uso de una secuencia de comandos personalizada, con la capacidad de manejar ocupado números así.

Gracias!

PowerShell

He aquí lo que me sale al ejecutar el script de PowerShell: enter image description here

Aquí está el script que he intentado:

# Create your instance of the SerialPort Class
$serialPort = new-Object System.IO.Ports.SerialPort
# Set various COM-port settings
$serialPort.PortName = "COM3"
$serialPort.BaudRate = 1200
$serialPort.WriteTimeout = 500
$serialPort.ReadTimeout = 23000
$serialPort.DtrEnable = "true"
# or in one command
# $serialPort= new-Object System.IO.Ports.SerialPort COM#,Baudrate,None,8,one
# Open the connection
$serialPort.Open()
# write to it
$serialPort.WriteLine( "at+csq" + "`r" )
$serialPort.WriteLine( "atdt1NPANXXXXXX" + "`r" )
# wait
start-sleep -m 50
# read line
$line = $serialPort.ReadLine()
Write-Host $line
# write to it
$serialPort.Close()

Más Cerca De La Solución Hasta Ahora:

Más cercano que he podido conseguir es el uso de AHK, que es muy meticuloso, pero funciona bastante de el tiempo para ser útil. Mi plan es para conectar una secuencia de comandos por lotes y de paso en cada número e iterar hasta que hayas conseguido una copia impresa de cada equipo.

3voto

Louis Puntos 121

Una herramienta que podría ayudar con su problema es el EN el Comando de Tester de aplicaciones de Escritorio, un producto comercial ($9.95) con 7 días de prueba gratis.

Este producto puede ejecutar un script de comandos AT en virtud de su "Script" Modo de ficha, donde se puede guardar y cargar la secuencia de comandos desde el equipo local.

También tiene un modo de línea de comandos donde se puede obtener:

atc –port portname –script filename

La herramienta también puede recoger y guardar módem de registros. No lo he probado, ya que yo no tiene un módem o saber algún número para llamar, pero si los registros se guardan como archivos de texto debe ser una simple cuestión de escribir un poco de texto de búsqueda de secuencia de comandos de errores/éxito.

enter image description here


Si usted prefiere la escritura de su propia, un simple script de PowerShell puede hacerlo, el uso de la Sistema.IO.Puertos.Clase SerialPort.

He aquí un ejemplo (no probada y muy teórico) :

# Create your instance of the SerialPort Class
$serialPort = new-Object System.IO.Ports.SerialPort
# Set various COM-port settings
$serialPort.PortName = "COM1"
$serialPort.BaudRate = 19200
$serialPort.WriteTimeout = 500
$serialPort.ReadTimeout = 3000
$serialPort.DtrEnable = "true"
# or in one command
# $serialPort= new-Object System.IO.Ports.SerialPort COM#,Baudrate,None,8,one
# Open the connection
$serialPort.Open()
# write to it
$serialPort.WriteLine( "at+csq" + "`r" )
# wait
start-sleep -m 50
# read line
$line = $serialPort.ReadLine()
Write-Host $line
# write to it
$serialPort.Close()

Tenga en cuenta que el final de la línea de caracteres utilizado por el módem necesita atención.

Aquí está mi sesión en un XP VM donde he instalado .Net Framework 2.0 y KB968930. Casi trabajado, excepto que no hay nada conectado al COM1, así que se colgó en la ReadLine() llamada hasta que se terminó por un tiempo de espera.

Por favor, tenga en cuenta que no fue un copy-paste de error en mi script, ahora corregido. La línea que no funcionó fue:

$line = $port.ReadLine()

Debería haber sido:

$line = $serialPort.ReadLine()

enter image description here

2voto

Nick Dixon Puntos 154

El método más básico de control de un módem es mediante el envío de comandos a través de un puerto serie. Casi todos los módems de acceso telefónico de apoyo Hayes comandos AT, como ATD o ATH (generalmente en el hardware para módems de serie, a veces emulado por el controlador para USB/módems PCI).

Ejemplos:

  • Linux/OpenBSD/FreeBSD: Todos los programas y las bibliotecas, finalmente, el uso de la /dev/ttyS* archivos especiales de acceso a los puertos serie. (Nota: En Linux, memorias USB, serie de adaptadores se denominan ttyUSB o ttyACM.)
    En la mayoría de los casos, el programa sólo puede abrir el camino como si se tratara de un archivo regular, a continuación, escriba/ras un comando y leer la respuesta.

  • Windows: Todos los programas, finalmente, el uso de la \\.\COM1: archivos especiales de acceso a los puertos serie. Los cuatro primeros se pueden abrir simplemente como COM1: (el acceso directo es un MS-DOS reliquia).

  • PowerShell: Hay un DevBlog sobre este tema.

  • Python: el Uso de pySerial.

El otro método, en Windows, podría ser la utilización de la API de Telefonía. Sin embargo, yo no puedo saber si es compatible con los datos (terminal) de las llamadas, o sólo las llamadas de voz.

1voto

pebwindkraft Puntos 121

Como una nota al margen: aquí hay dos utilidades que uso para el control de mi módems. Puedo enviar y recibir un montón de SMS, las herramientas están hechas para esto. Dan soporte a múltiples módems y comandos AT se usa para inicializar el módem. Mientras que todas las funciones son de alguna manera puso a trabajar con el SMS, puede ser altamente personalizado con los scripts de inicio y mucho más. Yo no he probado un ciclo completo, como marcado en otro módem y recibir de alguna manera los datos, pero tal vez vale la pena un vistazo:

http://smstools3.kekekasvi.com/index.php https://wammu.eu/smsd/

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: