Windows Powershell und 7zip als Backup

Hier gibt es mal eine von mir selbst geschriebene Funktion mit 7zip und Windows Powershell 3.0! Ich betone das 3.0. Mit vorherigen Versionen wird dieses Skript nicht funktionieren können, da sonst unten im Code folgende Parameter nicht richtig interpretiert werden.

Die folgende Funktion hat mir schon oft das Leben erleichtert. Damit kann man ganze Ordner sichern, aber auch einzelne Files und wenn gewünscht sogar mit einem Passwort versehen.

Noch kurz ein Hinweis zu den Parametern:
„program_7z_local_path_string“ erwartet den Installationspfad von 7-zip. Weiß man diesen nicht oder hat das Programm standardmäßig installiert, so wird aufgrundlage der Betriebssystemarchitektur der Pfad gewählt. Wobei ich leider kein x86 Betriebssystem zur Hand habe um das genauer zu testen.

Falls jemanden ein Fehler auffallen sollte, so bitte ich doch um einen Kommentar oder eine E-Mail an martyn@sol-diers.com

function New-7z{
<#
.SYNOPSIS
This function creates a 7z file (*.7z) with a timestamp.

.DESCRIPTION
This function creates a 7z file (*.7z) with a timestamp and with a password if you wish.

.PARAMETER file_7z_name_string
Type here the name of the file that will be created.

.PARAMETER file_7z_password_string
Type a password to protect your new 7z file.

.PARAMETER folder_local_path_input_string
Input path means all items in this folder will be zipped.

.PARAMETER folder_local_path_output_string
Output path of the new 7z file.

.PARAMETER program_7z_local_path_string
Installation path of 7z (7z.exe).

.EXAMPLE
#With password
New-7z -file_7z_name_string „MyFile“ -file_7z_password_string „12345“ -folder_local_path_input_string „C:\test“ -folder_local_path_output_string „C:\temp“

.EXAMPLE
#Without password
New-7z -file_7z_name_string „MyFile“ -folder_local_path_input_string „C:\test“ -folder_local_path_output_string „C:\temp“
#>
[CmdletBinding()]
Param(
[string]$file_7z_name_string,
[string]$local_path_input_string,
[string]$local_path_output_string,
[string]$file_7z_password_string,
[string]$program_7z_local_path_string = „“,
[SWITCH]$enableTimeStamp,
[SWITCH]$enableFilePacking
)

If ($program_7z_local_path_string -eq „“){
$osarch = (Get-WmiObject -Class Win32_OperatingSystem).OSArchitecture
If ($osarch -eq „64-bit“){
$program_7z_local_path_string = „C:\Program Files\7-Zip\7z.exe“
}
else {
$program_7z_local_path_string = „C:\Program Files (x86)\7-Zip\7z.exe“
}
}

##############################################
## Setting the name of the 7z-file
##############################################
If ($enableTimeStamp){
$file_7z_name_timestamp_string = [datetime]::Now.ToString(„yyyy-MM-dd_HHmm“)
$file_7z_final_name_string = [String]::Format(„{0}\{1}_{2}.7z“, $local_path_output_string,$file_7z_name_string,$file_7z_name_timestamp_string)
}
else {
$file_7z_final_name_string = [String]::Format(„{0}\{1}.7z“, $local_path_output_string,$file_7z_name_string)
}

##############################################
## Create the 7z-file (with and or
## without password)
##############################################
If ($enableFilePacking){
If ($file_7z_password_string -ne „“){
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string -mx9 -r -p““$file_7z_password_string““ -mhe | out-host
}
else {
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string -mx9 -r -mhe | out-host
}
}
else {
If ($file_7z_password_string -ne „“){
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string\* -mx9 -r -p““$file_7z_password_string““ -mhe | out-host
}
else {
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string\* -mx9 -r -mhe | out-host
}
}

}