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 I

Anleitung Entwicklung Batch & Shell

Mitglied: TuXHunt3R

TuXHunt3R (Level 3) - Jetzt verbinden

16.12.2007, aktualisiert 18.10.2012, 79298 Aufrufe, 11 Kommentare, 7 Danke

Hallo ans Forum

Die PowerShell hat sich inzwischen zu meinem Lieblings-Werkzeug unter Windows entwickelt, aber leider wird sie IMHO noch zu wenig genutzt.
Von den Mitschülern in der Berufschule und auch den Admins an meinem Arbeitsplatz nutzen nur wenige die PowerShell, die meisten hängen noch beim Windows Scripting Host oder Batch fest.
Dabei ist die PowerShell überaus mächtig. Einerseits kann man mit der Powershell auf das gesamte .NET Framework 2.0 zugreifen (was mit WSH nicht möglich ist), andererseits kann man ausserdem wie bei WSH auf alle WMI- und COM-Objekte zugreifen.
Dieses Tutorial dient also vor allem dazu, die Angst vor einem Umstieg zu nehmen und einen kurzen Überblick zu bieten, so dass man anfangen kann, Scripts zu schreiben.

Sicherheitsmassnahmen der PowerShell

Die PowerShell hat diverse Script-Sicherheitsmassnahmen integriert. Im Gegensatz zu Scripts in den diversen anderen Scriptsprachen (VBScript, Perl, JScript, Batch) kann man PowerShell-Scripts nicht per Doppelklick auf die Datei starten. Dies hat den Vorteil, dass Schad-Scripts, welche im Anhang von Mails verschickt werden, nicht einfach so gestartet werden können.
Folgende Möglichkeiten gibt es, PowerShell-Scripts zu starten:
  1. Beim Start über die Shell direkt muss ein .\ vorne dran gehängt werden. .\scriptname
  2. Starten eines Scripts mittels einer Verknüpfung oder per Batch-Datei: powershell.exe -command "C:\Scriptname.ps1"
Bevor überhaupt Scripts ausgeführt werden können, muss ausserdem die Execution-Policy definiert werden. Das geht mit dem CMDLet "set-executionpolicy". Es gibt 4 verschiedene Stufen:
  • Restricted --> Keine Skripte werden ausgeführt
  • Allsigned --> Nur signierte Skripte werden ausgeführt
  • RemoteSigned --> Lokal erstellte Skripte sind erlaubt, aber andere Skripte müssen signiert sein
  • Unrestricted --> Alle Scripts werden ausgeführt
Standarmässig ist die Stufe "Restricted" aktiviert.
Mit dem folgenden CMDLet-Befehl wird die Execution-Policy auf "Unrestricted" gesetzt
01.
set-executionpolicy unrestricted

Online-Hilfe der CMDLets abrufen

Die Online-Hilfe der einzelnen CMLets (so heissen die Befehle bei der Powershell) lässt sich folgendermassen abrufen:
01.
get-help CMDLet -full

Scripting

Nun kommen wir zum eigentlichen Scripting. PowerShell-Scripts sind normale Textdateien mit der Endung .ps1, welche mit jedem beliebigen Texteditor bearbeiten werden können.

Ein-/Ausgabe

Ausgabe an die Konsole
01.
write-host "Ausgabe"
Ausgabe in ein ANSI-Textfile
01.
"Ausgabe" | out-file -filepath C:\logfile.txt -encoding Default
Wenn das Textfile um die Ausgabe erweitert werden soll:
01.
"Ausgabe" | out-file -filepath C:\logfile.txt -encoding Default -append
Ausgabe in ein CSV-File
01.
$a = get-process 
02.
$a | select-object Name,Path,Company | Export-csv -path C:\text.csv
Ausgabe in ein HTML-File
01.
$a = get-process 
02.
$a | convertto-html -property Name,Path,Company > C:\test.html
Benutzereingaben verwenden
01.
$Eingabe = Read-Host "Bitte geben Sie etwas ein:" 
02.
Write-Host "Sie haben folgendes eingegeben: " $Eingabe
Kommandozeilenargumente verwenden
Die Kommandozeilenargumente müssen per Leerschlag übergeben werden:
01.
.\scriptname Argument1 Argument2
Folgendermassen können die Kommandozeilenargumente verwendet werden:
01.
$Argument1 = $args[0] 
02.
$Argument2 = $args[1]
Aus einer Textdatei lesen
Hier wird mittels einer ForEach-Schleife für jede Zeile des Textfiles ein Befehlssatz ausgeführt:
01.
$Zeile = get-content "C:\textfile.txt" 
02.
foreach-object ($i in $Zeile) { 
03.
# Befehle 
04.
}

Variabeln, Arrays und Konstanten

Variabeln
Variabeln werden folgendermassen definiert...
01.
$Variabelnname = Inhalt
und folgendermassen ausgegeben:
01.
$Variabelnname
Arrays
Arrays werden folgendermassen definiert...
01.
$Arrayname = 1,5,9,10
und folgendermassen ausgegeben:
01.
$Arrayname
Folgendermassen können einzelne Felder des Arrays ausgegeben werden:
01.
$Arrayname[3]
Die Nummerierung der Felder eines Arrays fängt bei 0 an.
Konstanten
Konstanten werden ohne $ kreiert:
01.
set-variable -name Konstantenname -value Inhalt -option constant
Folgendermassen werden Konstanten ausgegeben, rsp. abgefragt:
01.
$Konstantenname

Schleifen und Bedingungen

If Bedingung
Führt einen Befehlssatz aus, wenn eine Bedingung erfüllt ist:
01.
$Variable = "Rot" 
02.
if ($Variable -eq "Rot") 
03.
	{"Die Farbe ist rot!"} 
04.
elseif ($Variable -eq "Blau") 
05.
	{"Die Farbe ist blau!"} 
06.
else 
07.
	{"Eine andere Farbe..."}
Switch Bedingung
Eine komfortablere Möglichkeit, Befehlssätze bei Erfüllung einer Bedingung zu auszuführen:
01.
$Variable = "Rot" 
02.
switch ($Variable) { 
03.
	"Rot" {"Die Farbe ist rot!"} 
04.
	"Blau" {"Die Farbe ist blau!"} 
05.
	default {"Eine andere Farbe..."} 
06.
}
Do While Schleife
Führt die Schleife aus, SOLANGE die Bedingung erfüllt ist:
01.
$Variable = 1 
02.
Do {$Variable;$Variable++} 
03.
While ($Variable -lt 10) 
Do Until Schleife
Führt die Schleife aus, BIS die Bedingung erfüllt ist:
01.
$Variable = 1 
02.
Do {$Variable;$Variable++} 
03.
Until ($Variable -gt 10)
For Schleife
Befehle in definierter Anzahl ausführen:
01.
For ($Variable=1; $Variable -le 10; $Variable++) 
02.
{$Variable} 
ForEach Schleife
Arbeitet eine Gruppe von Objekte an
01.
Foreach-object ($i in get-childitem C:\windows) 
02.
{$i.name; $i.creationtime}

Objekte verwenden

COM-Objekte
Ein Objekt kreieren:
01.
$objNetzwerk = new-object -comobject "wscript.network"
Methoden des Objekts benutzen:
01.
objNetzwerk.username
WMI-Objekte
WMI-Objekte abfragen:
01.
get-wmiobject -class win32_operatingsystem -computername AbzufragenderComputer
.NET Framework Objekte
.NET Objekt kreieren (Parameter können übergeben werden, falls nötig):
01.
$dotnetobjDateTime = New-Object -Type System.DateTime 2007,12,26 
02.
$dotnetobjDateTime.get_DayOfWeek()

Sonstiges

Kommentare
Kommentare werden mit einem # eingeführt:
01.
# Diese Codezeile wird nicht ausgeführt
Ich hoffe, ich konnte einen kurzen Einblick geben und wünsche viel Spass beim Script-Umschreiben!

PS: Herzlichen Dank an Frank Koch von Microsoft Schweiz, von dessen PowerShell-Manual ich einige Sachen entlehnt habe.


Nachtrag:

Voraussetzungen für die Verwendung der PowerShell

Grundsätzlich wird die PowerShell von den Betriebsystemen XP, Vista, Server 2003, Exchange 2007 und Server 2008 unterstützt. Je Betriebsystem gibt es eine eigene Version der PowerShell. Ausserdem muss die Sprache beachtet werden. Was zusätzlich noch vonnöten ist, ist die Installation des .NET Framework 2.0, welches über die Windows Updates eingespielt werden kann.

Hier gibts die PowerShell zum Download:
http://www.microsoft.com/windowsserver2003/technologies/management/powe ...
Mitglied: Iwan
17.12.2007 um 10:02 Uhr
sehr schöne Sache, aber wie kriege ich ein Skript auf einem Client ans Laufen?
muss dafür dort auch die Powershell installiert sein?
sind sonstige Voraussetzungen dafür notwendig?
Bitte warten ..
Mitglied: TuXHunt3R
17.12.2007 um 11:38 Uhr
Gut, dass du es erwähnst. Ich werde es nachtragen.

Edit:
Ja, die PowerShell muss auf jedem Client installiert sein, auf dem du PS-Scripts ausführen willst.
Bitte warten ..
Mitglied: pacobay
17.12.2007 um 19:29 Uhr
Hallo TuXHunt3R,
freue mich schon auf "PowerShell for Runaways - Part II und Folgende"
ciao pacobay
Bitte warten ..
Mitglied: Biber
17.12.2007 um 20:38 Uhr
Moin TuXHunt3R,

eine schöne Eröffnung für eine neue "Runaways"-Reihe.
Prima Tutorial.

Weiter so!
Vielleicht noch mal irgendwann einen neuen Nick besorgen..*gg

Grüße
Biber
Bitte warten ..
Mitglied: TuXHunt3R
17.12.2007 um 20:57 Uhr
Vielleicht noch mal irgendwann einen neuen Nick besorgen..*gg

Vorschläge?
Bitte warten ..
Mitglied: kallewirsch
20.12.2007 um 20:21 Uhr
> Vielleicht noch mal irgendwann einen
neuen Nick besorgen..*gg

Vorschläge?

Hallo TuxHunt3R,

ich bin von Deinem Tutorial begeistert. Vielleicht kann ich Dir mit vier Buchtiteln weiterhelfen, werde die Titel aber erst morgen posten können.
Allerdings beteilige ich mich nicht an den Vorschlägen für Deinen neuen Nick......

Weiterso.

Grüße

Kallewirsch
Bitte warten ..
Mitglied: TuXHunt3R
23.12.2007 um 21:44 Uhr
Allerdings beteilige ich mich nicht an den Vorschlägen für Deinen neuen Nick......

Naja, habe eigentlich auch nicht vor, den Nick zu wechseln......
Bitte warten ..
Mitglied: masterG
30.05.2008 um 22:29 Uhr
Was sind die Vorteile der Powershell?

masterG
Bitte warten ..
Mitglied: TuXHunt3R
31.05.2008, aktualisiert 18.10.2012
Gegenüber was? VBScript oder der CMD-Shell?

OK, hier sind sie:

  1. Logische Befehlssyntax. Jeder Befehl, d.h. jedes CMDlet ist nach dem Prinzip VERB-SUBSTANTIV aufgebaut
  2. Stark ausgebautes Piping. Jeder Befehl kann über die Pipe ( | ) an andere Befehle übergeben werden (sofern sinnvoll, natürlich)
  3. Volle Unterstützung des .NET Frameworks, es ist aber trotzdem noch möglich mit den (veralteten) COM-Objekten zu arbeiten
  4. Weniger Code, der auch einfacher zu lesen ist als VBScript.
  5. Einfachere Verwendung von CSVs, XML und HTML. Genannt seien hier z.B. die CMDlets "Import-CSV", "Export-CSV" und "Convertto-HTML".
  6. Jeder Output ist als Objekte im RAM gespeichert, nicht wie der CMD-Shell als Text. Dazu hier ein Beispiel:
01.
$Textfile = get-content C:\test.txt
Diese Codezeile speichert den Inhalt des Textfiles C:\test.txt in einem Array mit dem Namen "$Textfile". Du musst also nicht eine ganze Funktion für das Einlesen eines Textfiles in ein Array schreiben, eine Codezeile verwenden. Jede Zeile eines Textfiles ist nun als Objekt in diesem Array gespeichert. Dieses Array kannst du nun z.B. in einer Foreach-Schleife weiterverwenden.
01.
foreach ($Linie in $Textfile) {write-host "Blabla"$Linie}
Diese Schleife gibt z.B. das Textfile zeilenweise, d.h. objektweise aus und schreibt vor jede Zeile den Text "Blabla". Es gibt natürlich noch andere Möglichkeiten....

Ausserdem ist die PowerShell Script Language stark an C# angelehnt, was den Umstieg auf diese sehr weit verbreitete Programmiersprache erleichert.

Wenn du ein umfassendes Beispielscript sehen willst, schau mal hier:
http://www.administrator.de/wissen/powershell-for-runaways-part-ii-8661 ...
Bitte warten ..
Mitglied: tobias86
18.06.2010 um 09:15 Uhr
Vielen Dank für die Anleitung. Wäre es nicht sinnvoll, Part II zu verlinken?
Bitte warten ..
Mitglied: No75000
09.09.2011 um 10:56 Uhr
Zitat von TuXHunt3R:
Bevor überhaupt Scripts ausgeführt werden können, muss ausserdem die Execution-Policy definiert werden. Das geht
mit dem CMDLet "set-executionpolicy". Es gibt 4 verschiedene Stufen:
  • Restricted --> Keine Skripte werden ausgeführt
  • Allsigned --> Nur signierte Skripte werden ausgeführt
  • RemoteSigned --> Lokal erstellte Skripte sind erlaubt, aber andere Skripte müssen signiert sein
  • Unrestricted --> Alle Scripts werden ausgeführt
Standarmässig ist die Stufe "Restricted" aktiviert.
Mit dem folgenden CMDLet-Befehl wird die Execution-Policy auf "Unrestricted" gesetzt

Bis hier hin noch wunderbar die einzelnen Stufen der executionpolicy aufgelistet

01.
 set-executionpolicy unrestricted

Unrestricted ist sicherlich für eine Testumgebung eine gut gewählte Lösung. Aber sicherheitstechnisch wäre
01.
 set-executionpolicy remotesigned
die bessere Wahl. Wer also in Firmennetzwerken mit der PS rumbastelt sollte sich für remotesigned entscheiden.
Auf Servern wäre sogar allsigned besser, wenn man die Möglichkeit hat Signaturen zu erstellen.

Also wäre es sicher besser, den Leitfaden dahingehend anzupassen.
Im Übrigen ist in der Fachliteratur auch immer nur der Modus RemoteSigned gesetzt. (Siehe dazu: Windows PowerShell von Holger Schwichtenberg - Seite 107 (erschienen 2008, Addison-Wesley-Verlag)
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Open Source PowerShell Part 1 Hey Scripting Guy! Blog (2)

Link von AnkhMorpork zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

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
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...