Cómo verificar rápidamente las versiones de software instaladas
Hay situaciones en las que debe verificar si usted o sus usuarios tienen instalado cierto software y cuál es su versión. Es posible que desee comprobar si el software está actualizado o si el software implementado por GPO se ha instalado para un usuario determinado. Te mostraré varios métodos que puedes usar para comprobar eso con PowerShell.
Navegación rápida:
- Comprobar la lista de software instalado localmente
- Get-WmiObject
- Consulta de registro
- Registro de eventos
- Comprobar la lista de software instalado de forma remota
- Get-WmiObject
- Consulta de registro
- Registro de eventos
- Compruebe si el software implementado con GPO se aplicó correctamente
Compruebe lo que está instalado en su computadora
Para comprobar qué software está instalado, siempre puede usar Programas y Funciones en su Panel de control o explorar todas las particiones de disco en busca de una aplicación específica. Incluso puede intentar encontrar una aplicación en el menú Inicio para iniciarla y buscar su número de versión manualmente. Sin embargo, el problema con esos métodos es que están lo más lejos posible de ser «rápidos y automáticos». La comprobación de las versiones de software instaladas mediante PowerShell le permite recopilar los datos que necesita mucho más rápido.
Obtener la lista de software instalado con Get-WmiObject
El primer método es tan simple como pegar una consulta simple:
Get-WmiObject -Class Win32_Product
También puede filtrar fácilmente los datos para encontrar aplicaciones específicas de un solo proveedor, junto con sus versiones, por ejemplo:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
A pesar de ser muy fácil, este método tiene un gran inconveniente: se necesita bastante tiempo para obtener los resultados.
Registro de consultas para software instalado
Otro método para obtener una lista de software instalado es consultar el registro. El siguiente script corto devuelve la lista de aplicaciones junto con sus versiones:
$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"foreach($obj in $InstalledSoftware){write-host $obj.GetValue('DisplayName') -NoNewline; write-host " - " -NoNewline; write-host $obj.GetValue('DisplayVersion')}
Ahora, echa un vistazo al elemento HKLM en negrita de arriba. Esto significa que la lista de software devuelto por el script es todo el software instalado en la máquina LM – localmachine. Sin embargo, también se pueden instalar aplicaciones por usuario. Para devolver una lista de aplicaciones del usuario registrado actualmente, cambie HKLM a HKCU (CU significa «usuario actual»):
$InstalledSoftware = Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
foreach($obj in $InstalledSoftware){write-host $obj.GetValue('DisplayName') -NoNewline; write-host " - " -NoNewline; write-host $obj.GetValue('DisplayVersion')}
Obtener la lista de software instalado recientemente del Registro de eventos
Si desea comprobar solo el software instalado recientemente, puede utilizar el siguiente cmdlete para buscar en el Registro de eventos.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Este método de encontrar el software instalado es más fiable para los elementos añadidos recientemente porque, de forma predeterminada, los registros de eventos están configurados para sobrescribir los registros más antiguos(registro circular).
Obtenga más información sobre el uso de PowerShell para comprobar los registros de eventos de Windows y los resultados de filtrado
Obtenga una lista de software instalado de forma remota
Cada uno de los métodos mencionados anteriormente también se puede utilizar para comprobar el software instalado en otras máquinas de la misma red. Si crea una lista de todos los nombres de equipo de la red, puede utilizar los métodos que se indican a continuación dentro de un bucle Foreach para devolver resultados desde más de un solo PC remoto.
pc pcname en cada script representa el nombre del equipo remoto en el que desea obtener una lista del software instalado y sus versiones.
Get installed softwarelist con el comando Get-WmiObject remoto
El siguiente cmdlet es, de nuevo, el más fácil del grupo, pero puede tardar algún tiempo en completarse:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
donde$pcname es el nombre del equipo que desea consultar.
Comprobar el software instalado con consulta de registro remoto
Las consultas de registro remoto son un poco más complicadas y requieren que se ejecute el servicio de registro remoto. Una consulta de ejemplo es la siguiente:
$list=@()$InstalledSoftwareKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"$InstalledSoftware=::OpenRemoteBaseKey('LocalMachine',$pcname)$RegistryKey=$InstalledSoftware.OpenSubKey($InstalledSoftwareKey) $SubKeys=$RegistryKey.GetSubKeyNames()Foreach ($key in $SubKeys){$thisKey=$InstalledSoftwareKey+"\"+$key$thisSubKey=$InstalledSoftware.OpenSubKey($thisKey)$obj = New-Object PSObject$obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $pcname$obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName"))$obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion"))$list += $obj}$list | where { $_.DisplayName } | select ComputerName, DisplayName, DisplayVersion | FT
Comprobar la lista de software instalado recientemente desde el Registro de eventos de forma remota
Comprobar el registro de eventos de auser de forma remota requiere agregar un único atributo (- ComputerName) al cmdlet utilizado anteriormente:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Comprobar si un software implementado con GPO se ha aplicado correctamente
Si ha aplicado una determinada versión de software a través de GPO, puede comprobar fácilmente si este GPO se ha aplicado correctamente a un usuario o no. Todo lo que necesita es la herramienta GPResult y los nombres de la computadora y el usuario objetivo:
gpresult /s "PCNAME" /USER "Username" /h "Target location of theHTML report"
Luego, busque su GPOname y verifique si aparece en GPO Aplicados o GPO denegados.El GPO de ejemplo que se muestra a continuación se encuentra en el grupo de GPO aplicados.