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
}
}

}

(Idee) Self Installer für Spiele

Vor ein paar Tagen hat mich ein Freund darauf gebracht, dass ich eigentlich ein Tool zu diesem Thema schreiben könnte. Denn wer kennt es nicht? Ja, neues Spiel oder das alte Spiel ausgekramt, aber die Katze will noch was zu essen, der Hund muss dringend raus, die Kinder tollen umher, die Frau will na ja …

Tja, ich habe mir damals, allerdings nur für wenige Spiele, ein Programm zur Installation von Spielen selbst geschrieben. Nun hat mein Kumpel gemeint, das wäre etwas was es noch kaum gibt. Also gut, ich werde das Programm in eine Update-fähige Version zu bringen und dann zum Download veröffentlichen.

Ich bin gespannt was ihr davon halten werdet. Natürlich wird alles Open Source sein! Aber ein Name für das Projekt fehlt mir noch…

Computername kann nicht verändert werden

Beschreibung

Der Computername ist richtig, aber es kommt die Fehlermeldung

„Bei dem Versuch den Computernamen in „meinPC“ zu ändern, ist der folgende Fehler aufgetreten:
Das Konto existiert bereits.“

Windows 7 change computername and domain/group

Ursache

Der Domänen-Controller kennt den Computer. Es gibt einen entsprechenden Eintrag in der Active Directory.

Lösung

Durch das Löschen des Eintrags in der Active Directory kann der Computer den entsprechenden Namen wieder annehmen und der Eintrag wird im AD neu generiert.

Herunterfahren mit offenen Fenstern

Beschreibung

(Beim Herunterfahren von Windows offene Fenster speichern, bzw. bei einem erneuten Start wieder aufrufen).

Lösung

Mithilfe des CMD-Befehls

shutdown –h

kann der Computer heruntergefahren werden und alle offenen Fenster werden gespeichert. Windows wird hiermit aber sozusagen im Betrieb angehalten und bei Herauffahren, zeigt das Betriebssystem „Windows wird fortgesetzt“ an.

Quelle

Get-Counter in Variable

Damit verschiedene Werte von Get-Counter in eine Variable gepackt werden können, müssen diese isoliert werden.

$a = (Get-Counter „\\meinserver\Memory\Available MBytes“).CounterSamples.CookedValue;
Write-Host $a


Quelle

E-Mails versenden

Um E-Mails zu versenden, kann man dies natürlich als Funktion aufrufen. Damit die Parameter richtig übergeben werden, muss der Befehl richtig formatiert werden, wie es das nachfolgende Beispiel ist:

sendmail “$computer_name@test.com” “john.doe@test.com” “Server-Neustart” “Der Server $computer_name wurde neu gestaret.”;

Alternativ dazu kann man es natürlich auch im Script direkt mit

$sender = „john.doe@test.com“
$receiver = „john.doe@test.com“
$subject = „Test“
$body = „Meine spitzenklasse E-Mail.“

aufrufen. Der SMTP-Server sollte direkt im Skript definiert werden, da sich dieser für gewöhnlich nur sehr selten verändert, aber dies liegt im eigenen ermessen.

$global:SMTP_Server = „meinmailserver“

Was auf jeden Fall in der Funktion stehen muss, ist der nachfolgende Code. Dieser ist das Kernstück und versendet die E-Mail wirklich, auf Wunsch auch mit einem Anhang.

$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = $global:SMTP_Server
$mailmessage.from = $sender
$mailmessage.To.add($receiver)
$mailmessage.Subject = $subject
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$smtpclient.Send($mailmessage)


Quelle

Dateien kopieren

Der folgende Befehl kopiert alle Unterordner und -dateien eines Ordners an den gewünschten Pfad.

Copy-Item [SOURCE] [DESTINATION] -recurse

Der Aufruf innerhalb der Powershell könnte dann z.B. so aussehen:

Copy-Item c:\scripts c:\test -recurse

Allerdings möchte ich noch darauf hinweisen, dass die Pfade ein Leerzeichen enthalten können z.B. „C:\Program Files“. Das wird dann durch Anführungszeichen geregelt. Nachfolgend nochmal ein Beispiel:

Copy-Item „C:\Program Files“ „c:\test der zweite“ -recurse

Der Parameter „recurse“ heißt, dass bei einer Angabe eines Ordners nicht nur der Ordner, sondern auch alle Unterordner mitsamt Dateien kopiert werden.


Quelle
http://technet.microsoft.com/de-de/library/hh849793%28v=wps.620%29.aspx