Gutcheck
0.24.1
Gutcheck - an honest look inside a slow or unstable Windows PC. Performance and stability diagnostics for Windows clients, driven by data-defined Checks. A technician runs one command at a customer site and reads the report on the spot.
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) 2026 MERLIN. Licensed under the MIT License.
Package Details
Author(s)
- MERLIN
Tags
Windows Diagnostics Performance Support Troubleshooting Helpdesk Hardware Reporting
Functions
PSEditions
Dependencies
This module has no dependencies.
Release Notes
0.24.1 - A search where you are.
- The search looks in the part picked in the tree - an area, an application, the hints, the
cards, the evidence, the terms - and says so in front of it. "überall suchen" searches the
whole Report. A pick while something is searched for searches there.
0.24.0 - What still points at a server that does not answer.
- New Finding "Verweise auf Server, die nicht antworten": for each server the machine
asked for a share in vain, where the signed-in User's profile still points at it -
quick access, the lists of recently used files, shortcuts, network places, Office's
settings, typed addresses, drives and printer connections - with what to do at each.
It reads the server and the share, never a file's name, and says where it looked
where it found nothing.
- "Group Policy Client-Side Extensions: die langsamsten" no longer fails for what has
stopped: slow runs in the background with five or more quick runs since are a note
that says so. What somebody waited for at a sign-in is graded as before.
- The Report names things as Windows names them and a search finds them -
"DFS-Namespace", "Windows-Zeitgeber (W32Time)", "NCSI", "AAD Broker Plugin",
"TLS-Handshake" - and no longer by German words made up for them.
- New chapter "Begriffe": each technical term the Report uses, explained in plain words;
only those it uses.
- Picked for one application, the head of an area counts that application's Findings, and
not every application's.
- A long first line of a closed Finding ends in "..." inside its box, and no longer runs
past it.
- Live kernel events say what each code means beside it: "2x Code 0x193" said nothing.
- The tree beside the Report groups the areas by the question a Technician comes with:
"Gerät", "Netz & Domäne", "Anmeldung & Benutzer", "Anwendungen". What the
applications have in common leads the applications as "Alle Anwendungen", and what
the Run says of itself stands in the overview as "Zum Durchlauf". The areas have German
names in the Report; findings.csv keeps their values.
- A search above the Report finds in every Finding, every row of the evidence and every
term, and marks each place: several words, "a phrase", -without, FAIL/WARN/INFO/OK.
Enter goes from one place to the next, / goes to the search.
- "Nachweise" keeps the width of the rest of the Report. A table wider than its box
scrolls in it with its first column fixed, and "breit anzeigen" shows it over the window.
0.23.0 - A Report with a way through it.
- Beside the Report stands a tree that does not scroll away: the chapters, the areas of
the machine and the applications, each with how it stands and how many Findings it
has. Picking an entry shows that part and nothing else.
- A Finding is one line until it is opened. What is in order is one line of the tree.
- An application is one place to look, with its Findings from every area.
- Printed, and without its script, the Report is whole as before.
- "Handlungsbedarf" is called "Auffälligkeiten": it says what stands out, and not yet
that something has to be done.
- "Arbeitsspeicher belegt" names the five largest programs where the memory is short,
each summed over all its processes, and says what it means and what to do.
0.22.0 - A log kept in a database, and a Report that reads easier.
- The Check of an application's own log reads a log kept in an SQLite database, where
a Check Definition names its table. New Check "App: Securepoint VPN service log".
- New Scope "Apps": the applications, with what their Checks read - crashes, recent
changes, .NET, running programs - and nothing else about the machine.
- New Checks for Bitwarden: the application, the errors in its log, and its browser
extension - in which browser and profile it is installed and switched on, and whether
its link to the desktop application is intact.
- New Checks "App: Nextcloud" and "App: Nextcloud sync": the files the client could not
transfer and why, open conflicts, and how each folder is set up.
- New Check "App: OneDrive sync": what OneDrive says of its own synchronisation - files
that failed, files that wait, whether it is stalled - and how it is set up.
- New Check "App: SwyxIt! Outlook access": the crashes of the helper that reads Outlook
for SwyxIt!, each beside what Outlook did in the same minute.
- New Check "App: SwyxIt! trace log". A log that writes a stack trace line by line
counts an error once, and errors without a kind are told apart by what they say.
- "Netzabhängigkeiten: nicht untersucht" is called "... was nicht gelesen werden
konnte": it says in words what could not be asked, names the processes Windows opens
to nobody apart as nothing to do, and asks for admin rights only where they help.
- A list of things with how often each ("3x", "2 von 9") is shown as rows in the Report.
- Addresses, names with their domain and paths on a share are set apart a little in
"Handlungsbedarf" and "Alle Prüfungen nach Bereich".
- An adapter with nothing against it is OK and no longer grey, and its power saving
alone no longer makes a "Kein Verdacht möglich".
- "Richtlinienerweiterung" was a word of ours: the Report says "Client-Side Extension".
- A program that an application's own Check judges is counted among the crashes and
no longer warned of a second time there.
- An application that is closed, or installed where a program is expected, is in order
and no longer stands among what needs doing.
0.21.0 - The Windows Firewall, and a repaired machine that reads as repaired.
- New Check "Windows Firewall": on or off per profile and which profile applies, as
what Windows classed each network (a machine of a domain that did not recognise its
domain), and every rule in force that Windows did not bring, the blocking ones first.
Without admin rights. In the Scopes Network and SignIn.
- The suspicion about drives mapped by the domain's name is called "Domäne:
Bereitstellung der Netzlaufwerke": the title says that the machine is not at fault.
- "Freigabe am Server nicht gefunden" says when it last happened.
- A suspicion says when what it rests on was last seen, where its Findings know: a fault
that was repaired last week still fills the month a Report reads.
- In the list of sign-ins the column is called "Nach Abriss neu verbunden über", and a
sign-in without one says "kein Abriss": addresses for the older sign-ins only mean that
the fault has stopped, and no longer look like a gap.
- "Dateifreigaben: fehlgeschlagene Verbindungen zu Servern" names a host on the internet
apart and says what it is; it no longer warns or reads as a Server that is gone.
0.20.0 - What the domain controllers hand out.
- New Finding "Namensraum hinter dem Domänennamen (DFS)": for every drive mapped by the
domain's name, the Servers the namespace names, and whether each is there. An entry
that still names a Server which is gone is a warning, with the entry and the Server.
- New Finding "Richtlinien auf den Domänencontrollern (SYSVOL)": the version of every
policy read from each domain controller and compared. A difference means replication
between them is behind or has stopped.
- Both without admin rights, and both say the cause first in the suspicion "Laufwerke
über den Namen der Domäne".
- The list of sign-ins names the domain controller Group Policy used at each, and says
"nichts protokolliert" where a cell was empty.
- New Finding "Anmeldeserver dieser Sitzung", in the area of the domain.
0.19.1 - Three from a Run.
- "Uhrzeit gegen die Zeitquelle" takes the time source a policy sets: it named the domain
for a machine whose policy names an NTP server.
- Connections to several Servers lost once each no longer make a suspicion about this
machine's connection beside an adapter with power saving on.
- "Zeitdienst: Stand" says minutes where it was minutes, and the server by its name.
0.19.0 - Drives that come late.
- New suspicion "Laufwerke über den Namen der Domäne": where the mapping of the drives is
slow in some runs, the domain's name answers "share not found", and sign-ins are slow on
some days - by one domain controller and not the other - the Report says so in one
place, and what to check on the controllers.
- A name that leads to several addresses is shown with all of them ("führt zu ..."), and
no longer with the first one as if that were the Server.
- The sign-in Finding counts over every sign-in the logs hold: "Alle 13 langsamen
Anmeldungen liefen über ..., alle 13 schnellen über ...".
0.18.1 - A gap that names its Checks.
- "Kein Verdacht möglich" in a narrowed Run names the Checks that would have looked for
that suspicion, and no longer the whole list of what the Scope left out. The Checks of
the applications count among them where a Scope takes none.
- The title of a Scope with an umlaut reads as it is written: from the Published
Definitions "Domäne" arrived as two other letters.
- New: "Zeitdienst: Stand" - when the time service of Windows last synchronised and with
what source, asked of Windows and shown, where the Report told the reader to type the
query. Asked only: a Run does not set the clock.
- A failed policy extension names its items and the policy each comes from. Where it has
one, that is the one that fails.
- "Freigabe am Server nicht gefunden" names the shares where the events name them, and
says that Windows names none where they do not.
0.18.0 - A Run for one question.
- New: -Scope narrows a Run to a named part of the Checks - Hardware, Network, SignIn, or
Quick (everything but the two load tests). On an interactive Run the choice is offered in
the "Umfang" card, with everything where Enter takes it. A Run without a Scope is the Run
it always was.
- A narrowed Run says so: one Finding names what it left out, the box at the top of the
Report names the Scope, and a suspicion says what was not checked.
- The Scopes are part of the Check Definitions and are published with them.
- A Check that reads another says so where that one did not run: a .NET runtime nobody
looked for is no longer "in order", and slow sign-ins say that nobody read which domain
controller they went to.
Versions 0.1 to 0.17.1: https://github.com/kort3x/gutcheck/blob/main/docs/release-notes-earlier.md
FileList
- Gutcheck.nuspec
- Definitions\checks.json
- Gutcheck.psd1
- Gutcheck.psm1
- Invoke-GutcheckElevated.ps1
- Private\Account.ps1
- Private\AppSelection.ps1
- Private\Autoupdate.ps1
- Private\Code.ps1
- Private\Console.ps1
- Private\Data.ps1
- Private\Definition.ps1
- Private\Elevation.ps1
- Private\Finding.ps1
- Private\KeepSignIn.ps1
- Private\Kind.ps1
- Private\Kinds\App.ps1
- Private\Kinds\AppConnection.ps1
- Private\Kinds\AppLog.ps1
- Private\Kinds\AppRuntime.ps1
- Private\Kinds\Autodiscover.ps1
- Private\Kinds\Battery.ps1
- Private\Kinds\BootPerformance.ps1
- Private\Kinds\BrowserExtension.ps1
- Private\Kinds\Change.ps1
- Private\Kinds\Companion.ps1
- Private\Kinds\Cpu.ps1
- Private\Kinds\CrashDump.ps1
- Private\Kinds\DiskHealth.ps1
- Private\Kinds\DiskTest.ps1
- Private\Kinds\Domain.ps1
- Private\Kinds\DotNet.ps1
- Private\Kinds\Firewall.ps1
- Private\Kinds\FolderSize.ps1
- Private\Kinds\GroupPolicy.ps1
- Private\Kinds\HttpsEndpoint.ps1
- Private\Kinds\ImageIntegrity.ps1
- Private\Kinds\Logon.ps1
- Private\Kinds\Memory.ps1
- Private\Kinds\Network.ps1
- Private\Kinds\NetworkDependency.ps1
- Private\Kinds\NetworkDependencyElevated.ps1
- Private\Kinds\NetworkDependencyReference.ps1
- Private\Kinds\NetworkDisruption.ps1
- Private\Kinds\NetworkProtocol.ps1
- Private\Kinds\Nextcloud.ps1
- Private\Kinds\Odbc.ps1
- Private\Kinds\OfficeAddins.ps1
- Private\Kinds\OneDrive.ps1
- Private\Kinds\OutlookAuth.ps1
- Private\Kinds\OutlookData.ps1
- Private\Kinds\Power.ps1
- Private\Kinds\Printing.ps1
- Private\Kinds\Program.ps1
- Private\Kinds\ProgramElevated.ps1
- Private\Kinds\RemoteDesktop.ps1
- Private\Kinds\Security.ps1
- Private\Kinds\Server.ps1
- Private\Kinds\Service.ps1
- Private\Kinds\Session.ps1
- Private\Kinds\SessionElevated.ps1
- Private\Kinds\Stability.ps1
- Private\Kinds\Startup.ps1
- Private\Kinds\Storage.ps1
- Private\Kinds\Stress.ps1
- Private\Kinds\System.ps1
- Private\Kinds\Temperature.ps1
- Private\Kinds\Updates.ps1
- Private\Kinds\UserProfile.ps1
- Private\Kinds\UserProfileElevated.ps1
- Private\Kinds\UserProfileOther.ps1
- Private\Kinds\UserSetting.ps1
- Private\Kinds\WebFolder.ps1
- Private\Lead.ps1
- Private\Parameter.ps1
- Private\Probe.ps1
- Private\Progress.ps1
- Private\PublishedDefinitions.ps1
- Private\QrCode.ps1
- Private\Reading.ps1
- Private\Report.ps1
- Private\ReportGlossary.ps1
- Private\Sampling.ps1
- Private\Scope.ps1
- Private\Section.ps1
- Private\Signal.ps1
- Private\Situation.ps1
- Private\Sqlite.ps1
- Private\Text.ps1
- Private\TokenCache.ps1
- Public\Invoke-Gutcheck.ps1
- Vendor\Lantern.ps1
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 0.28.0 | 6 | 10/15/2026 |
| 0.27.0 | 7 | 10/15/2026 |
| 0.26.0 | 7 | 10/14/2026 |
| 0.25.0 | 7 | 10/14/2026 |
| 0.24.1 (current version) | 3 | 10/14/2026 |
| 0.24.0 | 10 | 10/14/2026 |
| 0.23.0 | 7 | 10/13/2026 |
| 0.22.0 | 6 | 10/13/2026 |
| 0.21.0 | 5 | 10/13/2026 |
| 0.20.0 | 7 | 10/13/2026 |
| 0.19.1 | 7 | 10/12/2026 |
| 0.19.0 | 4 | 10/12/2026 |
| 0.18.1 | 4 | 10/12/2026 |
| 0.18.0 | 5 | 10/12/2026 |
| 0.17.1 | 3 | 10/12/2026 |
| 0.17.0 | 6 | 10/12/2026 |
| 0.16.0 | 7 | 10/12/2026 |
| 0.15.1 | 16 | 10/12/2026 |
| 0.15.0 | 6 | 10/12/2026 |
| 0.14.1 | 7 | 10/11/2026 |
| 0.14.0 | 7 | 10/11/2026 |
| 0.13.0 | 7 | 10/11/2026 |
| 0.12.1 | 8 | 10/11/2026 |
| 0.12.0 | 5 | 10/11/2026 |
| 0.11.3 | 6 | 10/11/2026 |
| 0.11.2 | 8 | 10/10/2026 |
| 0.11.1 | 8 | 10/10/2026 |
| 0.11 | 5 | 10/10/2026 |
| 0.10 | 5 | 10/10/2026 |
| 0.9.1 | 10 | 10/10/2026 |
| 0.9 | 8 | 10/10/2026 |
| 0.8.3 | 5 | 10/9/2026 |
| 0.8.2 | 4 | 10/9/2026 |
| 0.8.1 | 3 | 10/9/2026 |
| 0.8 | 3 | 10/9/2026 |
| 0.7.2 | 4 | 10/9/2026 |
| 0.7.1 | 6 | 10/9/2026 |
| 0.6.2 | 7 | 10/8/2026 |
| 0.6.1 | 6 | 10/8/2026 |
| 0.6 | 4 | 10/8/2026 |
| 0.5.2 | 6 | 10/7/2026 |
| 0.5.1 | 8 | 10/7/2026 |
| 0.5 | 5 | 10/7/2026 |
| 0.4 | 19 | 9/25/2026 |
| 0.3 | 7 | 9/25/2026 |
| 0.2 | 7 | 9/24/2026 |