Update Windows/BackupGPO.md
This commit is contained in:
84
Windows/BackupGPO.md
Normal file
84
Windows/BackupGPO.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Method 1 - use a SMB - Networkshare as the backuptarget
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$limit = (Get-Date).AddDays(-30)
|
||||||
|
$path = "\\NETWORKSHARE"
|
||||||
|
|
||||||
|
# Delete files older than the $limit.
|
||||||
|
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
|
||||||
|
|
||||||
|
# Delete any empty directories left behind after deleting the old files.
|
||||||
|
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
|
||||||
|
|
||||||
|
Backup-GPO -All -path $path -Comment "Backup done from SERVERNAME"
|
||||||
|
```
|
||||||
|
|
||||||
|
# Method 2 - use a SFTP Server as the backuptarget
|
||||||
|
|
||||||
|
You have to keep in mind that you need script to autodelete old backups on the target. Maybe a cronjob for that part with the particular script would be a nice idea ;)
|
||||||
|
|
||||||
|
To get the fingerprint of your hosts host_key file run this command and paste it behind the variable **$sftpfingerprint**
|
||||||
|
```bash
|
||||||
|
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
|
||||||
|
```
|
||||||
|
|
||||||
|
Script on DomainController
|
||||||
|
```powershell
|
||||||
|
# documentation for winscp can be found here: https://winscp.net/eng/docs/library_powershell
|
||||||
|
# prior to get this up and running you need ".NET assembly / COM library" from here https://winscp.net/eng/downloads.php
|
||||||
|
|
||||||
|
$path = "C:\backup\gpos" #path for temporary storing all files
|
||||||
|
$temp = "C:\backup\gpos_$(Get-Date -Format 'yyyyMMdd-HHmmss').zip" #path for the zip file in 24h format
|
||||||
|
$sftpserver = "FQDN or IP"
|
||||||
|
$sftpuser = "sftpusername"
|
||||||
|
$sftpkeypath = "C:\Scripts\backupGPOs\privatekeyfile.ppk" #authentication with ppk file (password is possible as well, take a look at documentation)
|
||||||
|
$sftpfingerprint = "ssh-rsa 3072 aX....." #replace it with the value of the command from the host above
|
||||||
|
$winscppath = "C:\Scripts\backupGPOs\WinSCPnet.dll" #file from the zip you have downloaded before
|
||||||
|
$destinantion = "/backups/gpos/" #target on the SFTP Server
|
||||||
|
|
||||||
|
Backup-GPO -All -path $path -Comment "Backup done from DC-04"
|
||||||
|
|
||||||
|
# Load WinSCP .NET assembly
|
||||||
|
Add-Type -Path $winscppath
|
||||||
|
|
||||||
|
# zip backup
|
||||||
|
$compress = @{
|
||||||
|
Path = $path
|
||||||
|
CompressionLevel = "Fastest"
|
||||||
|
DestinationPath = $temp
|
||||||
|
}
|
||||||
|
Compress-Archive @compress
|
||||||
|
|
||||||
|
# Setup session options
|
||||||
|
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
|
||||||
|
Protocol = [WinSCP.Protocol]::Sftp
|
||||||
|
HostName = $sftpserver
|
||||||
|
UserName = $sftpuser
|
||||||
|
SshHostKeyFingerprint = $sftpfingerprint
|
||||||
|
SshPrivateKeyPath = $sftpkeypath
|
||||||
|
}
|
||||||
|
|
||||||
|
$session = New-Object WinSCP.Session
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
# Connect
|
||||||
|
$session.Open($sessionOptions)
|
||||||
|
|
||||||
|
# Upload
|
||||||
|
$session.PutFiles($temp, $destinantion).Check()
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
# Disconnect, clean up
|
||||||
|
$session.Dispose()
|
||||||
|
}
|
||||||
|
|
||||||
|
# Delete files older than the $limit.
|
||||||
|
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer } | Remove-Item -Force
|
||||||
|
|
||||||
|
# Delete any empty directories left behind after deleting the old files.
|
||||||
|
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
|
||||||
|
|
||||||
|
Remove-Item -Path $temp -Force
|
||||||
|
```
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
$limit = (Get-Date).AddDays(-30)
|
|
||||||
$path = "\\NETWORKSHARE"
|
|
||||||
|
|
||||||
# Delete files older than the $limit.
|
|
||||||
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
|
|
||||||
|
|
||||||
# Delete any empty directories left behind after deleting the old files.
|
|
||||||
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
|
|
||||||
|
|
||||||
Backup-GPO -All -path $path -Comment "Backup done from SERVERNAME"
|
|
||||||
Reference in New Issue
Block a user