Gutcheck.psd1

@{
    RootModule        = 'Gutcheck.psm1'
    ModuleVersion     = '0.16.0'
    GUID              = 'ce76f1fb-5362-4093-83f3-e8eb17deae0e'
    Author            = 'MERLIN'
    CompanyName       = 'MERLIN'
    Copyright         = '(c) 2026 MERLIN. Licensed under the MIT License.'
    Description       = '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.'

    # Target Machines without PowerShell 7 must stay supportable.
    PowerShellVersion = '5.1'
    CompatiblePSEditions = @('Desktop', 'Core')

    FunctionsToExport = @('Invoke-Gutcheck')
    CmdletsToExport   = @()
    VariablesToExport = @()
    AliasesToExport   = @('gutcheck')

    PrivateData = @{
        PSData = @{
            Tags         = @(
                'Windows', 'Diagnostics', 'Performance', 'Support', 'Troubleshooting',
                'Helpdesk', 'Hardware', 'Reporting'
            )
            ProjectUri   = 'https://github.com/kort3x/gutcheck'
            LicenseUri   = 'https://github.com/kort3x/gutcheck/blob/main/LICENSE'
            ReleaseNotes = @'
0.16.0 - What takes time before the desktop.
- "Anmeldung: Zeit bis zum Desktop": how long the User's sign-ins take, and where the
  time of the last one went - loading the profile, Group Policy, the other parts of
  Windows, the start of the shell and its own tasks. Needs no admin rights.
- "Anmeldung: Autostart-Programme": Windows starts them one after the other, about
  thirty seconds apart. The Finding says when the last one starts; with twelve, that is
  six minutes after the sign-in.
- Two tables: every sign-in with its phases, and the last one step by step.
- The start duration says what the last start was spent on: the way to the desktop,
  the settling after it, and the time the machine stood at the sign-in screen.
- Ping loss measured while the processor was busy is graded a step milder, and the
  Finding says how busy the machine was and to measure again: a machine at full load
  loses pings on a line that is in order.
- Loss to the gateway is worded by what the machine hangs on. A desktop at a cable is no
  longer told about its Wi-Fi.
0.15.1 - A crash minutes after the drop.
- A program on a share is held against a lost connection up to 30 minutes before its
  crash, no longer 10. The Finding says how long after the drop the crashes came and
  for how many the connection was already back, and what that means.
- "Wechsel zwischen Kabel und WLAN": a cable connection that keeps failing over to
  Wi-Fi and back is a Finding, and the Lead about the connection then says so.
- Warnings and errors of the adapters' own drivers stand in the network timeline, for
  any maker, with the adapter named.
- Disk errors are three Findings under "Speicher": built-in drives, external drives
  (USB), and what names no drive. An unplugged stick no longer colours the answer about
  the SSD. A table lists every error with its drive.
- DNS in one place: each DNS server asked by itself, and every event about DNS.
- "Kein Domänencontroller erreichbar" with an internal error is the secure channel that
  comes about at the second attempt (Windows 11 24H2 and later against domain
  controllers before Server 2025): shown, explained, and no longer a warning. Beside it
  the age of the computer account's password, which warns where it is no longer renewed.
0.15.0 - More than file shares.
- Remote Desktop: connections from this machine that never came about or were cut by
  the network, per server ("2 of 9"), each reason with the sentence Windows shows for
  it, and a server whose one name led to several addresses. Every connection of every
  account is listed with its time and length, to read the failures against.
- What Windows logged of other protocols failing, one Finding each: sign-in to the
  domain (no domain controller, broken trust, Kerberos), DNS time-outs, time
  synchronisation, DHCP, wired 802.1X, TLS, Windows' own "no internet", and Windows'
  own VPN. A code always has its meaning beside it.
- The clock is measured against its time source: a warning from one minute, a failure
  from five, where the domain refuses sign-ins.
- What Windows says of the internet right now, and whether its own probe is off.
- Web folders (WebDAV): where a drive is one, the state of the service, the largest
  file it takes and automatic proxy detection.
- Every name DNS did not answer for is named, and Windows' message is kept whole.
- "Fehlgeschlagene Verbindungen zu Servern" no longer says to remove what points at a
  server that exists and was only unreachable for a while.
0.14.1 - The system's processes, really read.
- A Run with admin rights still said of the service processes that their modules were
  not readable for lack of rights. The admin part now switches on the right to open any
  process while it reads them, and a reading that found nothing on a share counts as
  one. What is refused then is said as what it is: protected by Windows.
0.14.0 - What two Runs left open.
- The processes of the system, which a Run may not open in the user's session, are read
  with admin rights for what they depend on. "Netzabhängigkeiten: nicht untersucht" no
  longer says "only with admin rights" of a Run that had them.
- A limited processor is said to be limited by what: the power plan's maximum, Windows'
  thermal throttle with the temperature, or the firmware. A table shows what was read.
- "Keine in 30 Tagen" for network disruptions says since when it can say so, where a log
  does not reach back the whole period, and names the log.
- No Hint sends the reader to events.csv: print errors by printer, an application's
  service crashes and Windows' warnings of low memory are tables of the Report.
- What Windows logs of a failed print names the document and whose it was. That text is
  no longer kept, and the name of a waiting print job is no longer read.
- A Finding graded on a number of events says so: "Ereignisse: 120 in 30 Tagen".
- The newest 200 network disruptions are listed. The Servers of a connection Finding
  are a list, with how many more there are, and both say that only SMB is counted.
0.13.0 - What belongs together, and what stays behind.
- The folder the admin part hands its readings over in could stay behind after a Run,
  readable by every user of the PC. It is the Run's alone now and is deleted; where it
  still stays, the Finding "Administrator-Teil" warns and names it.
- Outlook: a mailbox on the own Exchange beside an account at Microsoft 365 warns only
  where Windows logged a program asking for an account it does not have.
- The applications are chosen from a list in columns, as many as the window is wide for.
  Ctrl+N selects none. Left and Right go to the column beside.
- A Check's row is named without "App:", and a long name no longer pushes its row out of
  line. The admin part's bar moves by the Checks it has finished, the result's bar while
  the Report is written.
- A crashing program's Hints name what this machine is connected by: cable and switch
  port, or the Wi-Fi. What a .NET exception type means is said apart from what to do.
- Hardware errors are counted by component. Only those of the memory support the
  "Verdacht" for memory; an adapter whose power saving is on supports the one for the
  connection, beside a link that dropped.
- A Finding that is not in order links to the one that looked for the same and found
  nothing: disk errors to a drive that reports itself healthy.
- A Run in another account's session says so once, also for Outlook's sign-in, and
  notices it without admin rights too.
0.12.1 - The whole Run in cards.
- The search for a newer version and the sign-in for the Check Definitions are cards
  too, under the banner. The QR code stands in its card and is gone once signed in.
- A card is as wide as the window, so that what a Check found can be read, and two
  thirds of its height at most.
- A Run of many Checks no longer flickers, and no progress bar of PowerShell's flashes
  over it. The result has a bar while the Report is written.
- A Run prints nothing after the path to its Report. -PassThru hands back the Run.
- The banner is a small face where the window can draw it, and it blinks.
0.12.0 - A Run you can watch.
- In PowerShell 7 a Run shows what it examines, the Checks and the result as three cards.
  Each Check is a row with its progress and the worst of what it found; a finished part
  folds to one line, and the result stays open with every FAIL and WARN.
- The applications are chosen from a list to move in, with everything detected selected.
  A name that is on no list can be typed and is checked as a process.
- On Windows PowerShell 5.1 a Run writes what it always wrote, a line for every Finding.
  Its questions are asked as a numbered list and a typed line.
- The questions about another user's session are a choice of three and a yes or no,
  where they were letters to type.
- console.log has every line as one line where the window has colour.
0.11.3 - What a terminal server showed.
 
- On Windows Server 2019 every HTTPS endpoint failed with an error about
  "SslProtocolType": that was Gutcheck's way of asking and no fault of the server asked.
  It is asked again naming TLS 1.2.
- Each User Profile gets its share of the measuring time, three minutes in all: on a
  server with 32 profiles one had been measured.
- A Windows Server is said to keep no list of antivirus programs and to record no boot
  duration, where the Report said "nicht verfuegbar".
- A path handed in single quotes ends at its quote, and an error number Windows has no
  sentence for is said to have none.
 
0.11.2 - Evidence a second level can read.
 
- Every table of the evidence sorts by any column and filters by a word, and has a help
  behind a "?" that says what it shows, where it comes from and how to read it.
- The adapters' power saving and SMB client, the proxy and the wireless interface are
  tables that say what each value does, where they were lines as they came.
- A process that hosts services names the services in it, in its Finding and in a table.
- The part with admin rights runs without a window of its own; the Run's window says
  which Check it is at. -ShowElevatedWindow shows it as before.
- An Outlook profile with a mailbox on the own Exchange and one in Exchange Online has
  the sign-in looked at for both.
 
0.11.1 - Whose it is, and where to read on.
 
- For Outlook, the Servers of the mailboxes that are set up are measured: the
  Customer's own Exchange for a mailbox that is on it, Microsoft 365 for one in Exchange
  Online. Each measurement says whose Server it is.
- Sign-in errors at Microsoft 365 are told apart by program: Outlook and Office in one
  Finding, OneDrive, Teams, the browser and the others in a Finding of their own.
- A Finding that a text names by its title is a link to it.
- Where the log holds no Group Policy run at startup or at sign-in, the Report says why.
 
Versions 0.1 to 0.11: https://github.com/kort3x/gutcheck/blob/main/docs/release-notes-earlier.md
'@

        }
    }
}