PowerShell For Runaways - Part III
Moin Moin
Als Ergänzung zu den IHMO hervorragenden Anleitungen
PowerShell for Runaways - Part I
PowerShell For Runaways - Part II von @TuXHunt3R
habe ich mich durchgerungen eine Fortsetzung zu schreiben, da aus meiner Sicht ein paar wesentliche Dinge bisher nicht erwähnt wurden, die ich aber für ziemlich entscheidend halte.
Auf Geht's.
Also greift man der Einfachheit halber meistens wieder auf die Kommandozeile zurück. (da kennt man sich wenigstens aus).
Unnötig. Die Powershell ist in der Lage jedes Cmdlet an einen alternativen Namen zu binden und auch darüber aufzurufen.
Eine Auflistung aller bereits mitgelieferten Aliase erhält man durch den Aufruf:
Bei der Durchsicht der Liste stellt man fest das bereits etliche bekannte Befehle (aus bash oder dos) an die entsprechenden Cmdlets gebunden sind.
Dies läßt sich natürlich noch erweitern., z.B.:
Der Aufbau einer Funktion ist recht simpel.
Das Schlüsselwort "function" gefolgt vom Funktionsnamen. Die Anweisungen werden in {} eingeschlossen und
jede Anweisung muss mit einem Semikolon beendet werden.
Das sieht wie folgt aus:
Als Beispiel bau ich hier mal eine Funktion die meinen Lieblings Editor Notepad++ aufruft.
(Selbstreden, das Notepad++ installiert sein muss.)
Kennstück ist das Cmdlet "start-process". Damit lassen sich, wie der Name schon sagt Prozesse starten.
Dies Cmdlet hat 2 wesentliche Argumente: -Fielpath (Pfad der Anwendung die wir starten möchten) und -Argumentlist (Argumente die wir unserem Programm übergeben möchten).
Also kurz den Pfad der exe ermittelt und ausprobiert
Fertig? Mitnichten. Der Programmpfad sollte schon aus einer Umgebungsvariablen kommen und mind. eine Pfadangabe als
Parameter wäre wohl auch praktisch.
Umgebungsvariablen kann man mit "get_Childitem env:" (bzw. dir env: ) auslesen.
Wenn ich dies Geschleuder jetzt in meine Funktion einbaue sieht das so aus:
Fehlt noch die Pfadangabe als Parameter. Parameter werden in () hinter dem Funktionsnamen angegeben.
Das ist es eigentlich. Allerdings gilt diese Funktion nur in der laufenden Powershell Session oder in dem Skript in dem sie deklariert ist. Aber dafür gibt es ja....
Die Powershell kennt 4 unterschiedliche Profilpfade.
Die Profilpfade lassen dich mit $profile abfragen. Die angegebenen Dateien existieren noch nicht.
Mit der folgenden Anweisung erzeugen wir uns erst mal eine Profildatei (in Aktueller User, Aktueller PC).
und öffnen diese mal im Editor:
Der Editor öffnet (wie erwartet) eine leere Datei. Also kopieren wir unsere Funktion notepad+ mal hinein und weil wir so faul sind binden wir das Ding noch schnell an einen kürzeren Alias:
Das speichern wir (nein, wir ändern nicht Pfad oder Dateiname).
Wenn ihr euch jetzt nicht vertippt habt, könnt ihr die Powershell schließen und
beim erneuten Aufruf, das Kommando np+ sofort verwenden.
Zum Ende hin noch eine kleine hilfreiche Information ...
z.B.
notepad
ipconfig /all
...
Damit muss ich also nicht mehr überlegen welche Konsole ich öffne oder dauernd hin und her wechseln.
Zusammen mit der Tatsache das man mit der Powershell auch Com-Objekte verwenden kann (um z.B. Word zu steuern)
und ich dafür nicht mehr auf VBS ausweichen muss, hat dies für mich den Ausschlag gegeben in Zukunft primär auf die Powershell zu setzen.
So. "Ich habe fertig!"
Gruß L.
Als Ergänzung zu den IHMO hervorragenden Anleitungen
PowerShell for Runaways - Part I
PowerShell For Runaways - Part II von @TuXHunt3R
habe ich mich durchgerungen eine Fortsetzung zu schreiben, da aus meiner Sicht ein paar wesentliche Dinge bisher nicht erwähnt wurden, die ich aber für ziemlich entscheidend halte.
Auf Geht's.
Aliase
Die Cmdlets der Powershell sind meist etwas lang und für jeden der damit anfängt natürlich erst mal neu.Also greift man der Einfachheit halber meistens wieder auf die Kommandozeile zurück. (da kennt man sich wenigstens aus).
Unnötig. Die Powershell ist in der Lage jedes Cmdlet an einen alternativen Namen zu binden und auch darüber aufzurufen.
Eine Auflistung aller bereits mitgelieferten Aliase erhält man durch den Aufruf:
get-alias * #Liefert eine Liste aller bekannten Aliase
Dies läßt sich natürlich noch erweitern., z.B.:
set-alias -name np -value notepad #So muss ich nur noch np tippen statt notepad
Funktionen
Mit der Powershell lassen sich natürlich auch Funktionen deklarieren.Der Aufbau einer Funktion ist recht simpel.
Das Schlüsselwort "function" gefolgt vom Funktionsnamen. Die Anweisungen werden in {} eingeschlossen und
jede Anweisung muss mit einem Semikolon beendet werden.
Das sieht wie folgt aus:
function FunktionsName {
1. Anweisung;
2. Anweisung;
....
}
(Selbstreden, das Notepad++ installiert sein muss.)
Kennstück ist das Cmdlet "start-process". Damit lassen sich, wie der Name schon sagt Prozesse starten.
Dies Cmdlet hat 2 wesentliche Argumente: -Fielpath (Pfad der Anwendung die wir starten möchten) und -Argumentlist (Argumente die wir unserem Programm übergeben möchten).
Also kurz den Pfad der exe ermittelt und ausprobiert
Function notepad+ {
start-process -filepath "C:\Program Files (x86)\Notepad++\notpad++.exe"; # Notepad++.exe starten
}
Parameter wäre wohl auch praktisch.
Umgebungsvariablen kann man mit "get_Childitem env:" (bzw. dir env: ) auslesen.
dir env: # Liefert eine Liste aller bekannten Umgebungsvariablen
Function notepad+ {
$d=dir env:"ProgramFiles(x86)"; # Umgebungsvariable ProgramFiles(x86) in Variable $d speichern
$d = $d.value + "\Notepad++\notepad++.exe"; # Nur den Pfad aus $d rauslutschen und den Rest anhängen
start-process -filepath $d; # Notepad++.exe starten
}
function notepad+ ($path="") { # Parameter $path mit Standardwert angeben
$d=dir env:"ProgramFiles(x86)"; # Umgebungsvariable ProgramFiles(x86) in Variable $d speichern
$d = $d.value + "\Notepad++\notepad++.exe"; # Nur den Pfad aus $d rauslutschen und den Rest anhängen
If ($path -eq "") # Prüfen ob ein Parameter angegeben wurde
{start-process -filepath $d} # Wenn nicht Starten wie gehabt
else # Falls doch
{start-process -filepath $d -Argumentlist $path}; # $path als Argument durchreichen
}
Profile
Powershell Profile sind benannte Powershell Skripte die beim Start der Konsole (oder bei Ausführung eines Skriptes) automatisch ausgeführt (geladen) werden. Darin lassen sich natürlich ganz hervorragend eigene Deklarationen für Funktionen oder Aliase unterbringen.Die Powershell kennt 4 unterschiedliche Profilpfade.
- Aktueller User, Aktueller PC
- Aktueller User, Alle PCs
- Alle User, Aktueller PC
- Alle User, Alle PCs
Die Profilpfade lassen dich mit $profile abfragen. Die angegebenen Dateien existieren noch nicht.
Mit der folgenden Anweisung erzeugen wir uns erst mal eine Profildatei (in Aktueller User, Aktueller PC).
if (!(test-path $profile))
{new-item -type file -path $profile -force}
notepad $profile
function notepad+ ($path="") { # Parameter $path mit Standardwert angeben
$d=dir env:"ProgramFiles(x86)"; # Umgebungsvariable ProgramFiles(x86) in Variable $d speichern
$d = $d.value + "\Notepad++\notepad++.exe"; # Nur den Pfad aus $d rauslutschen und den Rest anhängen
If ($path -eq "") # Prüfen ob ein Parameter angegeben wurde
{start-process -filepath $d} # Wenn nicht Starten wie gehabt
else # Falls doch
{start-process -filepath $d -Argumentlist $path}; # $path als Argument durchreichen
}
set-alias -name np+ -value notepad+ # Funktion notepad+ an Alias np+ binden
Wenn ihr euch jetzt nicht vertippt habt, könnt ihr die Powershell schließen und
beim erneuten Aufruf, das Kommando np+ sofort verwenden.
Zum Ende hin noch eine kleine hilfreiche Information ...
CMD ist integriert
In der Windows Powershell Konsole lassen sich alle Befehle die ich sonst in der Kommandozeile ausgeführt habe ebenfalls aufrufen.z.B.
notepad
ipconfig /all
...
Damit muss ich also nicht mehr überlegen welche Konsole ich öffne oder dauernd hin und her wechseln.
Zusammenfassung
Mit Aliasen, Funktionen und Profilen kann ich mir die Cmdlets so anpassen bzw. zusammenstellen wie ich es gerne hätte bzw. ständig brauche.Zusammen mit der Tatsache das man mit der Powershell auch Com-Objekte verwenden kann (um z.B. Word zu steuern)
und ich dafür nicht mehr auf VBS ausweichen muss, hat dies für mich den Ausschlag gegeben in Zukunft primär auf die Powershell zu setzen.
So. "Ich habe fertig!"
Gruß L.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167534
Url: https://administrator.de/contentid/167534
Ausgedruckt am: 21.11.2024 um 22:11 Uhr