Repository navigation
Expand file tree
/
Copy pathBackupSystem.ps1
More file actions
160 lines (141 loc) · 5.82 KB
/
Copy pathBackupSystem.ps1
File metadata and controls
160 lines (141 loc) · 5.82 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
function Backup-FolderTo {
param
(
[Parameter(Mandatory=$true)][string]$source,
[Parameter(Mandatory=$true)][string]$destination,
[Parameter(Mandatory=$false)][string]$logpath = "",
[Parameter(Mandatory=$false)][string]$excludeDirectories = "",
[Parameter(Mandatory=$false)][string]$excludeFiles = ""
)
$options = @()
if ($logpath.Length -gt 0) {
$datum = Get-Date -Format "yyyy-MM-dd"
$logfile = Join-Path $logpath "Backup-${datum}.log"
$options += "/UNILOG+:${logfile}"
}
if ($excludeDirectories.Length -gt 0) {
$options += "/XD", $excludeDirectories
}
if ($excludeFiles.Length -gt 0) {
$options += "/XF", $excludeFiles
}
robocopy.exe "${source}" "${destination}" /MIR /NP /TEE /XJ /NDL /R:5 /W:10 @options
}
function Copy-FolderTo {
param (
[Parameter(Mandatory=$true)][string]$source,
[Parameter(Mandatory=$true)][string]$destination
)
robocopy.exe "${source}" "${destination}" /NP /XJ /NDL /R:5 /W:10 /E /XX
}
function Backup-Programmconfigurations {
$profilePfad = "D:\Sonstiges\Profile"
Backup-FolderTo (Join-Path $env:APPDATA "XnViewMP") (Join-Path $profilePfad "XnViewMP")
Backup-FolderTo (Join-Path $env:USERPROFILE ".vscode") (Join-Path $profilePfad ".vscode")
Copy-Item (Join-Path $env:APPDATA WinSCP.ini) D:\Sonstiges\Profile\ -Force
}
function Restore-Programmconfigurations {
$profilePfad = "D:\Sonstiges\Profile"
Backup-FolderTo (Join-Path $profilePfad "XnViewMP") (Join-Path $env:APPDATA "XnViewMP")
Backup-FolderTo (Join-Path $profilePfad ".vscode") (Join-Path $env:USERPROFILE ".vscode")
Copy-Item D:\Sonstiges\Profile\WinSCP.ini $env:APPDATA -Force
}
function Backup-Full {
Backup-ToStick
Backup-ToDisk
Backup-ToNAS
}
function Backup-ToStick {
$BackupPfad = "A:\"
if (Test-Path $BackupPfad) {
Backup-FolderTo "D:\Software" (Join-Path $BackupPfad "Software")
Backup-FolderTo "D:\Programme" (Join-Path $BackupPfad "Programme")
}
}
function Backup-ToDisk {
$BackupPfad = "B:\Backup"
if (Test-Path $BackupPfad) {
Backup-FolderTo "D:\Sonstiges" (Join-Path $BackupPfad "Sonstiges") $BackupPfad -excludeFiles "parent.lock"
Backup-FolderTo "D:\Software" (Join-Path $BackupPfad "Software") $BackupPfad
Backup-FolderTo "D:\OneDrive" (Join-Path $BackupPfad "OneDrive") $BackupPfad -excludeFiles ".849C9593-D756-4E56-8D6E-42412F2A707B"
Backup-FolderTo "D:\Programme" (Join-Path $BackupPfad "Programme") $BackupPfad
Backup-FolderTo "D:\Gespeicherte Spiele" (Join-Path $BackupPfad "Gespeicherte Spiele") $BackupPfad
Backup-FolderTo "D:\Downloads" (Join-Path $BackupPfad "Downloads") $BackupPfad
Backup-FolderTo "D:\Desktop" (Join-Path $BackupPfad "Desktop") $BackupPfad
Backup-FolderTo "D:\Bilder" (Join-Path $BackupPfad "Bilder") $BackupPfad
Backup-FolderTo "D:\Dokumente" (Join-Path $BackupPfad "Dokumente") $BackupPfad
Backup-FolderTo "D:\Musik" (Join-Path $BackupPfad "Musik") $BackupPfad
Backup-FolderTo "D:\Lesestoff" (Join-Path $BackupPfad "Lesestoff") $BackupPfad
Backup-FolderTo "D:\Spiele" (Join-Path $BackupPfad "Spiele") $BackupPfad
}
}
function Backup-ToNAS {
if (Test-Path "\\Schatzkammer\Software") {
Backup-FolderTo "D:\Software" "\\Schatzkammer\Software" -excludeDirectories "#recycle"
Copy-FolderTo "D:\Lesestoff" "\\Schatzkammer\Lesestoff"
Copy-FolderTo "D:\Musik" "\\Schatzkammer\Musik"
Copy-FolderTo "D:\Videos" "\\Schatzkammer\Videos"
}
}
function Backup-MarieFromNAS {
if (Test-Path "\\Schatzkammer\Marie") {
$BackupPfadB = "B:\Marie"
$BackupPfadM = "M:\Marie"
if (Test-Path $BackupPfadB) {
Backup-FolderTo "\\Schatzkammer\Marie" $BackupPfadB -excludeDirectories "#recycle"
}
if ((Test-Path $BackupPfadB) -and (Test-Path $BackupPfadM)) {
Backup-FolderTo $BackupPfadB $BackupPfadM
}
elseif (Test-Path $BackupPfadM) {
Backup-FolderTo "\\Schatzkammer\Marie" $BackupPfadM -excludeDirectories "#recycle"
}
}
}
function Reset-Dns {
if (Test-IsAdmin) {
##Requires -RunAsAdministrator
ipconfig /flushdns
ipconfig /registerdns
ipconfig /release
ipconfig /renew
NETSH winsock reset catalog
NETSH int ipv4 reset reset.log
NETSH int ipv6 reset reset.log
}
else {
Write-Warning "Es werden Admin-Rechte für diesen Befehl benötigt."
}
}
function Test-IsAdmin {
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
# Abfrage der auszuführenden Aktion
Clear-Host
$prevTitle = $host.ui.RawUI.WindowTitle
$host.ui.RawUI.WindowTitle = "Backupsteuerung & Systeminformationen"
Write-Output ""
Write-Output "1 - Programmeneinstellungen sichern"
Write-Output "2 - Programmeneinstellungen wiederherstellen"
Write-Output "3 - Sicherung: A:\, B:\ und NAS"
Write-Output "4 - Sicherung: A:\"
Write-Output "5 - Sicherung: B:\"
Write-Output "6 - Sicherung: NAS"
Write-Output "7 - Sicherung Marie: NAS auf B:\ und M:\"
Write-Output "8 - "
Write-Output "9 - Reset DNS"
Write-Output ""
$Auswahl = Read-Host "Auswahl"
switch ($Auswahl.ToLowerInvariant()) {
1 { Backup-Programmconfigurations }
2 { Restore-Programmconfigurations }
3 { Backup-Full }
4 { Backup-ToStick }
5 { Backup-ToDisk }
6 { Backup-ToNAS }
7 { Backup-MarieFromNAS }
9 { Reset-Dns }
}
Write-Output "... any-key Taste ..."
[void][System.Console]::ReadKey($true)
$host.ui.RawUI.WindowTitle = $prevTitle