#----------------------------------------------------------------------------------------------------------------------------------------- # Script: PSO 9.0 Backup # comments: .NET Framework 4.5 and WMF 5.1 required #----------------------------------------------------------------------------------------------------------------------------------------- #Modify these paths to point to correct directories. $pseBin = "C:\Program Files (x86)\Schneider Electric\Power SCADA Operation\v9.0" $pseData = "D:\ProgramData\Schneider Electric\Power SCADA Operation\v9.0" $destinationDir = "D:\Backups" $destinationDirPse = $destinationDir + "\PSO_Backups" #check if directory exists, if not, create it. If(!(test-path $destinationDir)) { New-Item -ItemType directory -Path $destinationDir } # Self-elevate the script if required if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) { if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) { $CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine Exit } } #Copy files $ItemToCopy = $pseBin + "\Applications\AppServices\bin\configuration.xml" Copy-item $ItemToCopy $destinationDir $ItemToCopy = $pseBin + "\Applications\AppServices\bin\Services.xml" Copy-item $ItemToCopy $destinationDir Write-Output "Backing up Logs" #Backup Logs $ItemToCopy = $pseData + "\Logs" $logDestination = $pseData +"\Logs_Backup" + ((Get-Date).ToString('yyyy-MM-dd')) if(Test-path $logDestination) {Remove-Item $logDestination -Recurse} Copy-Item -Path $ItemToCopy -Destination $logDestination -Recurse #Start-sleep -m 500 # $destinationDirPse = $destinationDir + "\PSE_Backups" If(!(test-path $destinationDirPse)) { New-Item -ItemType directory -Path $destinationDirPse } #Write-Output "Creating compressed backup. Backup times will vary depending on data directory size." ##Zip up data directory excluding log files(required for online backup) #$excludes=@("Logs") #$zipFile = $destinationDirPse + "\PSO_Backup" + ((Get-Date).ToString('yyyy-MM-dd')) + ".zip" #$files= Get-ChildItem -Path $pseData -Exclude $excludes #Compress-Archive -Path $files -DestinationPath $zipFile -Force Write-Output "Creating compressed backup. Backup times will vary depending on data directory size." # File or directory to zip $sourcePath = $pseData # Resulting .zip file $destinationPath = $destinationDirPse + "\PSO_Backup" + ((Get-Date).ToString('yyyy-MM-dd')) + ".zip" # Compression level. Optimal means smallest size, even if it takes a little longer to compress $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal # Whether or not to include root directory (if zipping a directory) in the archive $includeBaseDirectory = $false Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::CreateFromDirectory("$sourcePath","$destinationPath",$compressionLevel,$includeBaseDirectory) Write-Output "Backing up Cipher" #Export Cipher $cipherPath = $pseBin + "\bin\PowerLogic.Cipher.dll" $assembly = [Reflection.Assembly]::LoadFile($cipherPath) $instance = New-Object PowerLogic.Cipher.StrongCipher -ArgumentList ($pseBin + "\Applications\AppServices\bin\") $instance.ExportKey($destinationDir + "\AppServicesCipher.aes") $instance = New-Object PowerLogic.Cipher.StrongCipher -ArgumentList ($pseData + "\Config\") $instance.ExportKey($destinationDir + "\SCADACipher.aes") $instance = New-Object PowerLogic.Cipher.StrongCipher -ArgumentList ($pseData + "\Applications\Profile Editor\") $instance.ExportKey($destinationDir + "\ProfileEditorCipher.aes")