Sådan kontrolleres installerede programversioner
der er situationer, hvor du skal kontrollere, om du eller dine brugere har visse programmer installeret, og hvad er dens version. Du kan kontrollere, om programmet er opdateret, eller om dit GPO-implementerede program er installeret for en bestemt bruger. Jeg viser dig flere metoder, du kan bruge til at kontrollere det med Strømshell.
hurtig navigation:
- Tjek listen over installerede programmer lokalt
- Get-Vmiobject
- Registreringsforespørgsel
- hændelseslog
- fjernkontrol af listen over installerede programmer
- Get-Vmiobject
- Registreringsforespørgsel
- hændelseslog
- kontroller, om GPO-implementeret program blev anvendt med succes
Kontroller, hvad der er installeret pådin computer
for at kontrollere, hvilket program der er installeret, kan du altid bruge programmer og funktioner i dit kontrolpanel eller gennemse alle diskpartitioner på jagt efter en bestemt app. Du kan endda prøve at finde en app i startmenuen for at starte den og søge efter dens versionsnummer manuelt. Problemet med disse metoder er imidlertid, at de er så langt fra “hurtige og automatiske”, som de kan være. Ved at kontrollere de installerede programversioner kan du indsamle data, som du har brug for meget hurtigere.
få installeret programliste med Get-Vmiobject
den første metode er så enkel som at indsætte en simpel forespørgsel:
Get-WmiObject -Class Win32_Product
du kan også nemt filtrere dataene for at finde specifikke applikationer fra en enkelt leverandør sammen med deres versioner, for eksempel:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
på trods afat være meget let, har denne metode en stor ulempe-det tager et stykke tid atreturnere resultaterne.
Forespørgselsregister forinstalleret program
en anden metode til at få en liste over installerede programmer spørger registreringsdatabasen. Detfølgende kort script returnerer listen over applikationer sammen med deres 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, tage akvick kig på HKLM element fed ovenfor. Det betyder, at listen over programmer, der returneres af scriptet, er alt det program, der er installeret på LM – localmachine. Applikationer kan dog også installeres pr. For at returnere alist over applikationer fra den aktuelt loggede bruger skal du ændre HKLM til HKCU (CU står for “aktuel bruger”):
$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')}
Hent listen over nyligt installerede programmer fra hændelsesloggen
hvis du kun vil kontrollere det nyligt installerede program, kan du bruge følgende cmdletto-søgning gennem hændelsesloggen.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
denne metode til at finde ud af det installerede program er mest pålidelig for de nyligt tilføjede elementer, fordi hændelseslogfiler som standard er indstillet til at overskrive de ældste poster(cirkulær logning).
få mere at vide om at kontrollere hændelseslogfiler og filtreringsresultater
få en liste over installerede programmer eksternt
hver af de ovennævnte metoder kan også bruges til at kontrollere programmer, der er installeret på andre maskiner i samme netværk. Hvis du opretter en liste over alle computernavne i dit netværk, kan du bruge nedenstående metoder i en Foreach-loop til at returnere resultater fra mere end en enkelt ekstern PC.
$pcname i hvert script står for navnet på den fjerncomputer, hvor du vil have en liste over installerede programmer og deres versioner.
få installeret programliste med fjernbetjening Get-Vmiobject kommando
denfølgende cmdlet er igen den nemmeste i bunken, men det kan tage lidt tid at afslutte:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
hvor$pcname er navnet på den computer, du vil forespørge.
kontroller installeret programmed Remote registry forespørgsel
Remote registry forespørgsler er lidt mere komplicerede og kræver, at Remote Registry service kører. En prøve forespørgsel er som følger:
$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
fjernkontrol af ausers hændelseslog kræver tilføjelse af en enkelt attribut (- Computernavn) til cmdlet, der blev brugt før:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Kontroller, om et GPO-implementeret programmel blev anvendt med succes
hvis du har anvendt en bestemt programversion via GPO, kan du nemt kontrollere, om denne GPO blev anvendt med succes på en bruger eller ej. Alt du behøver er gpresult-værktøjet ognavne på målcomputeren og brugeren:
gpresult /s "PCNAME" /USER "Username" /h "Target location of theHTML report"
derefter skal du kigge efter dit GPOname og kontrollere, om det er angivet under anvendte Gpo ‘er eller nægtet Gpo’ er.Prøven GPO nedenfor er i den anvendte GPOs-gruppe.