Zoeken op website

Je verspilt je tijd aan Windows—deze 3 PowerShell-scripts besparen me elke week uren


Er is een versie van je Windows-installatie waarbij bestanden zichzelf sorteren, back-ups stilletjes op de achtergrond gebeuren, en alles wat je kopieert automatisch wordt opgeslagen voor later. En het beste is dat je geen ingewikkelde software van derden hoeft te installeren om dit te laten gebeuren. PowerShell is ingebouwd in Windows en kan al het saaie werk voor je automatiseren. Om je een idee te geven van wat mogelijk is, zijn hier drie scripts die de meest repetitieve delen van mijn dag automatiseren.

Alle drie de scripts worden volledig geleverd. Voordat u een van hen uitvoert, opent u het script in een teksteditor en vult u het CONFIGURATIE-gedeelte bovenaan in. Elk script is duidelijk gemarkeerd met een "Bewerk niets onder deze regel"-commentaar, zodat u precies weet wat u moet aanpassen en wat u ongemoeid kunt laten.

Eerst, hier is hoe PowerShell-automatisering eigenlijk werkt

Twee dingen om te weten voordat dit allemaal werkt

Een PowerShell-script is gewoon een tekstbestand met een .ps1 extensie. Je schrijft er wat opdrachten in, slaat het bestand op, en wanneer je het uitvoert, worden die opdrachten uitgevoerd. Je kunt dubbelklikken op het bestand om het uit te voeren, of je kunt het automatisch laten uitvoeren met Taakplanner.

Nu is Taakplanner een onderwerp op zich. Hier is een basisgids om je te helpen begrijpen hoe het werkt. Voor de scripts die hier worden besproken, wanneer iets bedoeld is om bij het opstarten te draaien, wordt het eenvoudigweg geconfigureerd in Taakplanner met de trigger ingesteld op "Bij het aanmelden".

Ook, voordat je een .ps1-bestand voor de eerste keer uitvoert, is er één ding dat je moet doen. Zie je, Windows blokkeert standaard PowerShell-scripts. Om dit te omzeilen, open PowerShell en voer deze opdracht één keer uit:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Je hoeft dit daarna niet opnieuw uit te voeren.

Voer geen willekeurige PowerShell-scripts van het internet uit tenzij je begrijpt wat ze doen. Ze kunnen mogelijk malware introduceren of je systeem beschadigen. De hier gedeelde scripts zijn getest en werken zoals beschreven, maar als beste praktijk kun je ze toch door Gemini of Claude laten lopen om te begrijpen hoe ze werken als je niet vloeiend bent in PowerShell.

Sla mijn klembordgeschiedenis op in een dagelijks Markdown-bestand

Een blijvende klembordgeschiedenis voor Windows










Het klembordgeschiedenis van Windows (Win + V) slaat slechts 25 items op, en alles wat niet vastgemaakt is, wordt gewist telkens wanneer je je pc opnieuw opstart. Ik kopieer veel dingen gedurende de dag, en ik wil vaak dat die geschiedenis op de lange termijn bewaard blijft. Normaal betekent dat het handmatig plakken van belangrijke fragmenten in een apart bestand, wat onnodige wrijving toevoegt.

Dus ik heb een script gemaakt dat stilletjes op de achtergrond draait, elke vijf seconden het klembord controleert en alles wat nieuw is gekopieerd toevoegt aan een Markdown-bestand. Het maakt ook automatisch elke dag een nieuw bestand aan op basis van de huidige datum, wat alles chronologisch geordend houdt en later gemakkelijk te doorzoeken maakt.

Als je meerdere dingen binnen hetzelfde interval van vijf seconden kopieert, wordt alleen de meest recente klembordvermelding opgeslagen in het Markdown-bestand. Als je de neiging hebt om inhoud heel snel te kopiëren, overweeg dan om het pollinginterval te verlagen naar één seconde. Dat zal het CPU-gebruik iets verhogen, maar op een redelijk modern systeem zou de impact verwaarloosbaar moeten zijn.

Ik heb het script ook zo ontworpen dat het alfanumerieke tekenreeksen die geen website-URL's zijn, overslaat met behulp van regex. Op die manier is de kans kleiner dat wachtwoorden, API-sleutels of andere gevoelige tokens die je kopieert per ongeluk worden geregistreerd.

Hier is het script:

# ============================================================
# Save-Clipboard.ps1
# Monitors your clipboard every few seconds and saves new
# entries to a dated .md file. Skips anything that looks
# like a password or API token (no spaces, not a URL).
#
# Runs silently in the background on login via Task Scheduler.
#
# SETUP: Edit the path in the CONFIGURATION section below.
# ============================================================

# ============================================================
# CONFIGURATION — Edit this to match your system
# ============================================================

# Folder where dated clipboard .md files will be saved
$saveFolder   = "C:\Users\YourNAME\OneDrive\Documents\Clipboard History"

# How often to check the clipboard (in seconds)
$pollInterval = 5

# ============================================================
# SCRIPT — Do not edit below this line
# ============================================================

if (-not (Test-Path $saveFolder)) {
    New-Item -ItemType Directory -Path $saveFolder | Out-Null
}

$lastEntry = ""

while ($true) {
    Start-Sleep -Seconds $pollInterval

    try {
        $current = Get-Clipboard -Raw
    } catch {
        continue
    }

    if ([string]::IsNullOrWhiteSpace($current)) { continue }
    if ($current -eq $lastEntry) { continue }
    if ($current -notmatch '\s' -and $current -notmatch '^https?://') { continue }

    $lastEntry = $current

    $date     = Get-Date -Format "yyyy-MM-dd"
    $filePath = Join-Path $saveFolder "Clipboard_$date.md"

    if (-not (Test-Path $filePath)) {
        "# Clipboard Log - $date`n" | Out-File -FilePath $filePath -Encoding UTF8
    }

    $timestamp = Get-Date -Format "HH:mm:ss"
    $entry = "## $timestamp`n$current`n`n===================`n`n===================`n"
    $entry | Out-File -FilePath $filePath -Append -Encoding UTF8
}

Omdat het script continu op de achtergrond draait, stopt het elke keer dat je je pc opnieuw opstart of afsluit. Om ervoor te zorgen dat het automatisch opnieuw wordt gestart, wil je een Taakplanner-item maken dat het elke keer uitvoert wanneer je inlogt.

Automatisch verplaatsen van voltooide downloads op basis van bestandstype

Alle bestanden automatisch georganiseerd in een paar seconden





Mijn Downloads-map is eigenlijk een digitale rommellade. Je hebt installers gemengd met PDF's gemengd met willekeurige ZIP-bestanden die ik weken geleden ben vergeten. Dit script gaat door die gedownloade bestanden en organiseert ze automatisch op bestandstype.

Het scant de map Downloads, controleert de extensie van elk bestand en verplaatst het naar de juiste locatie. Documenten gaan naar Documenten, afbeeldingen naar Afbeeldingen, geluidsbestanden naar Muziek en video's naar Video's. Installatiebestanden (.exe, .msi en .msix) gaan in een speciale submap Installers binnen Downloads. Alles wat het niet herkent wordt verplaatst naar een submap Ongeorganiseerd, ook binnen Downloads, voor later handmatig sorteren.

Hier is het script:

# ============================================================
# Organize-Downloads.ps1
# Moves files from your Downloads folder into sorted folders
# based on file type. Runs on system startup via Task Scheduler.
#
# SETUP: Edit the paths in the CONFIGURATION section below.
# ============================================================

# ============================================================
# CONFIGURATION — Edit these to match your system
# ============================================================

$downloads    = "PATH_to_Downloads"
$documents    = "PATH_to_Documents"
$pictures     = "PATH_to_Pictures"
$music        = "PATH_to_Music"
$videos       = "PATH_to_Videos"

# These two folders are created inside your Downloads folder automatically
$installers   = "$downloads\\Installers"
$unorganized  = "$downloads\\Unorganized"

# ============================================================
# FILE TYPE RULES — Add or remove extensions as needed
# ============================================================

$extensionMap = @{
    # Documents
    ".pdf"  = $documents
    ".docx" = $documents
    ".doc"  = $documents
    ".xlsx" = $documents
    ".xls"  = $documents
    ".pptx" = $documents
    ".ppt"  = $documents
    ".txt"  = $documents
    ".csv"  = $documents

    # Pictures
    ".jpg"  = $pictures
    ".jpeg" = $pictures
    ".png"  = $pictures
    ".gif"  = $pictures
    ".webp" = $pictures
    ".svg"  = $pictures
    ".bmp"  = $pictures
    ".raw"  = $pictures

    # Music
    ".mp3"  = $music
    ".flac" = $music
    ".wav"  = $music
    ".aac"  = $music
    ".ogg"  = $music

    # Videos
    ".mp4"  = $videos
    ".mkv"  = $videos
    ".avi"  = $videos
    ".mov"  = $videos
    ".wmv"  = $videos

    # Installers
    ".exe"  = $installers
    ".msi"  = $installers
    ".msix" = $installers
}

# ============================================================
# SCRIPT — Do not edit below this line
# ============================================================

$allDestinations = @($documents, $pictures, $music, $videos, $installers, $unorganized)
foreach ($dest in $allDestinations) {
    if (-not (Test-Path $dest)) {
        New-Item -ItemType Directory -Path $dest | Out-Null
    }
}

$files = Get-ChildItem -Path $downloads -File

foreach ($file in $files) {
    $ext = $file.Extension.ToLower()

    if ($extensionMap.ContainsKey($ext)) {
        $targetFolder = $extensionMap[$ext]
    } else {
        $targetFolder = $unorganized
    }

    $destination = Join-Path $targetFolder $file.Name
    if (Test-Path $destination) {
        $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
        $newName = "$($file.BaseName)_$timestamp$($file.Extension)"
        $destination = Join-Path $targetFolder $newName
    }

    Move-Item -Path $file.FullName -Destination $destination
}

Het script kijkt alleen naar bestanden die zich rechtstreeks in de map Downloads bevinden. Alles wat al in een submap zit, wordt ongemoeid gelaten. Het maakt ook automatisch de mappen Installers en Unorganized aan als deze nog niet bestaan.

Persoonlijk geef ik er de voorkeur aan dit script handmatig uit te voeren wanneer mijn Downloads-map te vol begint te raken. Maar als je een volledig automatische setup wilt, kun je Taakplanner gebruiken om het automatisch uit te voeren elke keer dat je inlogt.

Automatisch een back-up maken van mijn Obsidian-kluis met een doorlopende 7-daagse geschiedenis

Dagelijkse ZIP-back-ups voor uw belangrijke bestanden




Ik heb een script dat dagelijks een back-up maakt van mijn Obsidian-kluis—een map vol notities in Markdown-formaat—dit comprimeert in een ZIP-bestand, opslaat op een aparte locatie, en automatisch back-ups ouder dan zeven dagen verwijdert. Dit geeft me een rollende week van herstelpunten zonder dat de back-upmap steeds groter wordt.

Je hoeft geen Obsidian-gebruiker te zijn om van zoiets te profiteren. Je kunt dezelfde setup aanpassen om elke belangrijke map op je systeem te back-uppen.

Hier is het script:

# ============================================================
# Backup-Obsidian.ps1
# Creates a dated ZIP backup of your Obsidian vault on login.
# Automatically deletes backups older than 7 days.
#
# SETUP: Edit the paths in the CONFIGURATION section below.
# ============================================================

# ============================================================
# CONFIGURATION — Edit these to match your system
# ============================================================

# Full path to your Obsidian vault folder
$vaultPath     = "PATH_to_ObsidianVault"

# Folder where backups will be saved (can be a different drive)
$backupFolder  = "PATH_to_backups"

# How many days of backups to keep (older ones get deleted)
$daysToKeep    = 7

# ============================================================
# SCRIPT — Do not edit below this line
# ============================================================

if (-not (Test-Path $backupFolder)) {
    New-Item -ItemType Directory -Path $backupFolder | Out-Null
}

$date        = Get-Date -Format "yyyy-MM-dd"
$zipName     = "Obsidian_Backup_$date.zip"
$zipPath     = Join-Path $backupFolder $zipName

if (Test-Path $zipPath) {
    Write-Output "Backup for today already exists. Skipping."
    exit
}

Compress-Archive -Path $vaultPath -DestinationPath $zipPath
Write-Output "Backup created: $zipPath"

$cutoffDate = (Get-Date).AddDays(-$daysToKeep)
$oldBackups = Get-ChildItem -Path $backupFolder -Filter "Obsidian_Backup_*.zip" |
              Where-Object { $_.LastWriteTime -lt $cutoffDate }

foreach ($old in $oldBackups) {
    Remove-Item $old.FullName -Force
    Write-Output "Deleted old backup: $($old.Name)"
}

Idealiter zou je dit script automatiseren met Taakplanner zodat het elke keer dat je inlogt wordt uitgevoerd.


Maak PowerShell-automatiseringen voor jezelf

Dus daar heb je het—drie PowerShell-scripts die veel wrijving uit mijn dagelijkse workflow hebben verwijderd. Maar deze zijn uiteraard afgestemd op hoe ik mijn pc gebruik, en ze zullen waarschijnlijk niet perfect aansluiten bij jouw setup. Hopelijk zetten ze je in ieder geval aan het denken. Zodra je beseft hoeveel repetitief werk Windows kan automatiseren, wordt het moeilijk om niet alle kleine taken op te merken die je nog steeds elke dag handmatig doet.

En als je je eigen scripts wilt maken maar niet vloeiend bent in PowerShell, maken moderne AI-tools het proces verrassend toegankelijk. Je kunt het probleem in eenvoudig Engels beschrijven aan iets als Claude of Gemini, en zij kunnen meestal een goed startpunt voor je genereren.

Gerelateerde artikelen