Export a clean list of installed aircraft from FSX or FSX: Steam Edition to CSV, including folders, aircraft names, liveries and custom paths.
FSX and FSX: Steam Edition have no built-in aircraft-list export. Use PowerShell to scan the active SimObjects aircraft folders and save a CSV: export folder names for a clean package inventory, or parse each aircraft.cfg [fltsim.x] section for aircraft names, liveries, models and textures.
The commands below only read the FSX installation and write a CSV to the Windows desktop. They do not alter any aircraft files. They require Windows PowerShell 3 or later, and normally do not need administrator privileges.
Which FSX aircraft list should I export?
Export folders when you need an installation audit; export configuration entries when you need a selector-style list of aircraft and liveries.
| Export type | What each row represents | Best used for |
|---|---|---|
| Folder inventory | One immediate subfolder beneath an aircraft root | Backups, installation checks and finding duplicate packages |
| Configuration inventory | One [fltsim.x] variation | Aircraft names, liveries, models, textures and selector troubleshooting |
One aircraft package can hold many liveries, so the configuration report usually has more rows. The folder report can also include documentation folders, incomplete installations and AI packages that are not available as normal flyable aircraft.
How do I export FSX aircraft folder names to CSV?
A folder scan produces the quickest clean inventory of installed aircraft packages.
- Find every aircraft root. Standard installations use
SimObjects\AirplanesandSimObjects\Rotorcraft, although the FSX base directory differs between boxed installations, Steam libraries and custom installations. Our guide to finding the active Airplanes and Rotorcraft directories covers those locations. - Edit the two example paths. Each path must lead to the directory containing the individual aircraft package folders, not to one particular aircraft.
- Open Windows PowerShell. Keep it open after running the command if you also intend to create a filtered report.
- Paste and run this command:
$roots = @('C:\Path\To\FSX\SimObjects\Airplanes','C:\Path\To\FSX\SimObjects\Rotorcraft') | Where-Object { Test-Path -LiteralPath $_ -PathType Container } | Select-Object -Unique; if (-not $roots) { throw 'No valid aircraft folders found. Edit the paths in $roots.' }; $rows = foreach ($root in $roots) { Get-ChildItem -LiteralPath $root -Directory | Select-Object @{Name='SourceRoot';Expression={$root}},@{Name='Class';Expression={Split-Path $root -Leaf}},Name,FullName }; $out = Join-Path ([Environment]::GetFolderPath('Desktop')) 'FSX-aircraft-folders.csv'; $rows | Sort-Object Class,Name | Export-Csv -Path $out -NoTypeInformation -Encoding UTF8; Invoke-Item $out
The resulting FSX-aircraft-folders.csv records the source root, its final directory name, the aircraft folder name and the full path. A row proves that a folder exists; it does not prove that the package contains a valid aircraft.cfg or can be loaded by FSX.
How do I include aircraft names and liveries?
Parse each [fltsim.x] section when you need individual aircraft variations rather than package folders.
- Replace the example roots. Use the same aircraft directories as the folder export and add any active custom roots.
- Run the parser in Windows PowerShell:
$roots = @('C:\Path\To\FSX\SimObjects\Airplanes','C:\Path\To\FSX\SimObjects\Rotorcraft') | Where-Object { Test-Path -LiteralPath $_ -PathType Container } | Select-Object -Unique; if (-not $roots) { throw 'No valid aircraft folders found. Edit the paths in $roots.' }; function Get-CfgValue { param([string]$Body,[string]$Key); $pattern = '(?im)^\s*' + [regex]::Escape($Key) + '\s*=\s*(.*?)\s*(?:;.*)?$'; $m = [regex]::Match($Body,$pattern); if ($m.Success) { return $m.Groups[1].Value.Trim().Trim([char]34) }; return '' }; $rows = foreach ($root in $roots) { Get-ChildItem -LiteralPath $root -Directory | ForEach-Object { $folder = $_; $cfg = Join-Path $folder.FullName 'aircraft.cfg'; if (Test-Path -LiteralPath $cfg) { $text = Get-Content -LiteralPath $cfg -Raw; foreach ($block in [regex]::Matches($text,'(?ms)^\s*\[fltsim\.(\d+)\]\s*(.*?)(?=^\s*\[|\z)')) { $body = $block.Groups[2].Value; [pscustomobject]@{ SourceRoot=$root; Class=(Split-Path $root -Leaf); Folder=$folder.Name; Section=('fltsim.{0}' -f $block.Groups[1].Value); Title=(Get-CfgValue $body 'title'); Manufacturer=(Get-CfgValue $body 'ui_manufacturer'); Type=(Get-CfgValue $body 'ui_type'); Variation=(Get-CfgValue $body 'ui_variation'); Model=(Get-CfgValue $body 'model'); Texture=(Get-CfgValue $body 'texture') } } } } }; $out = Join-Path ([Environment]::GetFolderPath('Desktop')) 'FSX-installed-aircraft.csv'; $rows | Sort-Object Manufacturer,Type,Variation,Title | Export-Csv -Path $out -NoTypeInformation -Encoding UTF8; Invoke-Item $out - Review blank and duplicate values. They often reveal incomplete or conflicting configuration entries rather than an export problem.
Each CSV row represents one [fltsim.x] variation. title is the variation's internal identity and should be unique across the simulator. ui_manufacturer, ui_type and ui_variation provide its readable description, while model and texture distinguish files shared by several liveries.
How do I include aircraft installed in custom locations?
Add every aircraft directory referenced by the active FSX configuration, otherwise both exports can omit add-ons.
Inspect the [Main] section of the active FSX configuration file for numbered SimObjectPaths.n= entries. A relative entry such as SimObjects\Airplanes is resolved from the FSX installation directory; an absolute entry can be placed directly in the PowerShell $roots array.
Only add roots whose immediate subfolders are aircraft packages. Steam Edition payware and installers sometimes use separate directories, so check where Steam Edition add-ons can place their files rather than assuming everything is under the default SimObjects directory.
If boxed FSX and Steam Edition coexist, they may use different active configurations and installation roots. Inventory the edition you actually launch and do not combine its paths with the other installation unless both are intentionally configured to share aircraft.
Why does the exported list not match the FSX aircraft selector?
The disk scan and Aircraft Selection screen measure different things, so an exact row-for-row match is not expected.
- Several liveries can share one folder. The folder report shows one package, while the configuration report shows every matching
[fltsim.x]section. - FSX may be filtering variations. The selector's filters and its option to show all variations can hide entries that remain installed. Our explanation of how FSX builds and filters the Aircraft Selection list helps reconcile the two views.
- AI and specialist SimObjects may be included. Finding an
aircraft.cfgentry does not guarantee that FSX treats the package as a usable player aircraft. - An aircraft may be one folder too deep. The package folder should contain
aircraft.cfgdirectly. If it contains another identically named package folder instead, both the parser and FSX normally miss it. - The configuration may be incomplete. Missing UI fields produce blank CSV columns. Duplicate
titlevalues, repeated section numbers and broken model or texture references can also stop an aircraft appearing or loading correctly. - A custom path may be absent from the scan. The commands only inspect the roots listed in
$roots; they do not discover everySimObjectPathsentry automatically.
Back up a configuration before correcting it. We explain the relevant entries and safe editing precautions in our guide to reading and editing an FSX aircraft.cfg file.
How do I keep the exported aircraft list clean?
Keep the complete report as an audit copy, then create a second CSV containing only the columns needed for reading or sharing.
After running the configuration parser, use this command in the same PowerShell window to exclude entries without a title and retain the most useful identification fields:
$cleanOut = Join-Path ([Environment]::GetFolderPath('Desktop')) 'FSX-aircraft-clean-list.csv'; $rows | Where-Object { $_.Title -ne '' } | Select-Object Manufacturer,Type,Variation,Title,Folder | Sort-Object Manufacturer,Type,Variation,Title | Export-Csv -Path $cleanOut -NoTypeInformation -Encoding UTF8; Invoke-Item $cleanOut
Do not remove apparent duplicates until you compare their Title, Folder, Model and Texture fields. Two rows with the same visible aircraft name may be separate liveries or model variants. Conversely, identical title values in different entries indicate a configuration conflict worth fixing.
Why is the CSV empty or displayed in one column?
An empty report usually means the supplied root is wrong, the aircraft are nested too deeply, or no immediate subfolder contains a readable aircraft.cfg.
- No valid aircraft folders found: replace the example paths with real directories. Point to
Airplanes,Rotorcraftor an equivalent custom root, not the FSX base folder. - The CSV opens in one column: import it through the spreadsheet application's text or CSV importer and select a comma as the delimiter. This is common on Windows systems whose regional list separator is a semicolon.
- Some columns are blank: the corresponding
ui_,modelortexturevalue is missing from that configuration section. The exporter does not invent replacement data. - PowerShell rejects
-Directoryor-Raw: the installed PowerShell version is too old for these commands. Use Windows PowerShell 3 or later. - The raw CSV contains quotation marks: that is normal CSV escaping, not unwanted data. Open or import the file as CSV rather than deleting the quotation marks manually.