Actualmente estoy escribiendo un servicio para Windows y frecuentemente lo modifico y actualizo en mi computadora de prueba. Me gustaría escribir un script que detenga automáticamente el servicio, actualice el archivo ejecutable y reinicie el servicio. sin embargo, es esa parte de detenerse y comenzar con la que tengo problemas.
La computadora a la que me estoy conectando no está en un dominio y no compartimos un nombre de usuario ni una contraseña. Sin embargo , creo que lo mejor que puedo hacer es hacerlo, sc.exe \\testsvr stop "myService"
ya que no tengo un dominio ni nombres de usuario ni contraseñas compartidos, y aparece el mensaje "Acceso denegado".
Puedo agregar el usuario muy fácilmente, pero quería esto como una experiencia de aprendizaje para cuando no pueda cambiar los usuarios.
Respuesta1
yo echaría un vistazo aPsServiciode Sysinternals de Microsoft (es parte del excelente conjunto de herramientas escrito por Mark Russinovich).
Directamente desde el sitio web:
Usage: psservice [\\computer [-u username] [-p password]] <command> <options>
Para <command>
, puede utilizar start
, stop
o restart
como las opciones más comunes. Lo bueno de este script es que no depende de que las dos máquinas sean miembros del mismo dominio o tengan cualquier otra confianza.
Respuesta2
Solo para completar aquí, si desea hacer esto solo con herramientas estándar de Windows, primero puede establecer una conexión IPC a la máquina remota (para establecer un token de seguridad en esa máquina) y luego usar el comando "SC":
net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete
Eso le permitirá controlar los servicios en la máquina remota, independientemente de la combinación de pertenencia al grupo de trabajo/dominio de ambas máquinas.
Respuesta3
¿Nunca lo probé personalmente en una configuración que no sea de dominio, pero quizás ejecute SC.exe con "RunAs" y use credenciales para la computadora de destino?
Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""
Respuesta4
En un entorno DOMINIO, puede utilizar los comandos NET USE, suponiendo que se le hayan otorgado los derechos de usuario adecuados al usuario que inició sesión y que ejecuta el script. PowerShell es probablemente la opción más poderosa que tiene, pero si está ejecutando sistemas operativos de Microsoft más antiguos, es posible que tenga algunos problemas al ejecutar algunos comandos de PowerShell. Si todo es Windows 2008 o posterior, definitivamente elegiría PowerShell.
Si esa no es una opción, he tenido un gran éxito con el paquete PSTools. Si elige esta opción, como Evan mencionó anteriormente, probablemente debería familiarizarse con la utilidad pskill en el mismo paquete. Algunos servicios no mueren fácilmente cuando estás jugando con ellos de forma remota, y esta pequeña utilidad es EXCELENTE para eliminarlos.
Por curiosidad, ¿en qué lenguaje de escritura estás codificando esto? ¿VBScript? ¿Lote? ¿Perla?