-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBackup_Computer.ps1
More file actions
136 lines (103 loc) · 5.23 KB
/
Copy pathBackup_Computer.ps1
File metadata and controls
136 lines (103 loc) · 5.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<#
## SYNOPSIS
Effectue la sauvegarde des machines en fonction de leur type et supprime les anciennes sauvegardes.<br>
Date : 2025-04-29<br>
Version : 2.0<br>
## DESCRIPTION
Ce script sauvegarde les machines (Clients, Serveurs, DC) dans une structure organisée par type et date.<br>
Il supprime également les sauvegardes plus anciennes que la période définie (par défaut : 15 jours).<br>
Les sauvegardes sont réalisées avec WBAdmin<br>
## PREREQUIS
- Module Windows Server Backup installé (pour Serveurs et DC), est installé si il n'est pas présent.
- Compte utilisateur avec droits : Backup Operators + accès écriture au dossier de sauvegarde.
## FONCTIONNEMENT
- Faire un premiere sauvegarde manuellement pour que le module Windows Server Backup soit installé.<br>
Changer le nom du serveur par défaut par le votre.
$BackupServer = "\\SERVER"<br>
- Fait un sauvegarde dans le répertoire :<br>
Pour un controlleur de domaine :
\\\\SERVEUR\\DC\\NOM_DE_MACHINE\\DATE (au format yyyy-mm-jj)<br>
Pour un serveur membre :
\\\\SERVEUR\\Serveurs\\NOM_DE_MACHINE\\DATE (au format yyyy-mm-jj)<br>
Pour un client membre :
\\\\SERVEUR\\Clients\\NOM_DE_MACHINE\\DATE (au format yyyy-mm-jj)<br>
Exemple :<br>
\\\\NAS01\\DC\\DC01\\2025-04-29<br>
\\\\NAS01\\Serveurs\\APP01\\2025-04-29<br>
\\\\NAS01\\Clients\\CLI01\\2025-04-29<br>
- Supprime toutes les sauvegardes de plus 15 jours :<br>
$DeleteFolderFiles = (Get-Date).AddDays(-15)
## RECOMMANATION
Fonctionne trés bien avec un compte Gmsa (Group Managed Service Accounts)<br>
Nécéssite :<br>
- droits sur le répertoire de sauvegarde<br>
- membre du groupe Backup Operators<br>
et les droits de la GPO :<br>
- Accéder a cet ordinateur a partir du réseau<br>
- Ouvrir une session en tant que service<br>
- Ouvrir une session en tant que tache<br>
- sauvegarder les fichiers et les répertoires<br>
## Licence
GNU General Public Licence V3.0
https://github.com/Valceen/
#>
Write-Host "=========================== Déclaration des variables ============================" -ForegroundColor Green
# Dossier racine de sauvegarde
$BackupServer = "\\SERVER"
$BackupFolderRoot = "\Backup\"
# Type de machine et chemins spécifiques
$ComputerType = (Get-CimInstance Win32_OperatingSystem).ProductType
Switch ($ComputerType) {
"1" { $BackupFolderType = "$BackupServer\$BackupFolderRoot\Clients\$env:ComputerName" }
"2" { $BackupFolderType = "$BackupServer\$BackupFolderRoot\DC\$env:ComputerName" }
"3" { $BackupFolderType = "$BackupServer\$BackupFolderRoot\Serveurs\$env:ComputerName" }
Default {
Write-Host "Type de machine inconnu. Sauvegarde annulée." -ForegroundColor Red
Exit
}
}
# Chemin des sauvegardes avec date
$BackupFolderDate = "$BackupFolderType\$((Get-Date).ToString('yyyy-MM-dd'))"
$BackupFileLog = "$BackupFolderDate\$($env:ComputerName)_$((Get-Date).ToString('yyyy-MM-dd_HH-mm')).log"
# Suppression des sauvegardes anciennes
$DeleteFolderFiles = (Get-Date).AddDays(-15)
Write-Host "=============================================================================" -ForegroundColor Green
Write-Host ""
Write-Host "=========================== Création des dossiers ================================" -ForegroundColor Green
# Création des dossiers si inexistants
@( $BackupFolderRoot, $BackupFolderType, $BackupFolderDate ) | ForEach-Object {
If (!(Test-Path $_)) {
New-Item $_ -Type Directory | Out-Null
}
}
Write-Host "=============================================================================" -ForegroundColor Green
Write-Host ""
Write-Host "=========================== Import du module de sauvegarde =======================" -ForegroundColor Green
# Vérification du module Windows Server Backup
$BackupModulePath = "$env:windir\System32\wbadmin.exe"
If (-Not (Test-Path $BackupModulePath)) {
Write-Host "Module Windows Server Backup introuvable. Installation en cours..." -ForegroundColor Yellow
Install-WindowsFeature Windows-Server-Backup
}
Write-Host "=============================================================================" -ForegroundColor Green
Write-Host ""
Write-Host "=========================== Exécution de la sauvegarde ============================" -ForegroundColor Green
# Commande de sauvegarde en fonction du type de machine
Switch ($ComputerType) {
"1" {
WBAdmin Start systemstatebackup -BackupTarget:$BackupFolderDate -Quiet | Out-File -FilePath $BackupFileLog -Append
}
"2" {
WBAdmin Start Backup -BackupTarget:$BackupFolderDate -systemState -allCritical -vssFull -Quiet | Out-File -FilePath $BackupFileLog -Append
}
"3" {
WBAdmin Start Backup -BackupTarget:$BackupFolderDate -systemState -allCritical -vssFull -Quiet | Out-File -FilePath $BackupFileLog -Append
}
}
Write-Host "=============================================================================" -ForegroundColor Green
Write-Host ""
Write-Host "=========================== Suppression des anciennes sauvegardes ==================" -ForegroundColor Green
# Suppression des fichiers anciens
Get-ChildItem $BackupFolderType | Where-Object {$_.LastWriteTime -lt $DeleteFolderFiles} | Remove-Item -Confirm:$False -Recurse -Force
Write-Host "=============================================================================" -ForegroundColor Green
Write-Host ""