Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PowerShell For Runaways - Part III

Anleitung Entwicklung Batch & Shell

Mitglied: Logan000

Logan000 (Level 3) - Jetzt verbinden

06.06.2011, aktualisiert 14:32 Uhr, 15410 Aufrufe, 4 Danke

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.

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:
01.
get-alias * 						#Liefert eine Liste aller bekannten Aliase
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.:
01.
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:
01.
function FunktionsName { 
02.
	1. Anweisung; 
03.
	2. Anweisung; 
04.
	.... 
05.
}
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
01.
Function notepad+ { 
02.
	start-process -filepath "C:\Program Files (x86)\Notepad++\notpad++.exe"; # Notepad++.exe starten 
03.
}
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.
01.
dir env: 						# Liefert eine Liste aller bekannten Umgebungsvariablen
Wenn ich dies Geschleuder jetzt in meine Funktion einbaue sieht das so aus:
01.
Function notepad+ { 
02.
	$d=dir env:"ProgramFiles(x86)";			# Umgebungsvariable ProgramFiles(x86) in Variable $d speichern 
03.
	$d = $d.value + "\Notepad++\notepad++.exe";	# Nur den Pfad aus $d rauslutschen und den Rest anhängen 
04.
	start-process -filepath $d;			# Notepad++.exe starten 
05.
}
Fehlt noch die Pfadangabe als Parameter. Parameter werden in () hinter dem Funktionsnamen angegeben.
01.
function notepad+ ($path="") {				# Parameter $path mit Standardwert angeben 
02.
	$d=dir env:"ProgramFiles(x86)";			# Umgebungsvariable ProgramFiles(x86) in Variable $d speichern 
03.
	$d = $d.value + "\Notepad++\notepad++.exe";	# Nur den Pfad aus $d rauslutschen und den Rest anhängen 
04.
	If ($path -eq "")				# Prüfen ob ein Parameter angegeben wurde 
05.
    		{start-process -filepath $d}		# Wenn nicht Starten wie gehabt 
06.
	else						# Falls doch 
07.
		{start-process -filepath $d -Argumentlist $path}; # $path als Argument durchreichen 
08.
}
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....

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
Da werd ich jetzt nicht weiter drauf eingehen und mich nur um die erste Variante kümmern.
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).
01.
if (!(test-path $profile))  
02.
	{new-item -type file -path $profile -force}
und öffnen diese mal im Editor:
01.
notepad $profile
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:
01.
function notepad+ ($path="") {				# Parameter $path mit Standardwert angeben 
02.
	$d=dir env:"ProgramFiles(x86)";			# Umgebungsvariable ProgramFiles(x86) in Variable $d speichern 
03.
	$d = $d.value + "\Notepad++\notepad++.exe";	# Nur den Pfad aus $d rauslutschen und den Rest anhängen 
04.
	If ($path -eq "")				# Prüfen ob ein Parameter angegeben wurde 
05.
    		{start-process -filepath $d}		# Wenn nicht Starten wie gehabt 
06.
	else						# Falls doch 
07.
		{start-process -filepath $d -Argumentlist $path}; # $path als Argument durchreichen 
08.
09.
 
10.
set-alias -name np+ -value notepad+			# Funktion notepad+ an Alias np+ binden
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 ...

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.
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Open Source PowerShell Part 1 Hey Scripting Guy! Blog (2)

Link von AnkhMorpork zum Thema Batch & Shell ...

Batch & Shell
Powershell - In Textdatei suchen und ersetzen (1)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...