Si eres un administrador de TI, es muy probable que hayas tenido que instalar software para otros. La administración de puntos finales es un gran negocio en estos días y el mantenimiento del software en cientos o miles de computadoras es común en las grandes organizaciones.
¿Qué pasa si estás en una organización con poco o ningún presupuesto? ¿Tal vez usted o alguien de tu 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 a la vez puede ser beneficioso.
El lenguaje de secuencias de comandos de PowerShell es un lenguaje poderoso y flexible que parece manejar casi cualquier cosa en un entorno de Windows, ¡Trabajar con software en computadoras remotas es pan comido!
En este artículo, aprenderás cómo usar PowerShell para crear informes de software instalado. Aunque PowerShell también es capaz de instalar software, se centrará en consultar el software que se ha instalado por otros medios.
Dónde está registrado el software
El término “software” es un término vago, especialmente en Windows. Cuando se instala un paquete de software, depende totalmente del desarrollador del software determinar qué cambios se producen en la computadora del usuario.
Los instaladores de software copian archivos, crean claves de registro, agregan instancias WMI y más. La clave para crear un informe de inventario de software preciso, independientemente del método, es primero comprender qué buscar.
Aunque el software instalado está registrado en WMI, una forma más confiable de encontrar 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 en una de estas claves principales.
- HKEY_LOCAL_MACHINE (ruta de 32 bits)
- HKEY_LOCAL_MACHINE6432Nodo (ruta de 64 bits)
- HKEY_CURRENT_USER (para cada perfil de usuario)
Cada clave de registro secundaria en estas claves primarias normalmente recibe el nombre del identificador único global (GUID) del software. Dentro de esa clave, puede encontrar valores de registro para el título del software, la versión y más.
Requisitos de la PC remota
Para usar el código cubierto en este artículo, asumo que tiene PowerShell Remoting habilitado y disponible en tus computadoras remotas. Puedes probar PowerShell Remoting intentando ejecutar un comando simple como
Invoke-Command -ComputerName REMOTEPCNAME -ScriptBlock {1}
. Si eso falla, el resto de la información cubierta en este artículo tampoco funcionará.
Uso del módulo de la comunidad de PSSoftware
Para evitar recrear la rueda y crear su propia herramienta de PowerShell, usemos una existente.
Primero, en una consola administrativa de PowerShell, descarga e instale el módulo PSSoftware PowerShell desde la Galería de PowerShell ejecutando
Install-Module PSSoftware
.
Una vez que hayas instalado el módulo, inspecciona los comandos disponibles ejecutando
Get-Command -Module PSSoftware -Noun Software
. Verás algunos comandos como
Get-InstalledSoftware
,
Install-Software
y
Remove-Software
.
Esos comandos son las funciones principales para administrar el software. En este artículo, veremos la función
Get-InstalledSoftware
.
Prueba el comando
Get-InstalledSoftware
ejecutándolo primero localmente sin parámetros. Inmediatamente verás pasar muchos paquetes de software diferentes.
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--
Puedes limitar esa salida a solo el título y la versión mediante el
Select-Object
cmdlet.
PS51> Get-InstalledSoftware | Select-Object -Property Name,Version
Para consultar una computadora remota, usa el parámetro
ComputerName
. Se devolveran los mismos paquetes de software.
Tal vez prefieras no ver todo el software instalado, sino solo el software que coincida con un título específico. Puedes filtrar esta información mediante 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 final
Una vez que comprendas dónde se almacena el software instalado y puedas acceder a él con PowerShell, el mundo estará bajo tus manos. Desde ahí, puedes expandir rápidamente el código a varias computadoras, buscar numerosos paquetes y mucho más.
¡Usar los módulos gratuitos de PowerShell de la comunidad es una excelente manera de crear informes de inventarios de software a bajo costo!