Windows Server 2022 : Windows + V (Historique du presse‑papiers) est‑il disponible ? Alternatives, GPO & scripts

Windows + V n’affiche rien sur vos hôtes Windows Server ? Vous n’êtes pas seul. Voici un guide complet pour confirmer l’indisponibilité de l’historique du presse‑papiers sur Server 2016/2019/2022, choisir une alternative fiable et, si besoin, bâtir votre propre mini‑historique avec PowerShell.

Sommaire

Vue d’ensemble

Dans les éditions Windows Server, l’interface graphique « Historique du presse‑papiers » introduite sur Windows 10/11 n’est pas fournie. Le raccourci Windows + V n’a donc aucun effet, que vos serveurs soient en Desktop Experience ou en Server Core. Le terme « Windows Server 2021 » circule parfois pour désigner Windows Server 2022 : cela ne change rien à la disponibilité de la fonctionnalité.

La bonne nouvelle : plusieurs approches — outils tiers, scripts et stratégies RDS — permettent d’obtenir un résultat équivalent ou adapté à votre contexte (poste d’administration, hôte RDS, VDI, bastion, machine sensible).

Résumé des points clés

Point cléDétail
Disponibilité nativeL’historique du presse‑papiers (UI Win + V) n’est pas inclus dans Windows Server 2016, 2019 ou 2022. Le raccourci ne fait rien.
Perspectives MicrosoftAucune annonce officielle n’indique l’arrivée de cette UI sur les éditions Server. Si la situation évolue, cela figurera dans les notes de version de Windows Server.
Alternatives recommandéesDitto (open‑source, très léger, historique illimité, partage réseau optionnel) ClipClip (gratuit, étiquettes, recherche puissante) ClipboardFusion Free (gratuit, macros C#) PhraseExpress / ClipMate (payants, fonctions avancées pro)
Scripts & PowerShellUtiliser Get‑Clipboard/Set‑Clipboard pour stocker l’historique en JSON/CSV, options de rétention et purge automatique. Exemple prêt à l’emploi plus bas.
Paramètres RDS / GPOPour autoriser le copier‑coller entre client et session RDP, vérifier « Clipboard Redirection » :
Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Device and Resource Redirection.
Bonnes pratiques de sécuritéExclure données sensibles, chiffrer les fichiers d’historique, limiter la rétention, tester toute solution tierce en pré‑production, intégrer à la gestion des vulnérabilités.

Pourquoi l’historique Win + V n’existe pas sur Windows Server

  • Positionnement produit : les éditions Server minimisent les fonctionnalités orientées utilisateur final au profit de la stabilité, de la surface d’attaque réduite et de la compatibilité multi‑session.
  • Contexte RDS/VDI : la redirection du presse‑papiers traverse des limites de session et de sécurité. Un historique côté serveur pourrait exposer des données d’utilisateurs multiples si mal configuré.
  • Durcissement : sur des hôtes d’infrastructure (contrôleurs de domaine, serveurs de bases de données, bastions), l’historisation systématique de données copiées peut constituer un risque de fuite.

Répondez vite : quelle option pour quel scénario ?

ScénarioRecommandationPourquoi
Administrateur sur poste Windows 11, se connectant à un serveurActiver la redirection du presse‑papiers RDP, garder l’historique côté posteMoins d’empreinte sur le serveur, expérience moderne conservée côté client
Serveur RDS/VDI multi‑utilisateurDéployer un gestionnaire de presse‑papiers par utilisateur avec politiques de rétentionHistorique utile, mais cloisonné et gouverné
Serveur Core ou bastionScript PowerShell texte‑only, pas d’UI, chiffrement et rétention courteMoins d’attaque de surface, traçabilité contrôlée
Serveur applicatif sensible (DB, PKI)Éviter l’historique local, privilégier la redirection ponctuelle et l’auditRéduction du risque de fuite (secrets, clés, requêtes)

Comparatif rapide des alternatives logicielles

OutilLicencePoints fortsPoints d’attentionDéploiement silencieux (exemple)
DittoOpen‑sourceTrès léger, base SQLite, filtre & recherche, synchro réseau possibleDésactiver la synchro si réglementation strictemsiexec /i DittoSetup.msi /qn ADDLOCAL=All
ClipClipGratuitÉtiquettes, épingles, prévisualisationsValider la télémétrie et le stockage localClipClipSetup.exe /S (variables selon version)
ClipboardFusion FreeGratuitNettoyage auto, macros C#, règles de remplacementÉvaluer l’édition Pro si besoin de syncClipboardFusionSetup.exe /SILENT
PhraseExpressPayantSnippets, variables, multi‑utilisateur, règlesCoût, gouvernance des modèlesmsi /qn avec fichier .ini de config
ClipMatePayantHistorique robuste, dossiers, filtrageInterface datée, support à validerClipMateSetup.exe /S

Conseil déploiement : pour des fermes RDS, optez pour une installation par‑utilisateur, répertoires de données dans %LOCALAPPDATA%, et règles d’effacement à 7–30 jours selon la sensibilité.

Implémenter un mini‑historique local avec PowerShell

Si installer un outil n’est pas souhaitable, vous pouvez construire un historique texte‑only minimaliste. Les scripts ci‑dessous fonctionnent sur Windows Server 2016/2019/2022 avec PowerShell 5.1 (et PowerShell 7 si disponible). Ils évitent le stockage d’images, limitent la taille et excluent des motifs sensibles.

Fonctions utilitaires : accès presse‑papiers robuste et gardes‑fous

#requires -Version 5.1
function Get-ClipboardText {
  param([switch]$Raw)
  try {
    if ($Raw) { return Get-Clipboard -Raw -ErrorAction Stop }
    else { return Get-Clipboard -ErrorAction Stop }
  } catch {
    $cmd = @'
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Clipboard]::GetText()
'@
    return powershell -sta -noprofile -command $cmd
  }
}

function Set-ClipboardText {
param([Parameter(Mandatory)][string]$Text)
try {
Set-Clipboard -Value $Text -ErrorAction Stop
} catch {
$cmd = @"
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Clipboard]::SetText(@'\n$($Text.Replace("'", "''"))\n'@)
"@
powershell -sta -noprofile -command $cmd | Out-Null
}
}

function Test-IsSensitive {
param([string]$Text)
if (-not $Text) { return $false }
if ($Text.Length -gt 20000) { return $true }                 # Trop volumineux
if ($Text -match 'BEGIN [A-Z ]*PRIVATE KEY') { return $true }# Clés privées
if ($Text -match 'password\s*[:=]|\bpass\b') { return $true }# MDP évidents
if ($Text -match 'AKIA[0-9A-Z]{16}') { return $true }        # Exemple AWS AKIA
if ($Text -match '([A-Za-z0-9+/]{40,}={0,2})') { return $true } # Bloc base64
return $false
}

Service léger d’historisation (session utilisateur)

Ce script surveille le presse‑papiers, retient les N derniers éléments texte dans un fichier JSON chiffré facultatif, et saute les contenus jugés sensibles via la fonction ci‑dessus.

$HistoryRoot = Join-Path $env:LOCALAPPDATA "ClipboardHistory"
$HistoryFile = Join-Path $HistoryRoot "history.json"
$MaxItems    = 200       # Taille de l'historique
$PollMs      = 800       # Intervalle de sondage
$Encrypt     = $true     # Chiffrement DPAPI user-scope

New-Item -ItemType Directory -Path $HistoryRoot -Force | Out-Null

function Save-History {
param([array]$Items)
$json = $Items | ConvertTo-Json -Depth 4
if ($Encrypt) {
$bytes = [System.Text.Encoding]::UTF8.GetBytes($json)
$prot  = [System.Security.Cryptography.ProtectedData]::Protect(
$bytes, $null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
[IO.File]::WriteAllBytes($HistoryFile, $prot)
} else {
Set-Content -Path $HistoryFile -Value $json -Encoding UTF8
}
}

function Load-History {
if (-not (Test-Path $HistoryFile)) { return @() }
if ($Encrypt) {
$prot  = [IO.File]::ReadAllBytes($HistoryFile)
$bytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$prot, $null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
$json  = [System.Text.Encoding]::UTF8.GetString($bytes)
return $json | ConvertFrom-Json
} else {
return (Get-Content -Raw -Path $HistoryFile) | ConvertFrom-Json
}
}

$history = Load-History
$last    = $null

while ($true) {
try {
$txt = Get-ClipboardText -Raw
} catch { $txt = $null }

if ($txt -and $txt -ne $last -and -not (Test-IsSensitive $txt)) {
$entry = [pscustomobject]@{
Timestamp = (Get-Date).ToString("o")
Length    = $txt.Length
Preview   = ($txt -replace '\s+', ' ').Substring(0, [Math]::Min(120, $txt.Length))
Value     = $txt
}
$history = ,$entry + $history | Select-Object -First $MaxItems
Save-History -Items $history
$last = $txt
}
Start-Sleep -Milliseconds $PollMs
}

Explorateur d’historique en console

Un mini‑explorateur en TUI : il liste les derniers éléments, permet la recherche et recopie la sélection dans le presse‑papiers.

function Invoke-ClipboardHistory {
  param([int]$Top = 30, [string]$Search)

$HistoryRoot = Join-Path $env:LOCALAPPDATA "ClipboardHistory"
$HistoryFile = Join-Path $HistoryRoot "history.json"

if (-not (Test-Path $HistoryFile)) { Write-Host "Aucun historique."; return }

function Load-HistoryInner {
$prot  = [IO.File]::ReadAllBytes($HistoryFile)
$bytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$prot, $null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
$json  = [System.Text.Encoding]::UTF8.GetString($bytes)
$json | ConvertFrom-Json
}

$items = Load-HistoryInner
if ($Search) {
$items = $items | Where-Object { $_.Value -match [Regex]::Escape($Search) }
}
$items = $items | Select-Object -First $Top

$i = 1
$map = @{}
foreach ($it in $items) {
$preview = $it.Preview
Write-Host ("[{0}] {1}  ({2})" -f $i, $preview, $it.Timestamp)
$map[$i] = $it.Value
$i++
}

$sel = Read-Host "Numéro à copier dans le presse-papiers (Entrée pour quitter)"
if ([string]::IsNullOrWhiteSpace($sel)) { return }
if (-not $map.ContainsKey([int]$sel)) { Write-Host "Sélection invalide."; return }

Set-ClipboardText -Text $map[[int]$sel]
Write-Host "Copié."
}

Nettoyage et rétention via Tâche planifiée

Programmez une purge périodique (ici, 14 jours) pour maîtriser le stockage et le risque.

$Script = @'
$Root = Join-Path $env:LOCALAPPDATA "ClipboardHistory"
$File = Join-Path $Root "history.json"
if (!(Test-Path $File)) { return }
$prot  = [IO.File]::ReadAllBytes($File)
$bytes = [System.Security.Cryptography.ProtectedData]::Unprotect($prot,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
$json  = [System.Text.Encoding]::UTF8.GetString($bytes)
$items = $json | ConvertFrom-Json
$limit = (Get-Date).AddDays(-14)
$items = $items | Where-Object { [DateTime]::Parse($_.Timestamp) -gt $limit }
$items | ConvertTo-Json -Depth 4 | Set-Content -Path $File -Encoding UTF8
'@

$TaskPath = "$env:LOCALAPPDATA\ClipboardHistory\purge.ps1"
New-Item -ItemType Directory -Path (Split-Path $TaskPath) -Force | Out-Null
Set-Content -Path $TaskPath -Value $Script -Encoding UTF8

$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoLogo -NoProfile -ExecutionPolicy Bypass -File `"$TaskPath`""
$Trigger = New-ScheduledTaskTrigger -Daily -At 3:00am
Register-ScheduledTask -TaskName "ClipboardHistory-Purge" -Action $Action -Trigger $Trigger -Description "Purge historique du presse-papiers (14j)" -User $env:USERNAME | Out-Null
Write-Host "Tâche planifiée créée."

Notes importantes

  • Ces scripts sont fournis à titre d’exemple ; relisez, adaptez, auditez avant production.
  • Sur Server Core, préférez la version console ; évitez toute dépendance UI.
  • Pour un service « système », utilisez une tâche planifiée At logon par utilisateur. Évitez d’historiser au niveau machine.

Paramètres RDS, GPO et environnements VDI

Autoriser le copier‑coller entre client et session

La redirection du presse‑papiers RDP est réglée ici :

Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Device and Resource Redirection → Do not allow clipboard redirection
  • Désactivé ou Non configuré : le presse‑papiers est autorisé (recommandé, si la politique sécurité le permet).
  • Activé : le presse‑papiers est interdit dans les sessions RDP.

Complétez par le paramètre client RDP : cochez « Presse‑papiers » dans les ressources locales du client mstsc.

Points d’attention en VDI/broker

  • Citrix / VMware : des politiques de broker peuvent restreindre ou journaliser le presse‑papiers. Vérifiez ces politiques en priorité.
  • Ressources sensibles : bannir le copier‑coller vers/depuis des applications financières, de santé ou d’administration si exigé.

Bonnes pratiques de sécurité et conformité

  • Principe du moindre privilège : déployez les gestionnaires de presse‑papiers uniquement là où le besoin est avéré.
  • Texte uniquement : limitez l’historique aux chaînes de texte pour éviter la capture d’images/screenshots.
  • Rétention courte : 7 à 30 jours selon la sensibilité, avec purge programmée.
  • Chiffrement au repos : DPAPI par utilisateur (exemple ci‑dessus) ou chiffrement applicatif pour les outils tiers.
  • Exclusions de motifs : ne journalisez pas de secrets (clés privées, mots de passe, tokens). Ajoutez vos regex métiers.
  • Journalisation : consignez les opérations du script (ajout/suppression/erreur) dans l’EventLog applicatif, sans jamais écrire le contenu copié.
  • Évaluation éditeur : pour les logiciels tiers, validez la signature, la politique de mise à jour, la télémétrie et l’emplacement du stockage.

Modèle rapide de politique d’entreprise

Objet : Historique du presse-papiers sur serveurs
Portée : Windows Server 2016/2019/2022
Règles :
 - Par défaut, aucune historisation côté serveur.
 - Exceptions : hôtes RDS/VDI approuvés, avec outil validé par la SSI.
 - Données : texte uniquement, pas d’images ni de fichiers.
 - Rétention : 14 jours (max 30), purge quotidienne.
 - Chiffrement : obligatoire (DPAPI utilisateur ou équivalent).
 - Journalisation : opérations techniques, jamais de contenu.
 - Revue trimestrielle des configurations et mises à jour.

Déploiement à l’échelle (GPO, Intune, Configuration Manager)

  1. Qualification : maquettez sur une OU pilote, avec différents rôles serveur (RDS, applicatif, bastion).
  2. Emballage : créez un package MSI/EXE silencieux (ou script PS) avec répertoires %LOCALAPPDATA% et fichiers de config par utilisateur.
  3. Gouvernance : appliquez des fichiers .ini/.json centralisés via GPP ou profils de configuration (Intune) pour fixer rétention, taille, exclusions.
  4. Mises à jour : planifiez des fenêtres de maintenance, testez les changements de schéma (SQLite, JSON).
  5. Observabilité : exposez des compteurs (taille historique, purge) dans votre SIEM, sans contenu fonctionnel.

Cas particuliers et conseils terrain

  • Server Core : privilégiez le script console (ci‑dessus), clip.exe et PowerShell. Évitez WinForms/WPF.
  • Bastions / Jump servers : désactivez l’historisation locale, consentez la redirection RDP au cas par cas, auditez.
  • Contrôleurs de domaine : interdisez tout historique et référez‑vous aux politiques de l’annuaire.
  • VDI multi‑session : utilisez des profils utilisateur séparés, quotas disque, nettoyage à logoff.

FAQ

Pourquoi Windows+V n’affiche rien sur mon Windows Server ?

Parce que l’UI d’historique n’est pas livrée sur les éditions Server. Ce raccourci n’appelle aucune fonctionnalité système côté serveur.

« Windows Server 2021 » existe‑t‑il ?

Non, c’est un raccourci de langage pour parler de Windows Server 2022. Les conclusions ci‑dessus s’appliquent.

Peut‑on activer l’historique via une clé de registre ou une fonctionnalité facultative ?

Non. Il n’existe pas d’option cachée permettant d’obtenir l’UI Win + V sur Server.

La redirection RDP remplace‑t‑elle l’historique ?

Non. La redirection autorise le copier‑coller entre client et session, mais n’ajoute pas d’historique. Combinez‑la avec un outil côté client ou un gestionnaire côté serveur selon le besoin.

Quid des images et fichiers ?

Pour réduire le risque, limitez‑vous au texte. Si vous devez gérer des images/fichiers, choisissez un outil tiers et encadrez la rétention, le chiffrement et les quotas.

Comment dépanner si le copier‑coller ne marche pas en RDP ?

  • Vérifier la GPO « Do not allow clipboard redirection ».
  • Redémarrer le processus rdpclip.exe dans la session distante.
  • Contrôler les politiques du broker (Citrix/VMware) et les solutions DLP.

Conclusion

Non, l’historique du presse‑papiers Win + V n’est pas disponible sur Windows Server. Mais vous pouvez obtenir le résultat fonctionnel recherché en combinant : redirection RDP (quand c’est pertinent), gestionnaire de presse‑papiers tiers gouverné, ou scripts PowerShell textuels et chiffrés. Le choix dépend de votre niveau d’exposition, du rôle du serveur et de vos exigences de conformité. Démarrez petit (poste d’admin, OU pilote), fixez des règles claires (rétention, chiffrement, exclusions) et automatisez le nettoyage. Vous bénéficierez d’un confort de travail tangible sans compromettre la sécurité.

Annexe : mini‑raccourcis utiles

ActionCommande
Copier un fichier texte dans le presse‑papierstype notes.txt | clip.exe
Coller le presse‑papiers dans un fichierpowershell -sta -command "[Windows.Forms.Clipboard]::GetText()" > paste.txt
Relancer le service de presse‑papiers RDPtaskkill /IM rdpclip.exe /F & start rdpclip.exe

Informations complémentaires utiles

  • Sur une installation Server Core, limitez‑vous aux commandes CLI (clip.exe, PowerShell) ou aux gestionnaires de presse‑papiers sans interface graphique.
  • Dans les environnements VDI (Citrix, VMware), des politiques de broker peuvent bloquer/autoriser le partage du presse‑papiers ; vérifiez‑les avant d’ajouter un outil local.
  • Pour des besoins très simples, un raccourci vers clip.exe et un fichier batch (capture dans un dossier partagé) peuvent suffire sans installer de logiciel tiers.
Sommaire