German Translation / Deutsche Übersetzung
A powerful and user-friendly PowerShell wrapper for the Everything Search Engine (Version 1.5+). This module utilizes the Everything3_x64.dll from the Everything SDK to enable extremely fast file searches directly from the PowerShell console.
Tested with:
- PowerShell 7.6.9 (previously 7.5.2)
- Everything 1.5.0.1424b-x64 (previously 1.5.0.1423b)
- SDK Version 3.0.1.12 (included
Everything3_x64.dll, signed by voidtools PTY LTD)- Website: https://www.voidtools.com/forum/viewtopic.php?t=15853
- Download: https://www.voidtools.com/Everything-SDK-3.0.1.12.zip
- Size: (513 KB - SHA256: d35ed05f339d82b9e7add43fda82efc497ee5b09818b8fe0152fd90737b614fc)
- GitHub: https://github.com/voidtools/everything_sdk3
Release notes and discussion: voidtools forum
- Everything3 PowerShell Wrapper
- Fast Connection: Easy connection and disconnection from the Everything instance
- Powerful Search: Support for complex queries, regex, case sensitivity, and more
- Property Retrieval: Retrieve metadata such as size, creation date, and attributes
- Simple Handling: Convenient wrapper function
Find-Filesfor everyday searches - Connection Testing: Built-in function to test connection and display diagnostic information
- VSCode Compatibility: Automatic handling of VSCode-specific DLL loading issues
- PowerShell 7.0 or higher (the module uses PowerShell 7 syntax such as
??; Windows PowerShell 5.1 is not supported). PowerShell 7.6.6 or newer is recommended (security fixes; 7.4 and 7.5 reach end of support on 2026-11-10) - Everything 1.5 (tested with 1.5.0.1424b) must be installed and running in the same Windows session as the caller. According to the 1.5.0.1424b changelog, IPC connections from other sessions are not accepted (measured as SYSTEM in session 0: the connection is established, but the first search fails with error
0xE0000003, "disconnected"). The old beta instance1.5ano longer exists after the 1.5.0.1424b installer; the module connects to the default instance - The
Everything3_x64.dll(from the official Everything SDK) must be located in the same directory as the module
-
Clone the repository:
git clone https://github.com/gitnol/PowerEverything3.git
-
Import the module into your PowerShell session:
Import-Module .\Everything3-PowerShell-Wrapper.psd1 -Verbose
-
Test the connection:
Test-EverythingConnection -
Find files:
Find-Files -Pattern "*.pdf" -MaxResults 10
| Function | Description |
|---|---|
Find-Files |
A simple wrapper function for quick file searches |
Search-Everything |
Performs detailed searches with all available options |
Connect-Everything |
Establishes a connection to the Everything client |
Disconnect-Everything |
Disconnects from the Everything client |
Test-EverythingConnection |
Verifies the connection to the Everything instance and displays status information |
Search for PDF and DOCX files:
Find-Files -Pattern "*" -Extensions @("pdf", "docx") -MaxResults 10Search for files with properties (size, date):
Find-Files -Pattern "invoice*" -IncludeProperties -MaxResults 5Regex search for image files with date pattern:
Find-Files -Pattern "regex:^\d{4}-\d{2}-\d{2}.*\.(jpg|png)$" -Verbose -MaxResults 10
# or
Find-Files -Pattern '^\d{4}-\d{2}-\d{2}.*\.(jpg|png)$' -Regex -Verbose -MaxResults 10Find the 5 largest files over 100 MB and sort by size:
# Manually establish connection
$client = Connect-Everything
# Execute search and sort by size in descending order
Search-Everything -Client $client -Query "size:>100mb" -MaxResults 5 -Properties "Size" -SortBy @{Property = "Size"; Descending = $true}
# Disconnect
Disconnect-Everything -Client $clientFind all files modified in the last 7 days:
$client = Connect-Everything
Search-Everything -Client $client -Query "dm:last7days" -MaxResults 10 -Properties "DateModified"
Disconnect-Everything -Client $clientFind empty files:
Find-Files -Pattern "size:0" -MaxResults 20-MaxResults 0 returns all results. The Exists property is only filled when -CheckExists is set – a Test-Path per result is expensive (Everything results come from the index and are usually current anyway).
$client = Connect-Everything
# all ZIP files larger than 100 MB below a folder, with size and modification date
$zips = Search-Everything -Client $client -Query 'file: ext:zip size:>100mb "D:\Data\"' -MaxResults 0 -Properties Size, DateModified
$zips | Select-Object FullPath, @{ n = 'SizeMB'; e = { [math]::Round($_.Properties['Size'] / 1MB) } }
# paging: results 101-200, sorted by name
Search-Everything -Client $client -Query 'ext:pdf' -Offset 100 -MaxResults 100 -SortBy @{ Property = 'Name' }
# verify that each result still exists on disk (slower)
Search-Everything -Client $client -Query 'ext:iso' -MaxResults 50 -CheckExists | Where-Object { -not $_.Exists }
Disconnect-Everything -Client $clientText properties (Name, Path, Extension, Type) are returned as full strings. Size is $null when Everything does not know it (e.g. folders).
Measured against Everything 1.5.0.1423b and 1.5.0.1424b:
- Round brackets do not group:
* (ext:pdf)finds nothing. Use< >for grouping, e.g.<ext:pdf|ext:docx> - Several extensions:
ext:pdf;docx, notext:pdf|docx(that meansext:pdfOR "name contains docx").Find-Files -Extensionsbuilds the correct form for you - Long paths only: Everything indexes long paths. An 8.3 short path such as
C:\Users\NAME~1.X\...(e.g. from$env:TEMP) finds nothing - Folder count:
"C:\Folder"counts the folder itself,"C:\Folder\"does not – an empty folder gives 1 hit without and 0 with the trailing backslash
Examples/Find-ArchivesWithExtractedFolder.ps1 is a complete file-server clean-up script built on this module. It finds archives (zip, 7z, rar, iso, tar.gz, …) for which a folder with the same name already exists in the same location – i.e. archives that were extracted and then kept.
- Searches via the Everything index in seconds; falls back to a parallel file-system scan if Everything is not available or a path is not indexed
-AllSharessearches all data shares of the server (skips system shares, DFS roots and nested shares)- Resolves the owners of the extracted folders via ADSI/LDAP (no ActiveDirectory module/RSAT needed)
- Writes a CSV and optionally sends one mail per owner; paths in mails are converted to
\\server\share\... - Owners that cannot be mailed (deleted/disabled accounts, no mail address, BUILTIN\Administrators) end up in one summary mail to the helpdesk
- Content check: compares every archive with its extracted folder and tells whether the archive is a redundant copy (
identical– it can be deleted) or the folder has been worked on since (changed, with new/missing/changed files)- level 1, always on: file list, sizes and timestamps from the archive directory – nothing is extracted, takes about a second per archive
- level 2,
-CheckContentCrc: additionally compares the CRC32 of every file (reads all files – slow, only on request) - ZIP is always checked; 7z, rar, iso, tar.gz etc. only if
7z.exe(+7z.dll) is found ($SevenZip, default%ProgramFiles%\7-Zip), otherwiseN/A - handles old ZIP file names in the DOS code page, the 1-hour daylight-saving offset of ZIP timestamps and their 2-second resolution; system files such as
Thumbs.dbare ignored
- Never deletes anything
cd .\Examples
Copy-Item .\Find-ArchivesWithExtractedFolder.config.example.ps1 .\Find-ArchivesWithExtractedFolder.config.ps1 # then adjust
# dry run on the whole server: CSV only
.\Find-ArchivesWithExtractedFolder.ps1 -AllShares -SearchMode Everything
# test: all mails go to $DebugTo, at most 3
.\Find-ArchivesWithExtractedFolder.ps1 -AllShares -SendMail -MaxMails 3
# production: mails to the owners
.\Find-ArchivesWithExtractedFolder.ps1 -AllShares -SearchMode Everything -SendMail -Live
# your own PC: all local fixed disks, with CRC content check
.\Find-ArchivesWithExtractedFolder.ps1 -Path ((Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3').DeviceID | ForEach-Object { $_ + '\' }) -SearchMode Everything -CheckContentCrcWith -SearchMode Everything, paths that are not in the Everything index are skipped with a warning (summary at the end of phase 1); with -SearchMode Auto they are scanned.
Run it as administrator on the file server itself (needed for Get-Acl and Get-SmbShare). See the comment-based help (Get-Help .\Find-ArchivesWithExtractedFolder.ps1 -Full) for all parameters. Your real *.config.ps1, CSV and log files are excluded via .gitignore.
skills/everything-search/SKILL.md is a skill for AI coding agents (for example Claude Code).
It teaches the module's usage and the search-syntax pitfalls measured against Everything 1.5 (round brackets do not group, ext:a;b instead of ext:a|b, long paths instead of 8.3 short paths). To use it, copy the folder skills/everything-search to ~/.claude/skills/ (or into the .claude/skills/ folder of a project) and point <path-to-repo> in it to your clone.
The module includes automatic workarounds for VSCode-specific issues when loading native DLLs:
- Automatic DLL Loading: The
Everything3_x64.dllis explicitly loaded viaKernel32::LoadLibrary() - PATH Handling: The module directory is automatically added to the PATH
- Error Handling: Robust handling of VSCode-specific parameter binding issues
These measures ensure that the module functions correctly in both the regular PowerShell console and VSCode.
SDK 3.0.1.12
- Updated
Everything3_x64.dllto SDK 3.0.1.12 (multiple sessions support, improved waiting on busy pipes). Tested against Everything 1.5.0.1423b and 1.5.0.1424b - Everything 1.5.0.1424b removes the old beta instance
1.5a:Connect-Everything -InstanceName '1.5a'now fails with "pipe not found", the default instance works. According to the vendor changelog, IPC connections are now only accepted from clients in the same session
AI agent skill
- New:
skills/everything-search– skill for AI coding agents (usage of the module, verified search-syntax pitfalls, requirements)
Find-Files -Extensions fix
- Fixed:
Find-Files -Extensionsreturned nothing on Everything 1.5 because the query was built as(ext:a|ext:b)and Everything does not treat round brackets as grouping. It now buildsext:a;b, and leading dots (.pdf) are accepted (reported in issue #1)
Archive example: content check and index fix
- New: content check archive ↔ extracted folder (CSV columns
Content/ContentDetails, column "Content" in mails); level 1 always, level 2 with-CheckContentCrc; formats other than ZIP via 7-Zip if available - Fixed: an empty but indexed folder was reported as "not in the Everything index" (the index check now counts the folder itself)
- Changed: with
-SearchMode Everythinga path that is not indexed no longer aborts the whole run – it is skipped with a warning and listed at the end of phase 1
SDK 3.0.0.9, fixes and archive example
- Updated
Everything3_x64.dllto SDK 3.0.0.9 (more robust pipe connection when Everything is busy, crash and memory-corruption fixes in the SDK – see the SDK changelog) - Fixed: P/Invoke signatures used
uintforSIZE_Tparameters/return values (index, count, buffer size) – nowUIntPtr(64-bit on x64), as declared inEverything3.h - Fixed: text properties (
Name,Path,Extension,Type) only returned their first character (Everything3_GetResultPropertyTextWwas declared withoutCharSet.Unicode) - Fixed: the property
Nameand sorting byNamewere silently ignored (property ID0was treated as "unknown") - Fixed:
$error(automatic variable) was overwritten in error handling - New:
-MaxResults 0returns all results;-Offsetfor paging is passed correctly - New:
-CheckExists–Existsis only checked on request ($nullotherwise). Behaviour change: previouslyTest-Pathran for every result - Faster: results are collected in a list instead of
+=(5,000 results: 6.3 s → 0.5 s) Sizeis$nullinstead of18446744073709551615when unknown (e.g. folders)- Loading the module no longer writes to the console (messages moved to
-Verbose) - New example:
Examples/Find-ArchivesWithExtractedFolder.ps1 - Requirements corrected: PowerShell 7.0+
This project is provided without any warranty. Use at your own risk.
This project is not affiliated with VoidTools. All trademarks belong to their respective owners. This is a pure research and development project.