Dieser Artikel ist nur ein kleiner Überblick der mächtigen PowerShell. Die PowerShell wurde von Microsoft entwickelt um administrative Aufgaben effizienter erledigen zu können und um eine zentrale, einheitliche Schnittstelle zu bieten. Für viele neue Microsoft Produkte ist die PowerShell unabdingbar (z.B. Microsoft Exchange 2010).

Allgemeines

Die PowerShell besteht aus kleinen Einheiten die sich Cmdlets nennen. Die Kommandos sind alle nach dem Schema Verb-Substantiv aufgebaut, z.B. get-help. Groß-/Kleinschreibung spielt keine Rolle. Für bestimmte Kommandos und Cmdlets gibt es Aliase.

 

Wichtige Kommandos

 

Kommando/Cmdlet Beschreibung
get-help Zeigt die Hilfe an
get-help <Kommando/Cmdlet> Zeigt die Hilfe zu einem Kommando/Cmdlet an
get-variable Zeigt alle gesetzten Variablen an
get-alias Zeit alle gesetzten Aliase an
get-module -ListAvailable Zeigt vorhandene Module an
import-module <modulname> Importiert das Modul in die aktuelle Sitzung (z.B. import-module activedirectory)
get-command Zeigt die verfügbaren Kommandos / Cmdlets an
sort-object Sortieren einer Datenmenge
select-object Einen bestimmten Bereich selektieren (z.B. select-object -First 3)
export-csv Datenmenge in CSV exportieren
get-psdrive Zeigt PowerShell Laufwerke an
invoke-command Kommandos Remote auf anderen Server ausführen
enable-psremoting Aktiviert Remote Power Shell
new-pssession Baut eine Verbindung zu einem Remote Power Shell Server auf
enter-pssession Geht in die Remote Verbindung rein
exit-pssession Verlässt die Remote Session
get-credential Frägt über einen Popup Anmeldeinformationen ab wenn man nicht die Sitzungsanmeldeinformationen verwenden will
get-aduser <username> Frägt aus dem AD Informationen über einen User ab (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)
get-adobject <filter> Frägt ein Objekt aus dem AD ab (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)
get-adcomputer <computer> Frägt aus dem AD Computerinformationen ab (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)
set-adaccountpassword Setzt Passwort für einen User (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)

Vergleichs- und Verknüpfungsoperatoren

 

Operator Beschreibung
-eq (equal) gleich
-ne (not equal) nicht gleich
-gt (greater than) größer als
-lt (less than) kleiner als
-ge (greater equal) größer gleich
-le (less equal) kleiner gleich
-like wie .z.B. „a*“
-notlike nicht wie z.B. „a*“
-match „^ABC“ (Regex)
-AND und
-OR oder
-NOT nicht

Beispiel: get-service

get-service gibt den Status der Prozesse zurück.

Will man jetzt z.B. nur Dienste sehen die sich im Status „Running“ befinden so kann man das Ergebnis an ein anderes Kommando pipen.

get-service | where-object {$_.status -eq "running"}

Das Resultat:

Alternativ für where-object gibt es einen Alias der „?“ heißt. Also wäre auch folgender Befehl möglich:

get-service | ? {$_.status -eq "running"}

Das ganze lässt sich mit einem Verbindungsoperator noch erweitern:

get-service | ? {($_.name -like "A*") -AND ($_.status -like "run*")}

Als Resultat bekommen wir alle Prozesse die mit A…. beginnen und laufen.

Jetzt können wir uns noch alle Prozesse mit A ausgeben lassen und diese absteigend sortieren.

get-service | ? {$_.name -like "a*"} | sort-object displayname -Descending

Die Ausgabe können wir jetzt noch auf 3 Resultate beschränken:

get-service | ? {$_.name -like "a*"} | sort-object displayname -Descending | select-object -First 3

Das können wir jetzt noch in eine CSV Datei exportieren:

get-service | ? {$_.name -like "a*"} | sort-object displayname -Descending | select-object -First 3 | export-csv -path export.csv

Inhalt export.csv:

#TYPE System.ServiceProcess.ServiceController
"Name","RequiredServices","CanPauseAndContinue","CanShutdown","CanStop","DisplayName","DependentServices","MachineName","ServiceName","ServicesDependedOn","ServiceHandle","Status","ServiceType","Site","Container"
"AudioEndpointBuilder","System.ServiceProcess.ServiceController[]","False","False","True","Windows Audio Endpoint Builder","System.ServiceProcess.ServiceController[]",".","AudioEndpointBuilder","System.ServiceProcess.ServiceController[]","SafeServiceHandle","Running","Win32ShareProcess",,
"AudioSrv","System.ServiceProcess.ServiceController[]","False","False","True","Windows Audio","System.ServiceProcess.ServiceController[]",".","AudioSrv","System.ServiceProcess.ServiceController[]","SafeServiceHandle","Running","Win32ShareProcess",,
"AppMgmt","System.ServiceProcess.ServiceController[]","False","False","False","Application Management","System.ServiceProcess.ServiceController[]",".","AppMgmt","System.ServiceProcess.ServiceController[]","SafeServiceHandle","Stopped","Win32ShareProcess",,

PowerShell Drives

In der PowerShell kann man auf verschiedene Daten über das Filesystem zugreifen. Darunter sind unter anderem der Certificate Store und die Registry.

 

get-psdrive
cd HKLM:
cd .\SOFTWARE
dir

Remote PowerShell

In der PowerShell ist es möglich einen RemoteAccess zu aktivieren. Einmal aktiviert bleibt er auch aktiviert, er lässt sich aber wieder abschalten. Der PowerShell Remote Service läuft auf 2 TCP Ports. TCP/5985 ohne SSL und TCP/5986 mit SSL.

Aktivieren der Remote Shell:

enable-psremoting

Die beide Abfragen mit „Y“ bestätigen, eine automatische Firewallregel wird installiert.

Es gibt 2 Möglichkeiten mit der Remote PowerShell zu arbeiten.

1. Wir können ein Kommandosatz übermitteln und das Ergebnis verarbeiten

invoke-command -computername romulus.thoma.local -scriptblock {get-service}

2. Wir können uns eine vollständige Remote Shell öffnen

new-pssession -computername romulus

Nach dem Verbindungsaufbau muss man in die Session einsteigen

enter-pssession 1

Am Beginn der Zeile steht jetzt der Hostname der Remotemaschine. Um die Remotemaschine zu verlassen benötigt man folgendes Kommando:

exit-pssession

Die Sessions verschwinden nach 15 Minuten von alleine, wer nicht warten will kann mit

remove-pssession 1

die Session löschen.

Mit anderen Credentials Remote anmelden

Es gibt 2 verschiedene Möglichkeiten Credentials mitzugeben.

1. Im Script

Windows benötigt gehashte Passwörter für die Anmeldung.

$secpasswd = Convert-To-SecureString "1q2w3e4r%T" -AsPlainText -Force
$username="max"
$mycreds = new-object system.management.automation.pscredential ($username, $secpasswd)
invoke-command -credential $mycreds -computername romulus.thoma.local -scriptblock {get-service}

2. Per Popup

$mycreds = get-credential
invoke-command -credential $mycreds -computername romulus.thoma.local -scriptblock {get-service}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*