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, 81984 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
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

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

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
iOS
IOS 12.2 beta und OpenVPN iPad und iPhone
Erfahrungsbericht von magicteddy vor 2 StundeniOS

Moin, kleiner Hinweis an die experimentierfreudigen unter Euch: Bei der aktuellen beta gibt es ein Problem im Zusammenspiel zwischen ...

Vmware
VMware Tools 10.3 verfügbar
Information von sabines vor 5 StundenVmware

Eine Sicherheitslücke wird mit den Tools der Version 10.3 geschlossen, die Tools müssen auf jeder VM aktualisiert werden. Näheres ...

Apple

Apple aktualisiert MacBook Pro, mit bis zu sechs Kernen

Information von Vision2015 vor 2 TagenApple

Jawohlchen das Warten hat sich gelohnt :-) Apple aktualisiert MacBook Pro Frank

Verschlüsselung & Zertifikate

In-place Upgrade verschlüsselter Windows-Systeme mittels reflectdrivers

Tipp von DerWoWusste vor 3 TagenVerschlüsselung & Zertifikate1 Kommentar

Hinter diesem sperrigen Titel verbirgt sich die Info, dass offenbar seit Win10 v1607 im Windows-Setup (setup.exe der CD/des USB-Sticks) ...

Heiß diskutierte Inhalte
Microsoft
Dringend: Nach neustart kein zugriff mehr per RDP möglich - vermutlich wegen gelöschter SID in AD
gelöst Frage von sven784230Microsoft27 Kommentare

Hallo zusammen, gerade hat ein Server 2012 (terminalserver + Active directory) einen geplanten Neustart durchgeführt, wenn ich mich jetzt ...

Hardware
Alte Hardware verkaufen
Frage von Lebowski23Hardware20 Kommentare

Hallo, durch größere Umbauten haben einiges an Hardware "rumliegen", die wir vielleicht noch verkaufen wollen. Es sind so ca. ...

Exchange Server
Exchange 2013 - Update schlägt fehlt
gelöst Frage von chb1982Exchange Server20 Kommentare

Hallo zusammen, kann sich jemand einen Reim auf die unten stehenden Fehlermeldung machen? Sie tritt auf beim Update von ...

Windows Server
Active Directory Probleme DC sieht sich nicht selbst als DC DNS Fehler?
gelöst Frage von Cisco7971Windows Server15 Kommentare

Moin zusammen, Angefangen hat die Suche damit, dass der Anmeldedienst immer angehalten wird, bei einem Neustart des DC. nach ...