Archivos del escritorioManual básico de PsTools

Wes Miller

Descargar el código de este artículo: MillerTheDesktopFiles2007_03.exe (150KB)

Hasta el año pasado, trabajaba en Winternals Software, que fue adquirido por Microsoft en julio de 2006. Winternals se dedicaba a la venta de software comercial, pero los fundadores de la compañía, Mark Russinovich y Bryce Cogswell, también eran propietarios de una compañía independiente llamada Sysinternals, que distribuía muchas herramientas, como software gratuito. Algunas de estas aplicaciones de software gratuito incluso han

evolucionado hasta llegar a ser componentes del pack del administrador de Winternals. Mark y Bryce también vendieron la licencia de estas herramientas a compañías que buscaban utilizarlas fuera de los términos de licencia típicos de software gratuito.

Una de mis herramientas favoritas de la biblioteca de Sysinternals (de acuerdo, es una cantidad ingente de herramientas) es la serie PsTools, que se encuentra ahora en microsoft.com/technet/sysinternals/utilities/pstools.mspx. Mark asignó un nombre a las herramientas basado en la utilidad de lista de procesos de UNIX, ps. Como se ha mencionado en el sitio de descarga de las herramientas, existen utilidades de línea de comandos de Windows® que pueden realizar algunas de las mismas funciones que estas herramientas. Sin embargo, además de una funcionalidad única considerable, una diferencia principal es que la serie PsTools se puede utilizar de forma local o remota (siempre y cuando los sistemas remotos estén configurados correctamente, por supuesto). Aún mejor, el proceso para ejecutarlos de forma remota es casi tan sencillo como ejecutarlos de forma local.

La serie PsTools incluye varias aplicaciones individuales, incluidas en la figura 1. Al igual que ocurre con el resto de las utilidades de Sysinternals, no hay instalador, sólo aplicaciones. ¡Sólo tiene que colocarlas en una carpeta de su ruta de acceso y adelante!

Figure 1 Utilidades de PsTools

Herramienta Descripción
PsExec Permite ejecutar procesos en cualquier contexto de usuario.
PsFile Muestra los archivos abiertos de forma remota en un sistema.
PsGetSid Muestra el identificador de seguridad (SID) de Windows de un equipo o un usuario.
PsInfo Muestra información acerca de un sistema de Windows.
PsKill Elimina los procesos por nombre o identificador.
PsList Muestra información detallada acerca de procesos en ejecución.
PsLoggedOn Muestra todos los usuarios que han iniciado la sesión de forma local, así como todos los usuarios de recursos compartidos remotos.
PsLogList Vuelca los registros de eventos de Windows.
PsPasswd Cambia las contraseñas de cuentas de usuario.
PsService Consulta y controla los servicios de Windows.
PsShutdown Apaga, reinicia o suspende un equipo, o lo coloca en modo de hibernación.
PsSuspend Suspende procesos en ejecución.

Ahora, es posible que note que parte de esta funcionalidad (sobre todo PsLogList) se podría conseguir a través de Windows Management Instrumentation (WMI) y algunas secuencias de comandos complejas. Sin embargo, la clave de la serie PsTools es que cada utilidad se diseñó para llevar a cabo una tarea particular de forma muy simple.

Voy a guiarle por todas las herramientas y le daré ejemplos sencillos de por qué y cómo podría utilizarlas. Pero primero, ofreceré una breve introducción acerca de cómo funcionan las herramientas y qué tipo de requisitos previos debe cumplir para que funcionen.

¿Cómo funcionan las herramientas?

Todas las herramientas suelen funcionar de la misma manera. En el sistema de host, inicie la PsTool deseada. Aunque muchas se pueden ejecutar de forma local, comprobará que estas herramientas suelen ofrecer su mayor utilidad al ejecutarse en un sistema remoto o en varios sistemas a la vez. PsExec es una excepción específica que viene al caso, como podrá ver en el ejemplo que aparece a continuación. Mediante el argumento de línea de comandos que proporciona, la utilidad se copia en el recurso compartido administrativo del sistema remoto, que es el mismo que %SystemRoot% (directorio de Windows) en el sistema remoto.

Una vez copiada en el directorio remoto, la aplicación se inicia e instala un servicio de Windows. Este servicio de Windows realiza la tarea que haya solicitado, con las credenciales que proporcionó en el momento del inicio. Si la herramienta específica requiere una interfaz de usuario final en el sistema cliente, este servicio inicia un binario adicional en el contexto de usuario. Recuerde que los servicios no pueden iniciar interfaces de usuario interactivas y directas. El servicio comunica la información necesaria a la consola que lo haya iniciado. Y, por último, el servicio se desinstala solo.

Como puede ver, las herramientas son eficaces e independientes. Aunque implican múltiples binarios y procesos, el usuario no tiene que preocuparse: sólo tiene que ejecutar la herramienta deseada y funcionará.

Para utilizar las herramientas, debe cumplir los requisitos previos siguientes: Windows NT®, Windows 2000, Windows XP o Windows Server® 2003 (es compatible con las versiones x86 o x64 de Windows, aunque no con las versiones de Itanium), el recurso compartido de red administrativo predeterminado y habilitado en el sistema remoto en el que se ejecutan las herramientas (admin$), y los puertos del recurso compartido de impresoras y archivos del sistema remoto (tanto si utiliza el Firewall de Windows, el Servidor de seguridad de conexión a Internet o algún otro producto similar).

PsExec

Probablemente PsExec sea mi herramienta favorita entre todas (y, probablemente, no por la razón que cabría imaginar). Durante la mayor parte de un período de dos años, no he ejecutado mis sistemas como administrador, sino como usuario. Tengo una breve secuencia de comandos denominada run.vbs que utilizo para ejecutar mis aplicaciones como Administrador local (se pueden ejecutar igual de fácil como cualquier usuario). En la figura 2 se muestra el contenido de la secuencia de comandos (que también está disponible en el sitio TechNet Magazine en technetmagazine.com/code07.aspx). La secuencia de comandos da por supuesto que PsTools se encuentra en la variable de sistema de la ruta de acceso.

Figure 2 Run.vbs

SET WshShell = WScript.CreateObject("WScript.Shell")
SET WshSysEnv = WshShell.Environment("SYSTEM")
SET FSO = CreateObject("Scripting.FileSystemObject")
IF WScript.Arguments.Count <> 0 Then
    FOR EACH arg IN WScript.Arguments
        iArgCount = iArgCount + 1
        strCmdArg = (arg)
        strCmdArray = Split(strCmdArg, " ", 2, 1)
        IF iArgCount = 1 THEN
        strExe = strCmdArray(0)
        ELSEIF iArgCount = 2 THEN
        strRun = strCmdArray(0)
        ELSE
        strParams = strParams&" "&strCmdArray(0)
        END IF
    NEXT
END IF
'/t:0A && title ***** Admin ***** 
        strExt = LCase(Right(strExe, 3))

IF strExt <> "exe" AND strExt <> "bat" AND strExt <> "cmd" THEN
WshShell.Run "psexec.exe -d -i -e -u COMPUTERNAME\USER -p PASSWORD  cmd /c start "&strExe&"
    "&strRun&" "&strParams, 0, FALSE
ELSE
WshShell.Run "psexec.exe -d -i -e -u COMPUTERNAME\USER -p PASSWORD "&strExe&" "&strRun&"
    "&strParams, 0, FALSE
END IF

    SET WshShell = NOTHING
    SET WshSysEnv = NOTHING
    SET FSO = NOTHING

Esta secuencia de comandos sencilla es un ejemplo de uso de PsExec con la funcionalidad que Mark agregó cuando trabajábamos en los productos de administración de protección en Winternals: la capacidad para un usuario limitado de ofrecer credenciales con más privilegios para iniciar PsExec de forma local. El uso más común de PsExec, por supuesto, es ejecutarla de forma remota, por ejemplo, para ejecutar una utilidad que no ofrece su propio marco de automatización, de secuencias de comandos o de capacidad remota. Algunas características clave de PsExec incluyen la posibilidad de copiar un binario en sistemas remotos para que se ejecute y la capacidad de dictar la afinidad de procesadores. Otra característica práctica de PsExec es la capacidad de redactar su secuencia de comandos en muchos equipos simultáneamente mediante un archivo de secuencia de comandos.

A continuación incluimos el uso simplificado de PsExec:

PsExec \\computer -u username -p password command

Puede ampliarlo mediante los conmutadores que se muestran en la figura 3.

Figure 3 Conmutadores de PsExec

Conmutador Descripción
-a Especifica la afinidad de procesadores.
-c Indica si la aplicación se debe copiar en el sistema remoto.
-d Especifica que no se espere a que acabe el proceso antes de salir (no esperará un mensaje de éxito o de error).
-e La carga se realiza mediante el perfil de la cuenta especificada.
-f Copia la aplicación aunque exista en el sistema remoto. Garantiza que está ejecutando la versión actual (o una específica).
-i Ejecuta la aplicación interactivamente en el sistema remoto (necesario si desea que un usuario final vea cualquier interfaz de usuario de la aplicación).
-l Ejecuta la aplicación como usuario limitado. Elimina el token del grupo de administradores y recorta los privilegios de procesos al nivel en que estarían para un miembro del grupo de usuarios. Práctico para ejecutar aplicaciones de alto riesgo de cara a Internet con privilegios mínimos.
-n Especifica el tiempo de espera necesario antes de que se produzca un error en la conexión con los equipos remotos.
-priority Ejecuta el proceso con la prioridad especificada. Es decir, especifica cómo debe definir Windows la prioridad de proceso para una tarea determinada (-low, -belownormal, -abovenormal, -high o -realtime).
-s Ejecuta el proceso con la cuenta del sistema (práctico para ejecutar Regedit y tener acceso a las claves del Registro con privilegios).
-v Copia la aplicación sólo si la que se está copiando es más reciente.
-x Muestra la interfaz de usuario en el escritorio seguro de Winlogon. Sólo funciona en el sistema local.
@file Ejecuta el comando en todos los equipos especificados en el archivo de texto.

PsFile

PsFile es una herramienta más especializada que PsExec. Específicamente, se utiliza para comprobar qué archivos están abiertos, y por quién, en el sistema remoto. Esto puede ser útil si quiere realizar un seguimiento de los archivos que están abiertos antes de reiniciar un servidor. Si necesita averiguar qué usuario ha bloqueado el archivo, de forma que impide la edición o la eliminación, puede enviar una notificación de forma manual o cerrar el archivo mediante PsFile. El uso de PsFile se incluye a continuación:

PsFile \\computer -u username -p password 

Esto devuelve simplemente una lista de los controladores de archivos abiertos en el sistema remoto. Más allá del uso estándar, también puede agregar un parámetro de identificación a la instrucción, y especificar el nombre del archivo acerca del que desea encontrar información o que desea cerrar. También puede incluir el conmutador -c, que cierra el archivo que ha identificado con el parámetro de identificación.

PsGetSid

PsGetSid también es una herramienta muy especializada. Le indicará el identificador de seguridad (SID) de un equipo, un usuario o un grupo. Esto puede ser útil si desea asegurarse de que los sistemas de su dominio no tengan SID duplicados o si desea comprobar los SID de todos los usuarios o los grupos de un sistema. El uso de PsGetSid es del siguiente modo:

PsGetSid \\computer -u username -p password account

Fíjese que la cuenta puede especificar un usuario, un equipo o un grupo. Si bien la sintaxis de PSGetSid es sencilla, también hay un par de parámetros adicionales disponibles. El parámetro SID especifica la cuenta (el grupo o el equipo) con un SID determinado, y @file ejecuta el comando en todos los equipos enumerados en el archivo de texto especificado.

PsInfo

PsInfo se usa para ofrecer información detallada del sistema. Obviamente, esto resulta particularmente útil cuando la secuencia de comandos se aplica a múltiples sistemas remotos, con el envío del resultado a un archivo (por ejemplo, un archivo de Excel ® y un archivo CSV compatible con bases de datos). Tenga en cuenta que esta utilidad se basa en un importante concepto que es diferente en la mayor parte del resto de las herramientas: si no proporciona un nombre de equipo, PsInfo intentará, de forma predeterminada, consultar todos los equipos del dominio. El uso de PsInfo es del siguiente modo:

PsInfo  \\computer -u username -p password 

Aunque la sintaxis es sencilla, hay disponibles parámetros y conmutadores adicionales, como se muestra en la figura 4.

Figure 4 Conmutadores de PsInfo

Conmutador Descripción
-h Muestra todas las actualizaciones de Windows.
-s Muestra todas las aplicaciones instaladas en el sistema.
-d Muestra la información de disco/volumen del sistema.
-c Ofrece los resultados en formato CSV.
-t Especifica otro delimitador para el archivo CSV distinto al valor predeterminado de \t.
Filter Muestra sólo los datos que coinciden con un filtro determinado.
@file Ejecuta el comando en todos los equipos incluidos en el archivo de texto especificado.

PsKill

PsKill es una gran utilidad para terminar procesos en un sistema local o remoto. Su uso es muy sencillo, y permite eliminar rápidamente un proceso junto con todos sus procesos secundarios. El uso de PsKill se parece bastante a las otras herramientas que he analizado:

PsKill -t \\computer -u username -p password process id | process name

Tenga en cuenta que puede especificar el identificador o el nombre del proceso que desea eliminar.

PsList

No utilizo PsList mucho porque soy más bien un fan de Process Explorer (consulte microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx para obtener más información). Sin embargo, dado que no existe una versión remota de Process Explorer, PsList pasa a ser un símil razonable de algunas de las funcionalidades clave que proporciona Process Explorer. De hecho, PsList es una lista remota de uno o más procesos que se ejecutan en un sistema remoto.

El uso de PsList es bastante sencillo:

PsList \\computer -u username -p password account

Al igual que ocurre con las otras herramientas, el parámetro de cuenta puede especificar un usuario, un equipo o un grupo. Los parámetros adicionales se muestran en la figura 5.

Figure 5 Conmutadores de PsList

Conmutador Descripción
-t Muestra información al nivel de subproceso.
-m Ofrece información de memoria detallada de cada proceso.
-x Muestra la información de procesos, memoria y subprocesos.
-t Muestra la información en forma de árbol de procesos (como la vista de árbol de Process Explorer).
-s [n] Se ejecuta en modo de administrador de tareas durante un número determinado de segundos. Esto permite una visualización en tiempo real (relativamente) de la información de procesos remotos.
-r [n] Especifica la frecuencia (en segundos) de actualización en modo de administrador de tareas.
name Muestra información acerca de los procesos que empiezan con el nombre especificado.
-e Coincide con el nombre de proceso exactamente.
pid Muestra información acerca de un proceso específico.

PsList es eficaz y, al mismo tiempo, fácil de utilizar (y, sin necesidad de usar el Escritorio remoto, permite ver los procesos remotos con gran detalle). Con esta información, podría seguir adelante con PsKill o PsSuspend si, por ejemplo, tuviera un proceso que deba contenerse.

PsLoggedOn

La premisa subyacente de PsLoggedOn no necesita explicación. La utilidad muestra quién ha iniciado sesión en el sistema. Puede tratarse de inicios de sesión locales (interactivos) o de recurso compartido de red. De forma parecida a PsFile, esta capacidad puede ser útil para determinar quién está usando un servidor en el que puede que tenga que realizar cierto mantenimiento. Su uso es muy sencillo:

PsLoggedOn \\computer

PsLoggedOn tiene sólo dos parámetros opcionales: -l sólo muestra los inicios de sesión locales (no los de red) y -x excluye la hora de inicio de sesión.

Aunque se trata de una herramienta básica, PsLoggedOn permite consultar fácilmente información que, por lo general, tendría que buscar en un par de ubicaciones de Windows.

PsLogList

PsLogList es una de las utilidades más prácticas que sirve para volcar los registros de eventos de Windows en un formato de texto que, a continuación, pueden utilizar los lectores de registro, las bases de datos o cualquier utilidad que desee. La ventaja principal es que convierte las entradas de registros de eventos de su formato binario en algo que se puede transformar o automatizar fácilmente. Por supuesto, en Windows Vista™, los registros de eventos están disponibles originalmente como XML, aunque eso es otra historia.

El uso de PsLogList es del siguiente modo:

PsLogList \\computer -u username -p password

Hay varios conmutadores y parámetros adicionales disponibles, como se muestra en la figura 6.

Figure 6 Conmutadores de PsLogList

Conmutador Descripción
-a Vuelca sólo los eventos posteriores a la fecha especificada.
-b Vuelca sólo los eventos anteriores a la fecha especificada.
-c Limpia el registro de eventos permanentemente después de volcar los resultados deseados.
-d Muestra únicamente la información de un número especificado de días.
-e Excluye los eventos con el identificador de evento especificado (se pueden especificar hasta 10).
-f Filtra tipos de eventos (advertencia, error, etcétera).
-g Exporta el registro de eventos como archivo EVT. Requiere el conmutador -c.
-h Muestra únicamente la información de un número especificado de horas.
-l Vuelca información desde el archivo EVT especificado.
-m Muestra únicamente la información de un número especificado de minutos.
-n Muestra únicamente el número especificado de eventos más recientes.
-o Muestra únicamente los eventos de un origen determinado (o -SRService en el caso del servicio de restauración del sistema de Windows, por ejemplo).
-q Excluye los eventos de un origen determinado (al contrario que -o).
-r Invierte el orden: vuelca los eventos de registros de menos reciente a más reciente.
-s Enumera los registros de cada línea en campos delimitados.
-t Especifica un delimitador distinto de la coma para el resultado de de -s.
-w Espera a que se rellenen los eventos nuevos y los vuelca en tiempo real. Esto sólo se aplica en el sistema local.
-x Vuelca los datos extendidos de los registros de eventos.
eventlog Especifica cuál es el registro de evento que se va a volcar. System es el valor predeterminado.
@file Ejecuta el comando en todos los equipos especificados en el archivo de texto.

Los registros de eventos de Windows pueden ser una herramienta de diagnóstico increíblemente eficaz, pero el truco es obtener los datos hasta el punto de poder manipularlos o consolidarlos. PsLogList realiza este truco.

PsPasswd

PsPasswd es una utilidad sencilla, aunque eficaz, diseñada con parte de la misma funcionalidad que Net.exe, pero que incluye además el aspecto remoto y automático.

PsPasswd  \\computer -u username -p password Username Newpassword

Puede especificar un equipo, ningún equipo (el sistema local) o, si especifica el equipo como \\*, ejecutar la utilidad en todos los equipos del dominio actual. PsPasswd tiene sólo un parámetro adicional disponible: @file ejecuta el comando en todos los equipos especificados en el archivo de texto. De nuevo, se trata de una utilidad muy básica que proporciona una eficacia enorme con varios sistemas.

PsService

PsService permite ver y editar la información del Administrador de control de servicios (SCM) en uno o más sistemas de la red, e incluso puede buscar un nombre de servicio determinado en los sistemas de su red.

PsService \\computer -u username -p password command options

Al ejecutar PsService, el comando representa uno de los comandos enumerados en la figura 7, y las opciones especifican el atributo que se va a aplicar a un comando dado. Si no se proporciona ningún conmutador de comando adicional, PsService ofrecerá un volcado completo de información de SCM.

Figure 7 Comandos de PsService

Comando Descripción
query Consulta un servicio determinado.
config Consulta la información de configuración de un servicio determinado.
setconfig Establece la información de configuración de un servicio determinado.
start Inicia un servicio.
stop Detiene un servicio.
restart Reinicia (detiene e inicia) un servicio.
pause Interrumpe un servicio.
cont Reanuda un servicio interrumpido.
depend Muestra qué servicios dependen del servicio determinado.
find Busca en la red una sesión determinada del servicio.
security Ofrece información de seguridad de un servicio determinado.

De este modo, puede pensar en PsService como una versión de línea de comandos eficaz y remota de Services.msc, pero una que, además, permite buscar servicios (tal vez peligrosos) en toda la red y definir información de configuración.

PsShutdown

PsShutdown es otra de mis herramientas favoritas. Aunque algunos podrían decir que Microsoft ya incluye una herramienta que se hace cargo de esta tarea (shutdown.exe), realmente no es lo mismo. La diferencia clave está en la eficacia de PsShutdown: a saber, poder apagar o reiniciar un sistema remoto. Además, tiene la capacidad de poner un sistema en modo de espera o hibernación (no sólo en modo de apagado o de reinicio), bloquear un sistema y reiniciar un equipo después de mostrar un mensaje al usuario durante un período determinado de tiempo.

PsShutdown \\computer -u username -p password

También hay varios parámetros adicionales disponibles para su uso con PsShutdown, como se muestra en la figura 8.

Figure 8 Conmutadores de PsShutdown

Conmutador Descripción
-a Anula un proceso de apagado en curso iniciado por PsShutdown.
-c Permite que un usuario interactivo anule el proceso de apagado.
-d Suspende el equipo (modo de espera).
-e Códigos de motivo del proceso de apagado. Recomiendo la consulta del sitio web de Microsoft para obtener ayuda con estos conmutadores, ya que su uso puede generar problemas con PsShutdown y la utilidad shutdown.exe integrada. Consulte msdn2.microsoft.com/en-us/library/aa376885.aspx (en inglés) para obtener más información.
-f Fuerza la finalización de todas las aplicaciones.
-h Coloca el equipo en modo de hibernación.
-k Desconecta el equipo (lo reinicia si no se admite la desconexión).
-l Bloquea el equipo.
-m Especifica el mensaje que se mostrará a los usuarios interactivos.
-n Especifica el tiempo de espera necesario antes de que se produzca un error en la conexión con los equipos remotos.
-o Cierra la sesión del usuario de la consola.
-r Reinicia el equipo.
-s Apaga el equipo, pero no lo desconecta.
-t El tiempo que debe transcurrir antes de ejecutar el comando de apagado o el tiempo concreto para la desconexión.
-v Muestra el mensaje para los usuarios hasta que se produce el apagado.
@file Ejecuta el comando en todos los equipos especificados en el archivo de texto.

Puede comprobar que PsShutdown es una utilidad de control de potencia del sistema muy eficaz y altamente configurable y que, además, es relativamente fácil de usar.

PsSuspend

PsSuspend es una práctica utilidad si desea poner un proceso invasor bajo control de forma temporal o si simplemente desea reducir temporalmente un proceso de uso de CPU elevado sin perder ningún dato o contexto de aplicación.

PsSuspend \\computer -u username -p password process ID

Puede obtener el identificador de proceso con PsList. Una vez suspendido un proceso, puede utilizar el conmutador -r para reanudarlo. Tenga en cuenta que el concepto de suspensión y reanudación de un proceso lo implementa también Process Explorer, aunque sólo de forma local. Obviamente, PsSuspend puede suspender y reanudar los procesos de forma remota y local, lo que supera la implementación integrada en Process Explorer.

Conclusión

Creo que la serie PsTools es un conjunto de utilidades de valor incalculable. Junto con el resto de utilidades de Sysinternals (a saber, Regmon, Filemon, Process Explorer y, ahora, Process Monitor), PsTools se encuentra entre los primeros programas que pongo en mi ruta de acceso al reinstalar Windows en cualquiera de mis sistemas. Espero que esta columna le familiarice con la serie PsTools si no la conocía de antes o, en este caso, espero que haya ampliado sus conocimientos sobre estas herramientas. Mi agradecimiento especial a Mark Russinovich, por supuesto, por ofrecer estas herramientas de forma gratuita todos estos años y ayudarme con el contenido de esta columna.

Wes Miller es Director de desarrollo de Pluck (www.pluck.com) en Austin, Texas. Anteriormente, Wes trabajó en Winternals Software en Austin, y en Microsoft como administrador de programas y administrador de producto para Windows. Si lo desea, puede ponerse en contacto con Wes en la dirección technet@getwired.com.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.