Script PowerShell pour modifier les attributs fichiers lecture seule et caché avec contrôle d existence et gestion d erreurs sous Windows.
<#
.SYNOPSIS
Script pour modifier les attributs de fichiers : lecture seule et caché.
.DESCRIPTION
Permet d'ajouter ou de supprimer les attributs ReadOnly et Hidden d'un ou plusieurs fichiers spécifiés.
.PARAMETER Path
Chemin du fichier ou tableau de fichiers à modifier.
.PARAMETER ReadOnly
Si spécifié, modifie l'attribut lecture seule.
.PARAMETER Hidden
Si spécifié, modifie l'attribut caché.
.PARAMETER Remove
Si spécifié, supprime les attributs indiqués au lieu de les ajouter.
.EXAMPLE
.
Set-FileAttributes.ps1 -Path "C:\test\file.txt" -ReadOnly
Définit l'attribut lecture seule sur le fichier spécifié.
.EXAMPLE
.
Set-FileAttributes.ps1 -Path "C:\test\*" -Hidden -Remove
Supprime l'attribut caché de tous les fichiers dans le dossier C:\test.
#>
param(
[Parameter(Mandatory=$true, Position=0)]
[string[]]$Path,
[switch]$ReadOnly,
[switch]$Hidden,
[switch]$Remove
)
function Set-FileAttribute {
param(
[string]$FilePath,
[switch]$ReadOnly,
[switch]$Hidden,
[switch]$Remove
)
# Vérifie que le fichier existe
if (-not (Test-Path -LiteralPath $FilePath -PathType Leaf)) {
Write-Warning "Le fichier '$FilePath' n'existe pas."
return
}
# Obtient les attributs actuels
$currentAttributes = [System.IO.File]::GetAttributes($FilePath)
# Modifie les attributs selon les paramètres
if ($ReadOnly) {
if ($Remove) {
# Supprime l'attribut ReadOnly
$newAttributes = $currentAttributes -band (-bnot [System.IO.FileAttributes]::ReadOnly)
} else {
# Ajoute l'attribut ReadOnly
$newAttributes = $currentAttributes -bor [System.IO.FileAttributes]::ReadOnly
}
$currentAttributes = $newAttributes
}
if ($Hidden) {
if ($Remove) {
# Supprime l'attribut Hidden
$newAttributes = $currentAttributes -band (-bnot [System.IO.FileAttributes]::Hidden)
} else {
# Ajoute l'attribut Hidden
$newAttributes = $currentAttributes -bor [System.IO.FileAttributes]::Hidden
}
$currentAttributes = $newAttributes
}
# Définit les nouveaux attributs
try {
[System.IO.File]::SetAttributes($FilePath, $currentAttributes)
Write-Host "Attributs modifiés pour '$FilePath' : $currentAttributes"
} catch {
Write-Error "Erreur lors de la modification des attributs de '$FilePath' : $_"
}
}
# Vérifie qu'au moins un attribut est spécifié
if (-not ($ReadOnly -or $Hidden)) {
Write-Host "Erreur : spécifiez au moins un attribut à modifier avec -ReadOnly et/ou -Hidden."
exit 1
}
# Applique la modification à tous les fichiers spécifiés
foreach ($file in $Path) {
# Supporte les jokers en développant les fichiers
$filesToProcess = Get-ChildItem -LiteralPath $file -File -ErrorAction SilentlyContinue
if ($filesToProcess.Count -eq 0 -and (Test-Path -LiteralPath $file -PathType Leaf)) {
# Si ce n'est pas un dossier ou un joker, c'est un fichier unique
Set-FileAttribute -FilePath $file -ReadOnly:$ReadOnly -Hidden:$Hidden -Remove:$Remove
} elseif ($filesToProcess.Count -gt 0) {
foreach ($f in $filesToProcess) {
Set-FileAttribute -FilePath $f.FullName -ReadOnly:$ReadOnly -Hidden:$Hidden -Remove:$Remove
}
} else {
Write-Warning "Aucun fichier trouvé pour '$file'."
}
}PowerShell 5.1 ou supérieur (environnement d'exécution)
Fichiers d'entrée : chemin(s) du ou des fichiers à modifier (chaîne ou tableau de chaînes)
Paramètres d'entrée : -ReadOnly (interrupteur), -Hidden (interrupteur), -Remove (interrupteur)
LIENS/CONFIG : aucun, script autonome exécuté dans PowerShell
Fonctions internes : gestion des attributs de fichiers via .NET System.IO.FileAttributes