Cómo encontrar software instalado en sistemas Windows remotos con PowerShell

Contenidos

Logotipo de Powershell

Si es un administrador de TI, es muy probable que haya tenido que instalar software para otros. La administración de terminales es un gran negocio en estos días, y el mantenimiento del software en cientos o cientos de computadoras es común en las grandes instituciones. A pesar de esto, los grandes negocios suelen significar mucho dinero.

¿Qué pasa si estás en una organización con poco o ningún presupuesto? ¿Tal vez usted o alguien de su equipo se ha metido en el uso de PowerShell para automatizar varias tareas? En ese caso, el uso de PowerShell para administrar el software en muchos puntos finales al mismo tiempo puede resultar beneficioso.

El lenguaje de secuencias de comandos de PowerShell es un potente lenguaje flexible que parece manejar casi cualquier cosa en un entorno Windows. ¡Trabajar con software en computadoras remotas es pan comido!

En este post, aprenderá cómo puede utilizar PowerShell para crear informes de software instalado. Aún cuando PowerShell además es capaz de instalar software, se centrará en consultar el software que se haya instalado por otros medios.

Dónde está registrado el software

El término «software» es una definición vago, especialmente en Windows. Cuando se instala un paquete de software, depende totalmente del desarrollador del software determinar qué cambios en la computadora del usuario. Los instaladores de software copian archivos, crean claves de registro, agregan instancias de WMI y más. La clave para crear un reporte de inventario de software preciso, independientemente del método, es comprender primero qué buscar.

Aún cuando el software instalado está registrado en WMI, una forma más confiable de hallar esta información es usar el registro.

Cada versión moderna de Windows almacena la información del software instalado en las tres claves de registro a continuación. Dependiendo de cómo se instaló el software, siempre se almacena como una clave de registro bajo una de estas claves principales.

  • HKEY_LOCAL_MACHINE (ruta de 32 bits)
  • HKEY_LOCAL_MACHINE6432Node (ruta de 64 bits)
  • HKEY_CURRENT_USER (para cada perfil de usuario)

Cada clave de registro secundaria en estas claves principales de forma general recibe el nombre del identificador único global (GUID) del software. Dentro de esa clave, puede hallar valores de registro para el título del software, la versión y más.

Requerimientos de Remote PC

Para utilizar el código cubierto en este post, supongo que tiene PowerShell Remoting habilitado y disponible en sus computadoras remotas. Puede probar PowerShell Remoting intentando ejecutar un comando simple como Invoke-Command -ComputerName REMOTEPCNAME -ScriptBlock {1}. Si esto falla, el resto de la información cubierta en este post tampoco funcionará.

Para evitar volver a crear la rueda y crear su propia herramienta PowerShell, usemos una existente. Hace un tiempo creé un módulo de PowerShell llamado PSSoftware que resuelve bien este problema.

Primero, en una consola administrativa de PowerShell, descargue e instale el módulo PSSoftware PowerShell de la Galería de PowerShell ejecutando Install-Module PSSoftware.

Una vez que tenga el módulo instalado, inspeccione los comandos disponibles ejecutando Get-Command -Module PSSoftware -Noun Software. Verás algunos comandos como Get-InstalledSoftware, Install-Software ,y Remove-Software. Estos comandos son las funciones principales para administrar el software. En este post, me centro en el Get-InstalledSoftware función.

Prueba el Get-InstalledSoftware comando ejecutándolo primero localmente sin parámetros. Inmediatamente verá muchos paquetes de software diferentes volando.

PS51> Get-InstalledSoftware

ModifyPath          : MsiExec.exe /I{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
VersionMajor        : 14
Version             : 14.0.500.272
sEstimatedSize2     : 732
URLInfoAbout        :
NoRepair            : 1
InstallSource       : C:ProgramDataPackage Cache{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}v14.0.500.272x64
Contact             :
Size                :
InstallLocation     :
VersionMinor        : 0
SystemComponent     : 1
EstimatedSize       : 1464
URLUpdateInfo       :
InstallDate         : 20170716
Comments            :
WindowsInstaller    : 1
HelpLink            : https://go.microsoft.com/fwlink/?LinkId=154582
UninstallString     : MsiExec.exe /I{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
GUID                : {4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
HelpTelephone       :
Readme              : Placeholder for ARP readme in case of no UI
Publisher           : Microsoft Corporation
Language            : 1033
Name                : SQL Server vNext CTP2.0 XEvent
AuthorizedCDFPrefix :
PSComputerName      : MACWINVM
RunspaceId          : da83572b-150b-43b6-923a-14e516a77ba3
--snip--

Puede limitar esa salida a solo el título y la versión usando el Select-Object cmdlet.

PS51> Get-InstalledSoftware | Select-Object -Property Name,Version

Para consultar una computadora remota, use el ComputerName parámetro. Se devuelven los mismos paquetes de software.

Tal vez prefiera no ver todo el software instalado, sino solo el software que coincida con un título específico. Puede filtrar esta información usando el Where-Object cmdlet. El siguiente ejemplo encuentra todo el software que comienza con SQL en la computadora remota.

PS51> Get-InstalledSoftware | Where-Object {$_.Name -like 'SQL*'} | Select-Object -Property Name,Version

Resumen

Una vez que comprenda dónde se almacena el software instalado y pueda ingresar a él con PowerShell, el mundo es su ostra. Desde aquí, puede expandir rápidamente este código a varias computadoras, buscando numerosos paquetes y más.

El uso de módulos de PowerShell comunitarios gratuitos es una magnífica manera de crear informes de inventores de software a bajo costo.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.