Files
Scripting/Powershell/README.md

156 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<h2>Directory Contents</h2>
<h2>Register-UniversalTask-TUI.ps1</h2>
DESCRIPTION
Streamlines task creation and management across multiple servers:
- Always runs as SYSTEM
- Supports Once/Daily/Weekly/Monthly triggers
- Custom action command + arguments
- Custom settings (start when available, wake to run, restart on failure)
- Optionally list existing tasks
- Can target a remote server via CIM session
<strong>Usage:</strong>
Launch the menu on local machine:
```.\Register-UniversalTask-TUI.ps1 -RunTUI```
Youll be prompted step-by-step to list or create tasks, including remote targeting.
---
---
<h2>Invoke-DiskCleanupScan.ps1</h2>
`Invoke-DiskCleanupScan.ps1` is a PowerShell script for recovering disk space on Windows Server 2016 through current versions. It performs a full scan of the C: drive across all known bloat sources, presents a grouped findings report with sizes, then requires explicit user confirmation before touching anything.
Supports: **Windows Server 2016, 2019, 2022, 2025**
Requires: **Run as Administrator**
---
## Features
- Full pre/post drive capacity reporting
- Grouped scan results with colour-coded size indicators
- Interactive cleanup mode — clean all, pick individually, or exit
- **Event log backup to Zipline (pebkac.pro) before any wipe**
- IIS log cleanup scoped to files older than 30 days
- Delivery Optimisation cache cleanup with safe service stop/start
- PS 5.1 compatible — no PowerShell 7 required
---
## What It Scans
| Category | Target |
|---|---|
| Temp Files | `C:\Windows\Temp`, `$env:TEMP`, User AppData Temp |
| Windows Update | `SoftwareDistribution\Download`, `WinSxS\Backup` |
| System Logs | `C:\Windows\Logs\CBS` |
| Error Reporting | WER ReportQueue, ReportArchive, User WER folder |
| Crash Dumps | `C:\Windows\Minidump`, `MEMORY.DMP` |
| Prefetch | `C:\Windows\Prefetch` (*.pf files) |
| Delivery Optimisation | SoftwareDistribution\DeliveryOptimization, NetworkService profile cache |
| IIS Logs | `C:\inetpub\logs\LogFiles`, `W3SVC1` (files >30 days) |
| Windows Event Logs | All `.evtx` logs — **backed up before wipe** |
| Recycle Bin | C: Recycle Bin via Shell COM object |
| Cache | Thumbnail cache, Font cache |
| Installer | MSI Patch Cache ⚠️ |
| User Profiles | Non-system profiles in `C:\Users` ⚠️ |
| Legacy | Downloaded Program Files |
> ⚠️ **MSI Patch Cache** — deleting may break MSI repair/uninstall for some applications. Only select this if space is critical and you have installer media available.
> ⚠️ **Old User Profiles** — script flags these for review. Manual verification is strongly recommended before selecting.
---
## Event Log Backup — Zipline Integration
Before any event log is cleared, the script automatically:
1. Exports all non-empty event logs to `.evtx` files in a temp staging folder
2. Compresses them into a single zip: `HOSTNAME_EventLogs_YYYYMMDD-HHmmss.zip`
3. Uploads the zip to **pebkac.pro** via the Zipline API
4. **Only clears logs if the upload returns HTTP 200/201/204**
5. If upload fails for any reason — logs are NOT wiped, and the local export path is printed
The file URL returned by Zipline is printed to console for reference.
**Upload endpoint:** `https://pebkac.pro/api/upload`
**Auth header:** `authorization: <token>` (bare token, no `Bearer` prefix — Zipline-specific)
**Extra header:** `x-zipline-original-name: true`
**Response field:** `.files[0].url`
---
## Usage
```powershell
# Run in an elevated PowerShell session
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\Invoke-DiskCleanupScan.ps1
```
### Cleanup Menu
```
[A] Clean ALL items listed above
[S] Select items individually
[X] Exit — do nothing
```
- Choosing **A** requires typing `YES` in full to confirm
- Choosing **S** prompts Y/N per item
- All confirmations require input in the console — nothing runs silently
---
## Output Example
```
C: Drive Status
────────────────────────────────────────────────────────────
Total: 120.00 GB Used: 108.42 GB Free: 11.58 GB (9.7% free)
[Windows Update]
────────────────────────────────────────────────────────────
SoftwareDistribution\Download 3.21 GB (Cached WU downloads)
WinSxS\Backup 512.00 MB (Old component backups)
[Event Logs]
────────────────────────────────────────────────────────────
Windows Event Logs (*.evtx) 1.84 GB (Will clear all logs — review first)
...
TOTAL RECOVERABLE 9.10 GB
```
---
## Notes & Caveats
- **Event logs**: All logs are cleared when selected. The Zipline backup is the safety net — don't skip it or remove that gate.
- **IIS logs**: Only files older than 30 days are removed. Adjust the `$cutoff` variable in the script if you need a different retention window.
- **Prefetch**: Windows Server typically has Prefetch disabled by default. The script will skip this silently if no `.pf` files are found.
- **WinSxS**: The script removes `WinSxS\Backup` only — it does not touch the main WinSxS store. Running `DISM /Online /Cleanup-Image /StartComponentCleanup` separately is recommended for deeper WinSxS reduction but requires a maintenance window.
- **Delivery Optimisation**: The `DoSvc` service is stopped briefly during cleanup and restarted. If the server is actively downloading updates this may cause a minor interruption.
---
## Script Location
Store the script in a consistent admin tools location, e.g.:
```
\\<server>\AdminTools\Scripts\Invoke-DiskCleanupScan.ps1
```
Or maintain in your preferred source control / internal repo.
<h2>Everything Else</h2>
Still working documenting this crap