Top-Themen

Aktuelle Themen (A bis Z)

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, 15972 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.
Ähnliche Inhalte
Windows 10
Win10-Aktivierungsfrust Teil III
Tipp von DerWoWussteWindows 106 Kommentare

"Nicht schon wieder Ihmchen mit seinem Aktivierungsfrust" wird jetzt hoffentlich keiner denken ;-) Ich habe Neuigkeiten zu meinen Beobachtungen ...

Batch & Shell
Powershell elevated
Tipp von AnkhMorporkBatch & Shell2 Kommentare

Ein kleiner Tipp am Rande für alle PS-Novizen (ich wars einfach leid): Um eine Konsole mit elevated rights schnell ...

Batch & Shell
Weiterentwicklung von Powershell
Information von Penny.CilinBatch & Shell

Anbei ein Artikel im Heise Newsticker bzgl. Powershell: Systemverwaltung: PowerShell goes Cross-Plattform

Windows Netzwerk
Securing Privileged Access for the AD Admin - Part 1
Information von 133883Windows Netzwerk1 Kommentar

Sollte jeder AD Admin in seinem Repertoire haben. Separate Admin-Accounts für exakt definierte Aufgaben und Administrations-Bereiche. Folgende Artikelserie nimmt ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 2 TagenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement16 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...