Betriebssysteme mit und ohne PowerShell
Ohne PowerShell (kann nach installiert werden)
- Windows XP
- Windows Server 2003 & R2
- Windows Server 2008
- Windows Vista
Mit PowerShell
- Windows Vista SP1 – PowerShell 1
- Windows 7 – PowerShell 2
- Windows Server 2008 R2 – PowerShell 2
PowerShell Umgebung vorbereiten
Ausführung von lokalen Scripts zulassen
Set-ExecutionPolicy remotesigned
PowerShell durch Community Extensions erweitern
Man kann die PowerShell durch Extensions erweitern und hat damit mehr Commandlests, Funktionen und Aliase zur Verfügung. Ein Erweiterung mit den unter anderem hier beschrieben Commandlets, nennt sich PSCX. Die Installation von Extensions anhand des Beispiels PSCX:
Den Ordner an folgende Stelle Kopieren: %USERPROFILE%\Documents\WindowsPowerShell\Modules\ und dann folgendes cmdlet ausführen:
Import-Modules PSCX
Power Shell ISE
Die Integrated Scripting Enviroment (ISE) ist ein einfacher Scripteditor, der mit PowerShell 2.0 mitgeliefert wird. Diese kann man aus dem Startmenu oder mit dem Befehl „ise“ starten.
Vergleichsoperatoren
Vergleich |
Vergleich o. Groß/Kleinschreibung |
Beschreibung |
-lt |
-ilt |
Kleiner |
-le |
-ile |
Kleiner oder gleich |
-gt |
-igt |
Größer |
-ge |
-ige |
Größer oder gleich |
-eq |
-ieq |
Gleich |
-ne |
-ine |
Ungleich |
-like |
-ilike |
Ähnlichkeit zwischen Zeichenketten |
-notlike |
-inotlike |
Keine Ähnlichkeit zwischen Zeichenketten |
-match |
– |
Vergleich mit regulärem Ausdruck |
-nomatch |
– |
Stimmt nicht mit regulärem Ausdruck überein |
-is |
– |
Typvergleich |
Logische Operatoren
Logischer Operator |
Beschreibung |
-not oder ! |
Nicht |
-and |
Und |
-or |
Oder |
Power Shell verwenden
Mögliche Befehle und Hilfe
Alle installierten Commandlets ausgeben lassen:
Get-Command
Hilfe zu einem Commandlet anzeigen lassen, in diesem Fall Get-Process:
Get-Help Get-Process
Hilfe zu Parametern eines Commandlets anzeigen lassen:
Get-Help Get-Process -parameter ""
Objektorientiertes Piplining
Wie auch in der Unix-Shell oder der Windows-Console, wird für die Pipeline | verwendet.
Alle Datensätze deren id kleiner als 5 ist:
| Where-Object { $_.id -lt 5 }
Von allen Datensätzen nur die Felder Name und id ausgeben:
| Select-Object Name, id
Alle Datensätze nach dem Feld Name sortieren:
| Sort-Object Name
Alle Datensätze nach dem Feld Name gruppieren:
| Group-Object Name
Alle Datensätze in einer Tabelle formatueren:
| Format-Table
Alle Datensätze in die Datei export.txt exportieren:
| Out-File export.txt
Alle Datensätze in eine dynamische Tabelle exportieren:
| Out-GridView
Für jedes Objekt:
| Foreach-Object
Alternativ zum einfache weiterleiten innerhalb der Pipe, kann man das Ergebnis auch zwischenspeichern.
Praktische Beispiele der Anwendung
Alle Objekte der Klasse Benutzer werden in die Datei C:\user.txt geschrieben:
Get-ADObject -dis "LDAP://server/dc=domain, dc=local" -class user | out-file c:\user.txt
Alle User werden anhand ihres SAMAccountName ausgegeben und nach diesem Sortiert:
Get-ADObject -dis "LDAP://server/dc=domain, dc=local" -class user | Select-Object SAMAccountName | sort SAMAccountName
Alle Opjekte der Klasse Grupe aus dem AD auslesen, deren „Name“ mit „SG – “ anfangen und nach Name sortieren und nur Name anzeigen.
Get-ADObject -dis "LDAP://server/dc=domain, dc=local" -class group | Select-Object Name | where { $_.Name -ilike "SG - " } | sort Name
Alle User anzeigen, die ihr Home Directory auf dem fileserver1 haben:
Get-ADObject -dis "LDAP://server/dc=domain, dc=local" -class user | Select-Object Name, homeDirectory | where { $_.homeDirectory -ilike "\\fileserver1\" }
Alle Prozesse des InterneExplorers beenden:
Get-Process iexplore | Stop-Process
Datum auslesen, formatieren und in $date speichern:
$date = (Get-Date).ToShortDateString()
Objekte der Klasse Dienste, mit dem Status „running“ aulesen, nur den DisplayName anzeigen und zählen:
$services = "Services: " + (Get-Service | where { $_.Status -ieq "running" } | Select-Object DisplayName).Count
Objekte der Klasse Prozesse auslesen, deren handles > 0 ist und nur den Namen anzeigen und zählen:
$processes = "Prozesse: " + (Get-Process | where { $_.Handles -igt 0 } | Select-Object Name).Count
Dienste mit dem Status „running“ anzeigen und nur den DisplayName ausgeben:
Get-Service | where { $_.Status -ieq "running" } | Select-Object DisplayName
Prozesse mit dem ProcessName „winlogon“ auslesen und den ProcessName im GridView ausgeben:
Get-Process | where { $_.ProcessName -ieq "winlogon" } | Select-Object ProcessName | Out-GridView
Für jedes Objekt der Klasse Prozesse nach Format-List konvertieren:
Get-Process | ForEach-Object { $_.ProcessName } | Format-List
Prozesse auslesen und nach namen selektieren und gruppieren:
Get-Process | Select-Object name | group name
Alle Unterobjekte von C:\Windows die mit „s“ anfangen und nur die ersten 5 davon ausgeben:
Get-ChildItem C:\Windows\ | Where-Object { $_.Name -ilike "s" } | Select-Object -first 5