Så här kontrollerar du snabbt installerade programversioner
det finns situationer där du måste kontrollera om du eller dina användare har viss programvara installerad och vad är dess version. Du kanske vill kontrollera om programvaran är uppdaterad eller om din GPO-distribuerade programvara har installerats för en viss användare. Jag visar dig flera metoder du kan använda för att kontrollera det med PowerShell.
snabb navigering:
- kontrollera installerad programlista lokalt
- Get-WmiObject
- Registerfråga
- Händelselogg
- kontrollera installerad programlista på distans
- Get-WmiObject
- Registerfråga
- Händelselogg
- kontrollera om GPO-distribuerad programvara har tillämpats
kontrollera vad som är installerat på din dator
för att kontrollera vilken programvara som är installerad kan du alltid använda program och funktioner i kontrollpanelen eller bläddra bland alla diskpartitioner på jakt efter en specifik app. Du kan till och med försöka hitta en app i Start-menyn för att starta den och söka efter dess versionsnummer manuellt. Problemet med dessa metoder är dock att de är så långt ifrån ”snabba och automatiska” som de kan vara. Genom att kontrollera de installerade programversionerna med PowerShell kan du samla in data som du behöver mycket snabbare.
hämta installerad programvarulista med Get-WmiObject
firstmethod är lika enkelt som att klistra in en enkel fråga:
Get-WmiObject -Class Win32_Product
du kan också enkelt filtrera data för att hitta specifika applikationer från en enda leverantör, tillsammans med deras versioner, till exempel:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
trotsatt vara väldigt lätt, den här metoden har en stor nackdel-det tar ganska lång tid attåtervända resultaten.
fråga registret förinstallerad programvara
en Annanmetod för att få en lista över installerad programvara frågar registret. Thefollowing short script returnerar listan över program tillsammans med deras versioner:
$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')}
nu, ta aquick titta på HKLM elementet fetstil ovan. Det betyder att listan överprogramvara som returneras av skriptet är all programvara installerad på LM – localmachine. Applikationer kan dock installeras per användare också. För att returnera alist av applikationer för den för närvarande loggade användaren, ändra HKLM till HKCU (CU står för ”aktuell användare”):
$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')}
Hämta listan övernyligen installerad programvara från händelseloggen
om du villkontrollera endast den nyligen installerade programvaran kan du använda följande cmdletto-sökning genom händelseloggen.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
den här metoden för att ta reda på installerad programvara är mest tillförlitlig för de nyligen tillagda elementen eftersom händelseloggar som standard är inställda på att skriva över de äldsta posterna(cirkulär loggning).
Läs mer om att använda PowerShell för att kontrollera Windows händelseloggar och filtrera resultat
hämta en lista över installeradeprogramvara på distans
var och en av metoderna som nämns ovan kan också användas för att kontrollera programvara installerad på andra maskiner i samma nätverk. Om du skapar en lista över alla datornamn i ditt nätverk kan du använda metoderna nedan i en Foreach-slinga för att returnera resultat från mer än en enda fjärrdator.
$ pcname i varje skript står för namnet på fjärrdatorn där du vill få en lista över installerad programvara och deras versioner.
få installerat softwarelist med remote Get-WmiObject kommando
Thefollowing cmdlet är, återigen, det enklaste i gäng, men kan ta lite tid tofinish:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
där$pcname är namnet på den dator du vill fråga.
kontrollera installerad programvaramed fjärrregisterfråga
Fjärrregisterfrågor är något mer komplicerade och kräver att Fjärrregistertjänsten körs. En exempelfråga är som följer:
$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
kontrollera nyligen installeradprogramvarulista från händelseloggen på distans
kontrollera ausers händelselogg på distans kräver att du lägger till ett enda attribut (- datornamn) till cmdlet som användes tidigare:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
kontrollera om en GPO-distribuerad programvara tillämpades framgångsrikt
om du tillämpade en viss programvaruversion via GPO kan du enkelt kontrollera om detta GPO framgångsrikt tillämpades på en användare eller inte. Allt du behöver är gpresult-verktyget ochnamn på måldatorn och användaren:
gpresult /s "PCNAME" /USER "Username" /h "Target location of theHTML report"
Leta sedan efter ditt GPOname och kontrollera om det är listat under tillämpade GPO eller nekade GPO.Provet GPO nedan finns i gruppen Applied GPO.