Come controllare rapidamente le versioni del software installato
Ci sono situazioni in cui è necessario verificare se voi oi vostri utenti hanno determinato software installato, e qual è la sua versione. Si consiglia di verificare se il software è aggiornato o se il software distribuito da GPO è stato installato per un determinato utente. Ti mostrerò diversi metodi che puoi usare per verificarlo con PowerShell.
Navigazione rapida:
- Check elenco del software installato localmente
- Get-WmiObject
- query del Registro di sistema
- registro Eventi
- Check elenco del software installato da remoto
- Get-WmiObject
- query del Registro di sistema
- registro Eventi
- Controllare se l’oggetto criteri di gruppo distribuito il software è stato applicato con successo
Verificare cosa c’è installato suil tuo computer
Per verificare che il software è installato, si può sempre utilizzare Programmi e Funzionalità nel Pannello di Controllo o sfoglia tutte le partizioni del disco alla ricerca di un’app specifica. Puoi anche provare a trovare un’app nel menu Start per lanciarla e cercare manualmente il suo numero di versione. Tuttavia, il problema con questi metodi è che sono lontani dal “rapido e automatico” come possono essere. Controllare le versioni del software installato utilizzando PowerShell consente di raccogliere i dati che avete bisogno molto più veloce.
Ottieni l’elenco dei software installati con Get-WmiObject
Il firstmethod è semplice come incollare una semplice query:
Get-WmiObject -Class Win32_Product
È anche possibile filtrare i dati per la ricerca di specifiche applicazioni da un unico fornitore, insieme con le loro versioni, per esempio:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
Despitebeing molto semplice, questo metodo ha un grande svantaggio – ci vuole un po ‘ toreturn i risultati.
Registro di query per il software installato
Un altro metodo per ottenere un elenco di software installato sta interrogando il registro. Thefollowing short script restituisce l’elenco delle applicazioni insieme alle loro versioni:
$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')}
Ora, prendi aquick guarda l’elemento HKLM in grassetto sopra. Significa che l’elenco ofsoftware restituito dallo script è tutto il software installato sulla LM-localmachine. Tuttavia, le applicazioni possono essere installate anche per utente. Per tornare unelenco di applicazioni dell’utente attualmente connesso, modificare HKLM HKCU(CU sta per “utente corrente”):
$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')}
Ottenere l’elenco ofrecently installato il software dal Registro Eventi
Se desiderato controllare solo recentemente installato il software, è possibile utilizzare il seguente cmdletto di ricerca attraverso il Registro Eventi.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Questo metodo di individuazione del software installato è più affidabile per gli elementi aggiunti di recente perché, per impostazione predefinita, i registri eventi sono impostati per sovrascrivere i record più vecchi(registrazione circolare).
Ulteriori informazioni sull’uso di PowerShell per controllare i log degli eventi di Windows e i risultati del filtraggio
Ottenere un elenco di installedsoftware da remoto
Ciascuno dei metodi sopra menzionati può essere utilizzato anche per controllare il software installato su altre macchine nella stessa rete. Se si crea un elenco di tutti i nomi di computer nella rete, è possibile utilizzare i metodi seguenti all’interno di un ciclo Foreach per restituire i risultati da più di un singolo PC remoto.
pc pcname in ogni script sta per il nome del computer remoto su cui si desidera ottenere un elenco di software installato e le relative versioni.
Get installed softwarelist with remote Get-WmiObject command
Il seguente cmdlet è, ancora una volta, il più semplice del gruppo, ma può richiedere del tempo per finire:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
dove pc pcname è il nome del computer che si desidera interrogare.
Verifica software installatocon query di registro remota
Le query di registro remote sono leggermente più complicate e richiedono l’esecuzione del servizio di registro remoto. Un esempio di query è il seguente:
$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
Controllare recentemente installedsoftware elenco dal Registro Eventi in remoto
Controllo auser di eventi di log in remoto richiede l’aggiunta di un singolo attributo (-ComputerName) al cmdlet usato prima:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Controllare se un oggetto criteri di gruppo, distribuito softwarewas applicato con successo
Se si applieda certa versione del software tramite oggetto criteri di gruppo, si può facilmente controllare se l’oggetto wassuccessfully applicato a un utente o meno. Tutto ciò di cui hai bisogno è lo strumento GPResult enomi del computer e dell’utente di destinazione:
gpresult /s "PCNAME" /USER "Username" /h "Target location of theHTML report"
Quindi, cerca il tuo GPOname e controlla se è elencato sotto GPO applicati o GPO negati.Il GPO di esempio di seguito è nel gruppo GPO applicato.