Como encontrar o software instalado em sistemas Windows remotos com PowerShell

Conteúdo

Logotipo de Powershell

Se você é um administrador de TI, é muito provável que você tenha que instalar software para outros. A gestão de terminais é um grande negócio hoje em dia, e a manutenção de software em centenas ou centenas de computadores é comum em grandes instituições. Apesar disto, grande negócio geralmente significa muito dinheiro.

E se você estiver em uma organização com pouco ou nenhum orçamento? Talvez você ou alguém de sua equipe tenha começado a usar o PowerShell para automatizar várias tarefas? Nesse caso, Usar o PowerShell para gerenciar software em muitos endpoints ao mesmo tempo pode ser benéfico.

A PowerShell Scripting Language é uma linguagem flexível e poderosa que parece lidar com quase tudo em um ambiente Windows. Trabalhar com software em computadores remotos é moleza!!

Neste post, você aprenderá como usar o PowerShell para criar relatórios sobre o software instalado. Mesmo que o PowerShell também seja capaz de instalar software, foco na consultoria de software que foi instalado por outros meios.

Onde o software está registrado

O fim “Programas” é uma definição vaga, especialmente no Windows. Quando um pacote de software é instalado, É inteiramente responsabilidade do desenvolvedor de software determinar quais mudanças no computador do usuário. Instaladores de software copiam arquivos, criar chaves de registro, adicione instâncias WMI e mais. A chave para a criação de um relatório de inventário de software preciso, independentemente do método, é entender primeiro o que procurar.

Mesmo que o software instalado seja registrado no WMI, uma maneira mais confiável de encontrar essas informações é usar o registro.

Cada versão moderna do Windows armazena as informações do software instalado nas três chaves de registro abaixo. Dependendo de como o software foi instalado, é sempre armazenado como uma chave de registro em uma dessas chaves primárias.

  • HKEY_LOCAL_MACHINE (rota de 32 bits)
  • HKEY_LOCAL_MACHINE6432Node (rota de 64 bits)
  • HKEY_CURRENT_USER (para cada perfil de usuário)

Cada chave de registro secundária nessas chaves primárias geralmente é nomeada após o identificador exclusivo global (GUID) do software. Dentro dessa chave, pode encontrar valores de registro para o título do software, a versão e mais.

Requisitos de PC remoto

Para usar o código abordado nesta postagem, Presumo que você tenha o PowerShell Remoting habilitado e disponível em seus computadores remotos. Você pode testar o PowerShell Remoting tentando executar um comando simples como Invoke-Command -ComputerName REMOTEPCNAME -ScriptBlock {1}. Se isso falhar, o resto das informações abordadas nesta postagem também não funcionarão.

Para evitar recriar a roda e criar sua própria ferramenta PowerShell, vamos usar um existente. Há algum tempo, criei um módulo PowerShell chamado PSSoftware que resolve bem esse problema.

Primeiro, em um console administrativo do PowerShell, baixe e instale o módulo PSSoftware PowerShell da Galeria do PowerShell executando Install-Module PSSoftware.

Depois de instalar o módulo, inspecione os comandos disponíveis executando Get-Command -Module PSSoftware -Noun Software. Você verá alguns comandos como Get-InstalledSoftware, Install-Software ,e Remove-Software. Esses comandos são as funções principais para gerenciar o software. Neste post, Eu foco no Get-InstalledSoftware Função.

Tente o Get-InstalledSoftware comando executando-o localmente primeiro sem parâmetros. Você verá imediatamente muitos pacotes de software diferentes voando.

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--

Você pode limitar essa saída apenas ao título e à versão usando o Select-Object cmdlet.

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

Para consultar um computador remoto, usar el ComputerName parâmetro. Os mesmos pacotes de software são devolvidos.

Você pode preferir não ver todo o software instalado, mas apenas software que corresponde a um título específico. Você pode filtrar essas informações usando o Where-Object cmdlet. O exemplo a seguir encontra todos os softwares que começam com SQL no computador remoto.

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

Resumo

Depois de entender onde o software instalado está armazenado e pode acessá-lo com o PowerShell, o mundo é sua ostra. Daqui, você pode expandir rapidamente este código para vários computadores, à procura de vários pacotes e muito mais.

Usar módulos do PowerShell da comunidade gratuita é uma ótima maneira de criar relatórios de inventor de software de baixo custo.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.