Ejecutar archivo bat remotamente con PSEXEC

Es de bastante utilidad saber como ejecutar archivo bat remotamente, ya que puede ayudarnos a optimizar el tiempo en que se realiza un proceso que estamos por ejecutar, evitando ir equipo por equipo realizando o cambiando la configuración, existe una herramienta de la cual ya hemos hablado anteriormente en varios artículos el cual es PSExec esta herramienta es fundamental para un administrador de Red.

Pasos para ejecutar archivo remotamente con PSExec

Requisito, tener usuario con privilegios de administrador y tener las Herramientas PSTools (Ver publicación)

  • Primero preparamos el archivo .bat que deseamos ejecutar en los equipos remotos, Este debemos guardarlo en la carpeta PSTools, si no debemos indicar la ruta completa al archivo.
  • Ahora preparamos el listado de equipos en el cual vamos a ejecutar el archivo, el cual debe ser como se muestra en la imagen inferior, si deseamos ejecutar el archivo en todos los equipos que esten conectados a la red, solo debemos poner \\* en la parte inferior se muestra un ejemplo.ejemplo-txt-inventario
  • Una vez creados estos, procuramos guardarlos en una carpeta fácilmente accesible desde la consola (por ejemplo en el C:\ en mi caso yo tengo una carpeta llamada Scripts en el C:\ donde tengo todos los Scripts que he llegado a ejecutar)
  • Ejecutamos el siguiente comando, donde -u usuario y -p clave  se puede evitar si tenemos privilegios de administrador de red.

psexec @C:\ListadoDePCs.txt -u usuario -p clave -d -c -f nombrearchivo.bat

-u: Usuario.

-p: Clave.

-d: No esperar a que el proceso termine en cada equipo (Cuando sea ejecutado continua con el siguiente equipo).

-c: Copiar archivo al equipo remoto para ejecutarlo.

-f: Se utiliza para indicar que el archivo sea copiado aun que ya exista este (Sobrescribe).

-h: Ejecutar con privilegio elevado de la cuenta, si está disponible. (Vista o superior)

  • Ejemplo 2: Si deseamos ejecutar el archivo en todos los equipos de la red lo podemos realizar de la siguiente manera.

psexec \\* -d -c -f nombrearchivo.bat

  • Ejemplo: En este solo lo ejecute en un solo equipo ya que no quiero modificar la configuración DHCP el cual es lo que hace mi archivo bat. como vemos en la imagen nos muestra que fue comenzado en el equipo X con el ID del proceso X. asi nos debe mostrar con todos para saber que se inicio en todos los equipos.psexec-ejecutar-archivo-bat-remotamente
  • Este también se puede utilizar para ejecutar archivos como vbscript, etc.

Fernando O.

Soy analista de sistemas actualmente trabajo en una empresa con mas de 200 empleados que utilizan equipo de computo al cual se les da soporte en el departamento.
Uno de mis pasatiempos fuera de la empresa es escribir artículos para PortalMasTips donde documento los problemas, inquietudes y detalles interesantes que se presentan.

21 comentarios en “Ejecutar archivo bat remotamente con PSEXEC

  1. Hola Buen Día,

    Gracias por la información, queria consultarte algo, cuando ejecuto el comando me saca este mensaje.
    Could not start PSEXESVC service on 10.75.40.24:
    Acceso denegado.
    Que podra ser, le estoy colocando los datos del usuario administrador.

    De antemano gracias.

    • Buen día
      Va a tener que ver con los privilegios del usuario o el equipo, los equipos deben estar en el mismo Dominio o Grupo de trabajo también. Si tienes algún firewall o antivirus aparte de los de Windows tal como Kaspersky, Nod32 o cualquier antivirus en su versión internet security estos pueden llegar a bloquear estos comandos porque lo toman como intrusión de Red (PSEXEC sobre pasa el firewall de Windows).
      Nos puedes proporcionar el comando que estas utilizando.

  2. Quisiera saber como obtener un log de todo lo realizado con el comando que mencionaste, por ej. ejecute un comando que me da las versiones de IE en todos los equipos de mi red, pero quisiera que me lo deje en un txt. Sabrias como? desde ya muchísimas gracias.

  3. Algo que podría serles de utilidad:
    Si ejecutan el comando en una red corporativa que tiene al usuario “Administrador Local” deshabilitado en los equipos de computo pero disponen de alguna cuenta de red con privilegios elevados entonces deben agregar el parámetro “-h” luego del usuario y contraseña, de esa manera van a poder ejecutar sus BAT con elevación de privilegios.

  4. Hola buen tuto. Mi duda es como se define la ruta para q sepa donde copiar el archivo .bat en el equipo remoto. Y lo otro es si la herramienta PSEXEC debe estar instalado en el equipo remoto tambien o no sería necesario. Saludos

  5. Cómo ingresar con psexec sin necesidad de ingresar por carpeta compartida, ejemplo se ejecuta psexec \\1.1.1.1 CMD cuándo lo ejecutado de esa manera se queda en conectando y al final te dice que necesitas ingresar por shared folder algo así, yo solo necesito ingresar por consola sin necesidad de abrir ejecutar y poner nuevamente la IP para que se conecte por CMD, habrá algún parámetro.

    Saludos!

    • Buen dia Antonio,

      El error es un poco amplio, pueden ser privilegios de usuario en la Red, también conflictos en las IP al resolver la dirección.

      Intenta también ingresando los datos de administrador de Red por ejemplo:

      psexec \\1.1.1.1 -u dominio\administrator -p clave -s cmd

      o también intentar ejecutando la instrucción sin establecer conexión permanente

      psexec \\1.1.1.1 -u dominio\administrator -p clave -s ipconfig

      Espero comentarios.

      Excelente dia.

  6. hola tengo que copiar un archivo .pdf de mi equipo y pegarlo en el escritorio a 1100 equipos en forma remota pudo ejecutar alguna sentencia para no hacerlo uno por uno?

  7. Hola necesito copiar un archivo a varias pcs que estan en dominio, se puede con psexec? como se declara la sentencia para poder mandarlo? Con robocopy lo estoy haciendo pero se atora

    • Buen dia Otto

      Con PSExec también estarías ejecutando una instrucción CMD como Copy o Robocopy de igual forma intenta con lo siguiente sin utilizar PSExec.

      for /f %a in (C:\ListaPCs.txt) do copy /y /z \\PCRemoto\Archivos\Archivo.pdf \\%a\c$\Usuario\Nombre\Escritorio

      Si estas creando un archivo batch requieres doble %% en todas las declaraciones Ej. %%a.
      Intenta eso y me comentas se agrego /z porque tienes problemas para ejecutarlo puede ser tu Red que trunca la copia si esta saturada, tambien es posible que requieras ejecutarlo como administrador.

      Por otro lado, envíame lo que estas utilizando y que te marca para no repetir respuestas.

      Excelente dia.

  8. buenas tardes tengo estas 2 sentencias pero ninguna me funciona no se si tengo que ejecutarlo desde una ubicacion determinada. tengo privilegios de administrador

    psexec @c:\list.txt -d -c -f d:\bats\csi\llavecsi.bat

    psexec @c:\list.txt -d -c -f c:\windows\llavecsi.bat

    lo que tengo duda es, el archivo llavecsi.bat lo tengo en mi equipo como esta en esta en la primera sentencia y tambien lo tengo ya en todos los equipos en c:\windows\llavecsi.bat como en la segunda sentencia

    pero de ninguna forma puedo ejecutar ese .bat algo falla y no doy con que. ese bat me edita el regedit y si lo hago manuel si funciona. esto tiene la llavecsi.bat

    REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v CSI /t REG_SZ /d “C:\Windows\CSI.vbs”

    lo que quiero es ejecutar el archivo llavecsi.bat para que me agregue esto al registro de inicio. o alguna manera mas facil sin complicarme la vida?

    • Buen dia OTTO

      Puedes verificar que puedas entrar al CMD en uno de los equipos por medio de PSEXEC

      psexec \\IP CMD

      Quiero ver si te muestra algun mensaje.

      Se supone que agregando -c no importa donde tengas almacenado el archivo siempre y cuando apunte a la ruta local donde se ejecuta el archivo.
      Yo este siempre lo he utilizado desde carpetas compartidas generales (Que todos los equipos tienen).

      Quedo en espera de tu comentario.

      Excelente dia.

    • Buen dia Otto

      Debes aumentar el valor del IRPStackSize revisa la siguiente documentacion de Microsofrt

      Puedes probar con PowerShell, para agregar el registro.

      $Computers = Get-Content “C:\listapc.txt”
      $Path = “HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”
      $Property = “CSI”
      $Value = “C:\Windows\CSI.vbs”

      $results = foreach ($computer in $Computers)
      {
      If (test-connection -ComputerName $computer -Count 1 -Quiet)
      {
      Try {
      Set-ItemProperty -Path $path -Name $Property -Value $Value -ErrorAction ‘Stop’
      $status = “Success”
      } Catch {
      $status = “Failed”
      }
      }
      else
      {
      $status = “Unreachable”
      }

      New-Object -TypeName PSObject -Property @{
      ‘Computer’=$computer
      ‘Status’=$status
      }
      }

      $results |
      Export-Csv -NoTypeInformation -Path “C:/APPS/out.csv”

Deja un comentario...

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Compartir
Twittear
Pin