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 I

Mitglied: TuXHunt3R

TuXHunt3R (Level 3) - Jetzt verbinden

16.12.2007, aktualisiert 18.10.2012, 81781 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:
https://www.administrator.de/wissen/powershell-for-runaways-part-ii-8661 ...
Bitte warten ..
Mitglied: 57675
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 ..
Ähnliche Inhalte
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 ...

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 ...

Batch & Shell

Weiterentwicklung von Powershell

Information von Penny.CilinBatch & Shell

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

Batch & Shell

Powershell: Googlemail (GMail) nativ mit Powershell verwalten

Anleitung von colinardoBatch & Shell2 Kommentare

1. Vorwort Google bietet über die GMail-API die Voraussetzungen um sein Google-Mail-Konto über diverse Programmierschnittstellen (PHP/Javascript/etc. pp) zu verwalten. ...

Neue Wissensbeiträge
Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 7 StundenSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 7 StundenMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 7 StundenHardware10 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

MikroTik RouterOS

Mikrotik Advisory: Vulnerability exploiting the Winbox port

Information von colinardo vor 7 StundenMikroTik RouterOS

Brand aktuell: Eine Schwachstelle im Winbox-Port bei Mikrotik Routern erlaubt das Auslesen der User-Datenbank der Router. Patch ist aktuell ...

Heiß diskutierte Inhalte
Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux23 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL16 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...

Windows Server
Domänencontroller trennen
Frage von Akit57Windows Server13 Kommentare

Hallo, ich hoffe das mir hier jemand meine Frage trotz der spärlichen Informationen die ich geben kann beantworten kann: ...

Router & Routing
Gesichertes NTP, wie z.B. NTPsec oder andere Variante bei Fritzboxen möglich ?
Frage von BruniumRouter & Routing11 Kommentare

Aktueller Zustand: Verwendung von ungesicherten NTP mit Fritzbox Gewünschter Zustand: Verwendung von gesicherten NTP mit Fritzbox Frage: Was gibt ...