Die PowerShell

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/CmdletBeschreibung
get-helpZeigt die Hilfe an
get-help <Kommando/Cmdlet>Zeigt die Hilfe zu einem Kommando/Cmdlet an
get-variableZeigt alle gesetzten Variablen an
get-aliasZeit alle gesetzten Aliase an
get-module -ListAvailableZeigt vorhandene Module an
import-module <modulname>Importiert das Modul in die aktuelle Sitzung (z.B. import-module activedirectory)
get-commandZeigt die verfügbaren Kommandos / Cmdlets an
sort-objectSortieren einer Datenmenge
select-objectEinen bestimmten Bereich selektieren (z.B. select-object -First 3)
export-csvDatenmenge in CSV exportieren
get-psdriveZeigt PowerShell Laufwerke an
invoke-commandKommandos Remote auf anderen Server ausführen
enable-psremotingAktiviert Remote Power Shell
new-pssessionBaut eine Verbindung zu einem Remote Power Shell Server auf
enter-pssessionGeht in die Remote Verbindung rein
exit-pssessionVerlässt die Remote Session
get-credentialFrä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-adaccountpasswordSetzt Passwort für einen User (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)

Vergleichs- und Verknüpfungsoperatoren

 

OperatorBeschreibung
-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
-likewie .z.B. „a*“
-notlikenicht wie z.B. „a*“
-match„^ABC“ (Regex)
-ANDund
-ORoder
-NOTnicht

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.