Recherche de site Web

Vous perdez votre temps sur Windows—ces 3 scripts PowerShell me font gagner des heures chaque semaine


Il existe une version de votre installation Windows où les fichiers se trient automatiquement, les sauvegardes se font discrètement en arrière-plan, et tout ce que vous copiez est automatiquement sauvegardé pour plus tard. Et le meilleur dans tout ça, c'est que vous n'avez pas besoin d'installer de logiciel tiers sophistiqué pour que cela fonctionne. PowerShell est intégré à Windows, et il peut automatiser toutes les tâches ennuyeuses pour vous. Pour vous donner une idée de ce qui est possible, voici trois scripts qui automatisent les parties les plus répétitives de ma journée.

Les trois scripts sont fournis dans leur intégralité. Avant d'exécuter l'un d'entre eux, ouvrez le script dans un éditeur de texte et remplissez la section CONFIGURATION en haut. Chaque script est clairement marqué avec un commentaire « Ne pas modifier en dessous de cette ligne » afin que vous sachiez exactement ce qu'il faut modifier et ce qu'il faut laisser tel quel.

Tout d'abord, voici comment fonctionne réellement l'automatisation PowerShell

Deux choses à savoir avant que tout cela fonctionne

Un script PowerShell est simplement un fichier texte avec une extension .ps1. Vous écrivez des commandes dedans, enregistrez le fichier, et lorsque vous l'exécutez, ces commandes s'exécutent. Vous pouvez double-cliquer sur le fichier pour l'exécuter, ou vous pouvez le programmer pour qu'il s'exécute automatiquement en utilisant le Planificateur de tâches.

Maintenant, le Planificateur de tâches est un sujet à part entière. Voici un guide de base pour vous aider à comprendre comment il fonctionne. Pour les scripts discutés ici, chaque fois que quelque chose est censé s'exécuter au démarrage, il est simplement configuré dans le Planificateur de tâches avec le déclencheur défini sur « Lorsque je me connecte. »

De plus, avant d'exécuter un fichier .ps1 pour la première fois, il y a une chose que vous devrez faire. Vous voyez, Windows bloque les scripts PowerShell par défaut. Pour contourner cela, ouvrez PowerShell et exécutez cette commande une fois :

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Vous n’aurez pas besoin d’exécuter cela à nouveau par la suite.

Ne lancez pas de scripts PowerShell aléatoires provenant d'internet à moins de comprendre ce qu'ils font. Ils peuvent potentiellement introduire des logiciels malveillants ou endommager votre système. Les scripts partagés ici sont testés et fonctionnent comme décrit, mais, par mesure de précaution, vous pouvez quand même les passer par Gemini ou Claude pour comprendre leur fonctionnement si vous n'êtes pas à l'aise avec PowerShell.

Enregistrer l'historique de mon presse-papiers dans un fichier Markdown quotidien

Un historique du presse-papiers persistant pour Windows










L'historique du presse-papiers de Windows (Win + V) ne stocke que 25 entrées, et tout ce qui n'est pas épinglé est effacé chaque fois que vous redémarrez votre PC. Je copie beaucoup de choses tout au long de la journée, et je veux souvent que cet historique persiste à long terme. Normalement, cela signifie coller manuellement les extraits importants dans un fichier séparé, ce qui ajoute une friction inutile.

Alors j'ai créé un script qui fonctionne en silence en arrière-plan, vérifie le presse-papiers toutes les cinq secondes, et ajoute tout ce qui est nouvellement copié dans un fichier Markdown. Il crée également automatiquement un nouveau fichier chaque jour basé sur la date actuelle, ce qui permet de garder tout organisé chronologiquement et facile à rechercher plus tard.

Si vous copiez plusieurs éléments dans le même intervalle de cinq secondes, seule l'entrée de presse-papiers la plus récente est enregistrée dans le fichier Markdown. Si vous avez tendance à copier du contenu très rapidement, envisagez de réduire l'intervalle de sondage à une seconde. Cela augmentera légèrement l'utilisation du processeur, mais sur n'importe quel système suffisamment moderne, l'impact devrait être négligeable.

J'ai également conçu le script pour ignorer les chaînes alphanumériques utilisant des expressions régulières qui ne sont pas des URL de sites Web. De cette façon, les mots de passe, les clés API ou d'autres jetons sensibles que vous copiez sont moins susceptibles d'être enregistrés par accident.

Voici le 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
}

Comme le script s'exécute en continu en arrière-plan, il s'arrête chaque fois que vous redémarrez ou éteignez votre PC. Pour vous assurer qu'il se lance automatiquement à nouveau, vous devrez créer une entrée dans le Planificateur de tâches qui l'exécutera à chaque connexion.

Déplacer automatiquement les téléchargements terminés en fonction du type de fichier

Tous les fichiers sont auto-organisés en quelques secondes





Mon dossier Téléchargements est essentiellement un tiroir à bric-à-brac numérique. Il y a des installateurs mélangés avec des PDF mélangés avec des fichiers ZIP aléatoires dont j'ai oublié l'existence il y a des semaines. Ce script parcourt ces fichiers téléchargés et les organise automatiquement en fonction du type de fichier.

Il analyse le dossier Téléchargements, vérifie l’extension de chaque fichier et le déplace à l’emplacement approprié. Les documents vont dans Documents, les images vont dans Images, les fichiers audio vont dans Musique, et les vidéos vont dans Vidéos. Les installateurs (.exe, .msi et .msix) vont dans un sous-dossier Installateurs dédié à l’intérieur de Téléchargements. Tout ce qu’il ne reconnaît pas est déplacé dans un sous-dossier Non Organisé — également à l’intérieur de Téléchargements — pour un tri manuel ultérieur.

Voici le 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
}

Le script ne regarde que les fichiers se trouvant directement dans le dossier Téléchargements. Tout ce qui est déjà à l'intérieur d'un sous-dossier est laissé intact. Il crée également automatiquement les dossiers Installers et Non organisés s'ils n'existent pas déjà.

Personnellement, je préfère exécuter ce script manuellement chaque fois que mon dossier Téléchargements commence à être surchargé. Mais si vous voulez une configuration entièrement automatique, vous pouvez utiliser le Planificateur de tâches pour l'exécuter automatiquement à chaque connexion.

Sauvegarder automatiquement mon coffre Obsidian avec un historique roulant de 7 jours

Sauvegardes ZIP quotidiennes de vos fichiers importants




J'ai un script qui crée une sauvegarde quotidienne de mon coffre Obsidian — un dossier rempli de notes au format Markdown — la compresse en fichier ZIP, la stocke dans un emplacement séparé, et supprime automatiquement les sauvegardes de plus de sept jours. Cela me fournit une semaine de points de restauration sans que le dossier de sauvegarde ne grossisse indéfiniment.

Vous n'avez pas besoin d'être un utilisateur d'Obsidian pour bénéficier de quelque chose comme ça, cependant. Vous pouvez adapter la même configuration pour sauvegarder n'importe quel dossier important sur votre système.

Voici le 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)"
}

Idéalement, vous automatiseriez ce script en utilisant le Planificateur de tâches afin qu'il s'exécute à chaque fois que vous vous connectez.


Créez des automatisations PowerShell pour vous-même

Et voilà—trois scripts PowerShell qui ont supprimé beaucoup de friction dans mon flux de travail quotidien. Mais ils sont évidemment adaptés à la façon dont j’utilise mon PC, et ils ne correspondront probablement pas parfaitement à votre configuration. J’espère quand même qu’ils vous feront au moins réfléchir. Une fois que vous réalisez combien de travail répétitif Windows peut automatiser, il devient difficile de ne pas remarquer toutes les petites tâches que vous faites encore manuellement chaque jour.

Et si vous voulez créer vos propres scripts mais que vous n'êtes pas fluent en PowerShell, les outils d'IA modernes rendent le processus étonnamment accessible. Vous pouvez décrire le problème en anglais simple à quelque chose comme Claude ou Gemini, et ils peuvent généralement générer un bon point de départ pour vous.

Articles connexes