Como verificar rapidamente as versões de software instaladas
existem situações em que você precisa verificar se você ou seus usuários têm determinado software instalado, e qual é a sua versão. Você pode querer verificar se o software está atualizado ou se o seu software GPO-implantado foi instalado para um determinado usuário. Vou mostrar-lhe vários métodos que pode usar para verificar isso com PowerShell.
navegação rápida:
- Verifique a lista de software instalado localmente
- Get-WmiObject
- consulta de Registo
- log de Eventos
- Verifique a lista de software instalado remotamente
- Get-WmiObject
- consulta de Registo
- log de Eventos
- Verificar se o GPO implantado o software foi aplicado com sucesso
Verificar o que está instalado onyour computador
Para verificar qual o software está instalado, você sempre pode usar Programas e Recursos no Painel de Controle ou procurar todas as partições do disco em busca de um aplicativo específico. Você pode até mesmo tentar encontrar um aplicativo no menu Iniciar, a fim de lançá-lo e procurar por seu número de versão manualmente. No entanto, o problema com esses métodos é que eles estão tão longe de “rápido e automático” como eles podem ser. Verificar as versões de software instaladas usando PowerShell permite que você reúna dados que você precisa muito mais rápido.
Get installed software list with Get-WmiObject
The firstmethod is as simple as pasting a simple query:
Get-WmiObject -Class Win32_Product
Você também pode facilmente filtrar os dados para encontrar as aplicações a partir de um único fornecedor, juntamente com suas versões, por exemplo:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
Despitebeing muito fácil, este método tem uma grande desvantagem – que demora muito tempo toreturn os resultados.
Query registry forinstalled software
Anothermethod of getting a list of installed software is querying the registry. Thefollowing pequeno script retorna a lista de aplicações em conjunto com suas versões:
$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')}
Agora, pegue aquick olhar para o HKLM elemento em negrito acima. Isso significa que a lista de software retornado pelo script é todo o software instalado no LM – localmachine. No entanto, as aplicações também podem ser instaladas por usuário. Para retornar alist de aplicações do usuário atualmente conectado, altere HKLM HKCU(CU significa “usuário atual”):
$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')}
Obter a lista ofrecently de software instalado a partir do Registo de Eventos
Se você wantto verificar apenas recentemente o software instalado, você pode usar o seguinte cmdletto de pesquisa através do Log de Eventos.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
este método de descobrir que o software instalado é mais fiável para os acréscimos recentes porque, por omissão, os logs de eventos são definidos para substituir os registos mais antigos(registo circular).
Saiba mais sobre a utilização do PowerShell para verificar os Logs de Eventos do Windows e filtragem de resultados
Obter uma lista de installedsoftware remotamente
Cada um dos métodos mencionados acima também pode ser usado para verificar se o software instalado em outras máquinas na mesma rede. Se você criar uma lista de todos os nomes de computador em sua rede, você pode usar os métodos abaixo dentro de um loop Foreach para retornar os resultados de mais de um único PC remoto.
$pcname em cada script significa o nome do computador remoto no qual você deseja obter uma lista de software instalado e suas versões.
instalado softwarelist com controle remoto Get-WmiObject comando
Thefollowing cmdlet é, novamente, o mais fácil no monte, mas pode levar algum tempo tofinish:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
onde$pcname é o nome do computador que você deseja consultar.
Check installed softwarewarewith remote registry query
Remote registry queries are slightly more complicated and require the Remote Registry service to be running. Um exemplo de consulta é o seguinte:
$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
Verifique recentemente installedsoftware lista do Registo de Eventos remotamente
Verificar auser log de eventos do remotamente requer a adição de um único atributo (-ComputerName) tothe cmdlet usado antes:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Verifique se um GPO implantado softwarewas aplicada com sucesso
Se você applieda determinada versão de software via GPO, você pode facilmente verificar se este GPO wassuccessfully aplicadas a um usuário ou não. Tudo o que você precisa é a ferramenta GPResult e nomes do computador e usuário alvo:
gpresult /s "PCNAME" /USER "Username" /h "Target location of theHTML report"
em seguida, procure o seu GPOname e verifique se ele está listado sob GPOs aplicados ou negado GPOs.A amostra de GPO abaixo está no grupo GPOs aplicado.