Fleet logo
Menu An icon indicating that interacting with this button will open the navigation menu.
Fleet logo An 'X' icon indicating that this can be interacted with to close the navigation menu.
Multi platform
Device management   (+ MDM) Orchestration   (+ monitoring) Software management   (+ CVEs) Integrations

Docs
Stories
What people are saying News Ask around Meetups COMPANY
Origins   (Fleet & osquery) The handbook Logos & artwork Why open source?

Pricing Take a tour
Multi platform
Device management + MDM Orchestration + monitoring Software management + CVEs, usage, app library Integrations
Docs
Stories
What people are saying News Ask around Take a tour Meetups COMPANY Origins   (Fleet & osquery) The handbook Logos/artwork Why open source?
Pricing Try it yourself

Vitals

Fleet’s built-in queries for collecting and storing important device information.

macOS Apple

Linux Linux

Windows Windows

Chrome ChromeOS

Battery Disk encryption Disk space Google Chrome profiles Host certificates MDM MDM configuration profiles MDM Disk encryption key file MDM Disk encryption key file lines Munki info Network interfaces Orbit information Operating system information Osquery flags Osquery information Scheduled osquery statistics Software Software codesign Software Firefox Software Python packages Software Python packages including user directory VScode extensions Uptime Users
Disk encryption Disk space Google Chrome profiles Network interfaces Orbit information Operating system information Osquery flags Osquery information Scheduled osquery statistics Software Software Python packages Software Python packages including user directory VScode extensions Uptime Users
Battery Disk encryption Disk space Google Chrome profiles MDM Network interfaces Orbit information Operating system information Operating system version Osquery flags Osquery information Scheduled osquery statistics Software Python packages Software Python packages including user directory VScode extensions Software System information Uptime Users Windows update history
ChromeOS profile user info Google Chrome profiles Network interfaces Operating system information Software Users

Software

click to open the table of contents

Software

Gathers information about software installed on a device running Windows.

Query PowerShellNEW BashNEW
WITH cached_users AS (WITH cached_groups AS (select * from groups)
 SELECT uid, username, type, groupname, shell
 FROM users LEFT JOIN cached_groups USING (gid)
 WHERE type <> 'special' AND shell NOT LIKE '%/false' AND shell NOT LIKE '%/nologin' AND shell NOT LIKE '%/shutdown' AND shell NOT LIKE '%/halt' AND username NOT LIKE '%$' AND username NOT LIKE '\_%' ESCAPE '\' AND NOT (username = 'sync' AND shell ='/bin/sync' AND directory <> ''))
SELECT
  name AS name,
  version AS version,
  '' AS extension_id,
  '' AS browser,
  'programs' AS source,
  publisher AS vendor,
  install_location AS installed_path
FROM programs
UNION
SELECT
  name AS name,
  version AS version,
  '' AS extension_id,
  '' AS browser,
  'ie_extensions' AS source,
  '' AS vendor,
  path AS installed_path
FROM ie_extensions
UNION
SELECT
  name AS name,
  version AS version,
  identifier AS extension_id,
  browser_type AS browser,
  'chrome_extensions' AS source,
  '' AS vendor,
  path AS installed_path
FROM cached_users CROSS JOIN chrome_extensions USING (uid)
UNION
SELECT
  name AS name,
  version AS version,
  identifier AS extension_id,
  'firefox' AS browser,
  'firefox_addons' AS source,
  '' AS vendor,
  path AS installed_path
FROM cached_users CROSS JOIN firefox_addons USING (uid)
UNION
SELECT
  name AS name,
  version AS version,
  '' AS extension_id,
  '' AS browser,
  'chocolatey_packages' AS source,
  '' AS vendor,
  path AS installed_path
FROM chocolatey_packages
# Get installed Windows programs from registry
$programs = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName } | ForEach-Object {
    [PSCustomObject]@{
        name    = $_.DisplayName
        version = $_.DisplayVersion
        type    = "Program (Windows)"
        source  = "programs"
    }
}

# Get installed Python packages (if pip is available)
$python_pkgs = @()
try {
    $pipOutput = & pip list --format=freeze 2>$null
    if ($pipOutput) {
        foreach ($line in $pipOutput) {
            if ($line -match "^(.*?)==(.*)$") {
                $python_pkgs += [PSCustomObject]@{
                    name    = $matches[1]
                    version = $matches[2]
                    type    = "Package (Python)"
                    source  = "python_packages"
                }
            }
        }
    }
} catch {
    # pip not found or error occurred
}

# Get Internet Explorer extensions from registry
$ie_extensions = @()
$ieRegKey = "HKLM:\SOFTWARE\Microsoft\Internet Explorer\Extensions"
if (Test-Path $ieRegKey) {
    $ieData = Get-ItemProperty -Path $ieRegKey -ErrorAction SilentlyContinue
    if ($ieData) {
        foreach ($prop in $ieData.PSObject.Properties) {
            # Using property name as the identifier; version info is not normally stored
            $ie_extensions += [PSCustomObject]@{
                name    = $prop.Name
                version = ""
                type    = "Browser plugin (IE)"
                source  = "ie_extensions"
            }
        }
    }
}

# Get Chrome extensions by reading installed extension manifests
$chrome_extensions = @()
$chromeExtPath = Join-Path $env:LOCALAPPDATA "Google\Chrome\User Data\Default\Extensions"
if (Test-Path $chromeExtPath) {
    $extDirs = Get-ChildItem -Path $chromeExtPath -Directory -ErrorAction SilentlyContinue
    foreach ($ext in $extDirs) {
        $versionDirs = Get-ChildItem -Path $ext.FullName -Directory -ErrorAction SilentlyContinue
        foreach ($verDir in $versionDirs) {
            $manifestPath = Join-Path $verDir.FullName "manifest.json"
            if (Test-Path $manifestPath) {
                try {
                    $manifest = Get-Content $manifestPath -Raw | ConvertFrom-Json
                    $extName = $manifest.name
                    $extVersion = $manifest.version
                } catch {
                    $extName = $ext.Name
                    $extVersion = $verDir.Name
                }
            } else {
                $extName = $ext.Name
                $extVersion = $verDir.Name
            }
            $chrome_extensions += [PSCustomObject]@{
                name    = $extName
                version = $extVersion
                type    = "Browser plugin (Chrome)"
                source  = "chrome_extensions"
            }
        }
    }
}

# Get Firefox add-ons by locating extensions.json in profile directories and parsing it
$firefox_addons = @()
$firefoxProfilesPath = Join-Path $env:APPDATA "Mozilla\Firefox\Profiles"
if (Test-Path $firefoxProfilesPath) {
    $profiles = Get-ChildItem -Path $firefoxProfilesPath -Directory -ErrorAction SilentlyContinue
    foreach ($profile in $profiles) {
        $extensionsJson = Join-Path $profile.FullName "extensions.json"
        if (Test-Path $extensionsJson) {
            try {
                $json = Get-Content $extensionsJson -Raw | ConvertFrom-Json
                if ($json.addons) {
                    foreach ($addon in $json.addons) {
                        if ($addon.type -eq "extension") {
                            $firefox_addons += [PSCustomObject]@{
                                name    = $addon.name
                                version = $addon.version
                                type    = "Browser plugin (Firefox)"
                                source  = "firefox_addons"
                            }
                        }
                    }
                }
            } catch {
                # Skip profiles with parsing issues
            }
        }
    }
}

# Get installed Chocolatey packages (if choco is available)
$chocolatey_packages = @()
try {
    $chocoOutput = & choco list --local-only --limit-output 2>$null
    if ($chocoOutput) {
        foreach ($line in $chocoOutput) {
            if ($line -match "^(.*?)\|(.*)$") {
                $chocolatey_packages += [PSCustomObject]@{
                    name    = $matches[1]
                    version = $matches[2]
                    type    = "Package (Chocolatey)"
                    source  = "chocolatey_packages"
                }
            }
        }
    }
} catch {
    # choco not found or error occurred
}

# Combine all results
$result = $programs + $python_pkgs + $ie_extensions + $chrome_extensions + $firefox_addons + $chocolatey_packages

# Output the result to stdout in table format
$result | Format-Table -AutoSize
An icon indicating that this section has important information

PowerShell commands are currently work in progress, contributions welcome.

An icon indicating that this section has important information

Bash commands are currently work in progress, contributions welcome.

Suggest an edit

Vitals

Battery Disk encryption Disk space Google Chrome profiles Host certificates MDM MDM configuration profiles MDM Disk encryption key file MDM Disk encryption key file lines Munki info Network interfaces Orbit information Operating system information Osquery flags Osquery information Scheduled osquery statistics Software Software codesign Software Firefox Software Python packages Software Python packages including user directory VScode extensions Uptime Users
Disk encryption Disk space Google Chrome profiles Network interfaces Orbit information Operating system information Osquery flags Osquery information Scheduled osquery statistics Software Software Python packages Software Python packages including user directory VScode extensions Uptime Users
Battery Disk encryption Disk space Google Chrome profiles MDM Network interfaces Orbit information Operating system information Operating system version Osquery flags Osquery information Scheduled osquery statistics Software Python packages Software Python packages including user directory VScode extensions Software System information Uptime Users Windows update history
ChromeOS profile user info Google Chrome profiles Network interfaces Operating system information Software Users
Fleet logo
Multi platform Device management Orchestration Software management Integrations Pricing
Documentation Support Docs API Release notes Get your license
Company About News Jobs Logos/artwork Why open source?
ISO 27001 coming soon a small checkmarkSOC2 Type 2 Creative Commons Licence CC BY-SA 4.0
© 2025 Fleet Inc. Privacy
Slack logo GitHub logo LinkedIn logo X (Twitter) logo Youtube logo Mastadon logo
Tried Fleet yet?

Get started with Fleet

Start
continue
×