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.

Solutions

a small chevron
Device management

Device management

Remotely manage, and protect laptops and mobile devices.

Orchestration

Orchestration

Automate tasks across devices, from app installs to scripts.

Software management

Software management

Inventory, patch, and manage installed software.

Extend Fleet

Extend Fleet

Integrate your favorite tools with Fleet.


Customers

a small chevron
Stripe + Fleet

Stripe + Fleet

Stripe consolidates multiple tools with Fleet.

Foursquare + Fleet

Foursquare + Fleet

Foursquare quickly migrates to Fleet for device management.

What people are saying

What people are saying

Stories from the Fleet community.


Pricing

More

a small chevron
Docs

Docs

Guides

Guides

Support

Support

News

News

Get your license

Get your license

The handbook

The handbook

Fleet @ Meow Wolf

Kick off JNUC with Fleet at Meow Wolf Denver's Convergence Station.

Join us
Get a demo Try it yourself
Solutions A small chevron
Device management

Device management

Remotely manage, and protect laptops and mobile devices.

Orchestration

Orchestration

Automate tasks across devices, from app installs to scripts.

Software management

Software management

Inventory, patch, and manage installed software.

Extend Fleet

Extend Fleet

Integrate your favorite tools with Fleet.

Customers A small chevron
Stripe + Fleet

Stripe + Fleet

Stripe consolidates multiple tools with Fleet.

Foursquare + Fleet

Foursquare + Fleet

Foursquare quickly migrates to Fleet for device management.

What people are saying

What people are saying

Stories from the Fleet community.

Pricing
More A small chevron
Docs

Docs

Guides

Guides

Support

Support

News

News

Get your license

Get your license

The handbook

The handbook

Fleet @ Meow Wolf

Kick off JNUC with Fleet at Meow Wolf Denver's Convergence Station.

Join us
Try it yourself Get a demo

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
×