Christophs Powershell Page
Nachdem aller Anfang schwer ist liefere ich hier einige Dinge für den Einstieg in die Mixrosoft Power Shell (vormals Monad). Die Sammlung der Scripts is willkürlich und im Laufe meiner Spielereien entstanden.
Profil erstellen
Im Profil können Einstellungen vorgenommen werden, die für jede Session gültig ist (Alias, Functions, Pfade, etc.). In der Umgebungsvariable $profile ist der Pfad zur Profil-Datei gespeichert. Um die Datei zu editieren (und gegebenenfalls vorher zu erstellen) einfach foldenen Befehl auf der msh ausführen:
> notepad $profile
Umgebungsvariablen? Path?
Eine Liste der Umgebungsvariablen listet man mit $env auf, eine bestimme
Umgebungsvariable (z.B. den Pfad) mit $env:path. Um den Pfad zu erweitern,
schreibt man z.B.:
> $env:path += ';C:\WindowsPowerShell'
Scripts ausführen
Damit man Scripts (.ps1) ausführen kann müssen die Rechte angepasst werden. Ich hab die Security ganz abgedreht:
> Set-ExecutionPolicy Unrestricted
Scripts im Explorer öffnen
Damit man .ps1 Scripts im Explorer per Doppelklick öffnen kann hier ein File zum Hinzufügen der richtigen Einträge in die Registry: (Download Powershell_Extension.reg). Das Schlüsselkommando dabei ist:
> C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe "&'%1' %*"
Open Powershell here
Ein praktisches REG-Script, dass im Explorer ein "Open Powershell here" im Folder-Kontextmenü anzeigt. (Download Open_Powershell_Here.reg)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\powershell]
@="Open Powershell Here"
[HKEY_CLASSES_ROOT\Directory\shell\powershell\command]
@="C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe -noexit \"& {cd '%L'}\""
Erzeugen von ZIP-Files
Mit folgendem Script lassen sich per msh ZIP-Dateien erzeugen und "befüllen". (Download out-zip.ps1). Verwendet wird der neue "Befehl" z.B.:
$filename = 'Backup ' + (get-date).ToString("yyyyMMdd HHmm") + '.zip'
gi Dir1 | out-zip $filename
sleep 1
gi Dir2 | out-zip $filename
sleep 1
gi Dir3/SubDir | out-zip $filename
$filename + " sucessfully generated"
Mit sleep wird sichergestellt, dass die der Filezugriff auf das ZIP-File fertig
ist bevor ein neuer Zugriff stattfinden (bei mir hat's geholfen). Hier sieht man auch schön, dass
.NET Funktioninalitäten direkt verwendet werden können: get-date liefert ein System.DateTime Objekt
zurück. Mit der ToString() Methode kann dann die Ausgabe formatiert werden.
Wo ist die "pause" Funktion hin?
Ich hab mir eine Funktion geschrieben die den entsprechenden .NET Befehl
[System.Console]::ReadKey() > $null absetzt. Die Funktionsdeklaration (ab ins Profil damit,
dann kann man auch wieder einfach pause schreiben) sieht so aus:
function pause {[System.Console]::ReadKey() > $null}
Mehr Infos auch auf der Wikipedia Seite zur Power Shell