Online-Support, IT-Services für Unternehmen ab 299 EUR/Monat

Rufen Sie uns an : +48 22 335 28 00 | Email: oferty@support-online.pl

Dieser Artikel behandelt grundlegende Probleme bei der Verwendung der PowerShell-Skriptsprache. Die unten dargestellten Beispiele sollen unerfahrenen Windows Server-Administratoren zeigen, dass „der Teufel nicht so gruselig ist“, und sie dazu ermutigen, die Konsole täglich zu nutzen. Die mehrfache Wiederholung monotoner Arbeiten erfordert eine Automatisierung. Es ist jedoch nicht immer klar, wo man anfangen soll.

Was ist Windows PowerShell ? 

Power Shell

PowerShell ist nicht nur ein Befehlsinterpreter, sondern ein Nachfolger von cmd.exe . Es handelt sich um eine Skriptsprache, die es Ihnen ermöglicht, ganze Befehlssequenzen ähnlich wie bei herkömmlichen Programmen zu erstellen.

Starten der Umgebung

PowerShell ist in den meisten modernen Windows-Distributionen ab der Professional- Lizenzversion standardmäßig enthalten . Wenn PowerShell in einer bestimmten Systemversion nicht verfügbar ist, können Sie es einfach installieren. Einzelheiten finden Sie auf der Website von Microsoft ( https://technet.microsoft.com/pl-pl/library/hh847837.aspx ).

PS (PowerShell) befindet sich standardmäßig unter dem Pfad C:\Windows\System32\WindowsPowerShell\ und erstellt bei der Installation Verknüpfungen im Startmenü. Sie können es auch ausführen, indem Sie „powershell“ in das Ausführungsfenster eingeben (Win+R).

Beim Erstellen Ihrer ersten Skripte empfiehlt es sich, die mitgelieferte Umgebung zu verwenden: Windows PowerShell ISE . Es schlägt die Namen und Syntax sowohl der Befehle als auch der installierten Module vor – bereit zum Import.

Power Shell

Das Fenster „Windows PowerShell ISE“ ist in zwei Teile unterteilt: zum Bearbeiten des Skriptinhalts und ein Konsolenfenster zum Testen.

Erste Schritte

Für den Administrator sind die Active Directory- und Exchange-Server-Unterstützung die wichtigsten Module.

Das Startmenü auf Domänencontrollern enthält in der Regel separate Verknüpfungen zum Starten vorgefertigter Snap-Ins, z. B. aus Active Directory (AD). Sie können ein solches vorgefertigtes Modul auch einfach in die Konsole importieren, indem Sie den Befehl eingeben:

Import-Modul ActiveDirectory

Um die für den Betrieb des Exchange-Servers notwendigen Befehle zu importieren, müssen Sie eine Verbindung herstellen und eine Sitzung mit dem Server starten:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:// SERVERNAME_EXCHANGE /powershell
Import-PSSession $session

Die erste Zeile im obigen Beispiel definiert die Sitzungsreferenz auf die Variable $session. Hier müssen Sie die Adresse des Servers, zu dem Sie eine Verbindung herstellen möchten, korrekt angeben. Die zweite Zeile richtet diese Sitzung ein.
Es ist wichtig, dass der Benutzer, der diese Befehle im Konsolenfenster eingibt, über die entsprechenden Berechtigungen zur Ausführung verfügt.

Powershell-Befehle

Die Liste der wichtigsten Befehle, die bei der Arbeit des Administrators verwendet werden, ist eine individuelle Angelegenheit. Die unten aufgeführten Befehle sind nur ausgewählte Beispiele von Befehlen, die sich als nützlich erweisen können. Sie sollen Sie lediglich dazu anregen, nach den für Ihre eigene Arbeit benötigten Informationen zu suchen.
Für jeden Befehl gibt es eine eigene Seite mit einer detaillierten Beschreibung auf der Website von Microsoft. Beispiele für ihre Anwendungen werden im Folgenden vorgestellt.

Erstellen eines neuen Domänenbenutzers

New-ADUser -SamAccountName Login –Name „ Vorname“ –Nachname „ Nachname“ –EmailAddress „ Adresse@Mail“ –AccountPassword „ Passwort“ –Patch „ PathOU“ –Aktiviert

Der obige Befehl erfordert Folgendes: Benutzeranmeldung, Vor- und Nachname, E-Mail-Adresse, zu vergebendes Passwort und den Pfad, der angibt, wo das Konto erstellt werden soll. Darüber hinaus wird das Konto sofort und auf unbestimmte Zeit freigeschaltet.
Der Pfad sollte in einem Standardformat geschrieben werden, z. B. „OU=New,OU=Employees,DC=Contonso,dc=com“.

  • Verschieben eines AD-Objekts in eine andere Organisationseinheit (OU)

Move-ADObject -Anmeldung -TargetPath „ OUPath “

Dieser Befehl ist nützlich, wenn sich beispielsweise der erstellte Benutzer nicht in dem Container befindet, in dem er sein sollte, sowie beim Bereinigen des AD-Baums.

  • Erfassung von Benutzerkontodaten

Get-ADUser- Anmeldung | SelectObjectGUID | ft

Dieser Befehl zeigt Benutzerinformationen an. Es wird nur nach seiner GUID gesucht und das Ergebnis in Form einer Tabelle dargestellt, was für die übersichtliche Auflistung größerer Datenmengen hilfreich ist.

  • Entfernen Sie einen Benutzer aus allen Domänengruppen

Get-ADPrincipalGroupMembership -GUID | % {Remove-ADPrincipalGroupMembership GUID -MemberOf$_ -Confirm:$false -ErrorAction SilentlyContinue}

Dieser etwas komplexere Befehl versucht, den Benutzer aus allen Gruppen (sowohl Verteilung als auch Sicherheit) zu entfernen, denen er angehört. Natürlich kann es nicht aus der PrincipalGroup entfernt werden, daher wurde ein entsprechendes Argument hinzugefügt, um zu verhindern, dass der Fehler auf dem Bildschirm angezeigt wird. Darüber hinaus wird der Benutzer nicht aufgefordert, das Löschen jeder Gruppe zu bestätigen, sondern dies geschieht selbst.

  • Löschen von Postfächern vom Exchange-Server zusammen mit AD-Konten

Remove-Mailbox -Alias ​​-Confirm:$false

Der obige Befehl sollte nur verwendet werden, wenn Sie absolut sicher sind, welche Aktionen Sie ausführen, da Sie nicht um eine Bestätigung gebeten werden.

  • Richten Sie automatische Antworten in Ihrem Posteingang ein

$msg = „Mail-Vers-Inhalt“
Set-MailboxAutoReplyConfiguration -Alias ​​-AutoReplyState Enabled -InternalMessage $msg -ExternalMessage $msg

Die obigen Zeilen können einzeln eingegeben werden. PowerShell merkt sich die definierte Variable. Sie können Inhalte auch direkt in Anführungszeichen eingeben, ohne eine Variable zu verwenden.
Der Befehl ermöglicht automatische Antworten und legt dafür definierte Inhalte fest. Sie können separate Inhalte für Nachrichten innerhalb und außerhalb Ihrer Organisation festlegen.

  • Verfolgen von Nachrichten aus Serverprotokollen

Get-TransportServer |Get-MessageTrackinglog -ResultSize Unlimited -Start „ data “ | wobei {[string]$recipients -like “ Phrase „} | Wählen Sie Zeitstempel, Absender, {$_Recipients}, MessageSubject, EventID, SourceContext | aus Buchstabenformat

Der Datensatz selbst findet und durchsucht alle Mail-Relays. Listet alle Nachrichten auf, die an Postfächer gesendet wurden, die die Phrase in ihrem Namen enthalten und ab dem angegebenen Datum gesendet wurden (das im Format JJJJ-MM-TT HH:MM:SS geschrieben werden sollte, z. B. „2012-07-13 12:00:01“) ).
Es werden nur einige E-Mail-Eigenschaften angezeigt: Aktionszeit der Nachricht, Absender, Empfänger, Betreff der Nachricht, Ereignis-ID, Ereignisdetails. Sie werden in Form einer Liste dargestellt.

Dieser Befehl ist besonders nützlich, wenn Sie Informationen zu einer fehlenden Nachricht benötigen. Damit können Sie überprüfen, ob die Nachricht vom Benutzer gesendet (oder empfangen) wurde, und den Grund für das Fehlen verstehen.

Dienstleistungen der Zertifizierungsstelle

Wenn eine Organisation eine Zertifizierungsstelle verwendet, um Websites zu signieren oder sogar Benutzer zu authentifizieren, können Sie die mit ihrem Betrieb verbundene Arbeit mithilfe von PowerShell automatisieren.

PowerShell selbst ermöglicht kein komfortables Arbeiten mit der Zertifizierungsstelle (CA), insbesondere wenn es auf älteren Versionen von Windows Server basiert.
Abhilfe schafft jedoch ein externes Modul von CodePLEX. Sie können es von http://pspki.codeplex.com/ herunterladen. Dieses Modul ist einfach zu installieren und wird unter der Microsoft Public License (Ms-PL) veröffentlicht. Darüber hinaus verfügt es über einen offenen Quellcode und der Hersteller stellt eine detaillierte Dokumentation zu seiner Verwendung bereit. Nachfolgend finden Sie einige Beispiele.

Nach der Installation dieses Moduls werden keine Verknüpfungen erstellt. Das Modul kann wie jedes andere importiert werden, nicht sitzungsbasiert (im Gegensatz zu Exchange-Servermodulen):

Import-Modul PSPKI

Es ist erwähnenswert, dass es diese Befehlsbibliothek gibt, auch wenn die CA-Unterstützung auf den Widerruf von Zertifikaten beschränkt ist.
$filter = ‚Request.RequesterName -eq Domain\Login ‚
Get-CertificationAuthority | Get-Issuedrequest -Filter $filter | Widerrufszertifikat – Grund „Halten“

Der obige Befehl macht alle im Namen des Benutzers ausgestellten Zertifikate ungültig. Aus Sicherheitsgründen ist das Zertifikat mit der Option zur Wiederherstellung deaktiviert – nur die Angabe des Parameters „-Reason“ als „Hold“ ermöglicht eine spätere Aktivierung des Zertifikats.
Darüber hinaus erfordert der Befehl keine Angabe eines bestimmten CA-Servers. Get-CertificationAuthority durchsucht Informationen auf jedem in Ihrer Organisation registrierten Server.

Powershell-Skripte – Einführung in das Schreiben Ihrer ersten Skripte

PowerShell bietet enorme Möglichkeiten, dennoch muss man es nur als Skriptsprache betrachten. Obwohl es objektorientiertes Schreiben mit Methoden und Klassen schon seit einiger Zeit gibt, gilt es immer noch als experimenteller Ansatz

  • Speichern und Ausführen des Skripts

Skripte können sowohl in Ihrem bevorzugten Texteditor als auch in der bereits erwähnten Windows PowerShell ISE geschrieben werden. Es ist wichtig, ihm die entsprechende Erweiterung zu geben, die für PowerShell standardmäßig *.ps1 ist.

Um das Skript auszuführen, geben Sie einfach seinen Pfad (falls es sich in einem anderen befindet) oder seinen Namen mit vorangestelltem Punkt und einem Backslash (falls sich die Datei im Pfad selbst befindet) in die PS-Konsole ein oder drücken Sie in diesem Fall die Taste F5 von ISE, z.B.

Power Shell
  • Variablen

PowerShell ist eine Hochsprache. Variablen können definiert werden. Dies ist jedoch für ihren Betrieb nicht notwendig.

$variable1 = ‚text‘
$variable2 = 44
$variable3 = [int] 7

Alle oben genannten Variablen funktionieren ordnungsgemäß, auch wenn nur $variable3 einen deklarierten Werttyp hat. Der erste ist vom Typ String, während die anderen beiden numerisch sind. Im Fall von $variable2 können Sie den Typ später ändern, indem Sie Textdaten hineinschreiben, und Sie können dann auf die gleiche Weise numerische Daten in $variable1 schreiben.

  • Variable Arrays

Das Speichern mehrerer Werte einer Datenmenge in einer Variablen kann sehr nützlich sein. Zu diesem Zweck können Sie Arrays verwenden, um auf einzelne Elemente des Arrays zu verweisen.
Damit eine Variable jedoch als Array funktioniert, muss sie ordnungsgemäß deklariert und mit dem entsprechenden Typ versehen werden.

$variableArray = New-Object- String [] 100

Im obigen Beispiel wurde ein Array mit einer endlichen Anzahl von Elementen und vom Typ String erstellt.
Um auf einzelne Elemente zu verweisen, muss der Index des Elements (beginnend bei Null) in eckigen Klammern eingegeben werden, z. B. $variableArray[13].

  • Schleifen

Für einige Aktivitäten, insbesondere solche, die auf Automatisierung abzielen, ist der Einsatz von Schleifen erforderlich.
Sie können Standardschleifen in PowerShell verwenden:

Bis… Während…

$a = 1
DO {
$a
$a++
} While ($a -le 5)

Für jede

$trees = @(„Erle“, „Esche“, „Kiefer“, „Eiche“, „Fichte“, „Birke“)
foreach ( $tree in $trees ) {
“ $tree = “ + $tree .length
}

FÜR

for ( $i =0; $i -le 30; $i ++)
{
echo „Counter: “+ $i
}

Schleifen können natürlich verschachtelt werden, aber dazu später mehr.

  • Dateioperationen

Die Funktionalität von Skripten wäre ziemlich schlecht, wenn es nicht möglich wäre, Dateien zu verwenden.
Mit PowerShell können Sie standardmäßig Ergebnisse in Textdateien exportieren:

$var >> C:\ps_logs\variable_content.txt

Sie können sie auch importieren, z. B. in ein Array:

$list = New-Object string[] 100
$list = Get-Content c:\scripts\list_value.txt

  • Funktionen

Um die Klarheit der Skripte und die Arbeitserleichterung zu gewährleisten, lohnt es sich, Funktionen zu erstellen, die bestimmte Rollen erfüllen.
Funktionen können jederzeit im Skript deklariert werden, bevor sie verwendet werden. Aus Gründen der Reinheit des Codes wird jedoch empfohlen, sie vor dem eigentlichen Inhalt zu schreiben.

Die Deklarationsmethode unterscheidet sich nicht von der in vollwertigen Programmiersprachen wie C/C++/C#.

Function NameList {
$name [$w] = (Get-ADUser -Identity $login [$v]).Surname
}

Auch die Berufung ist ähnlich.

Namensliste ( $names , $login )

Am wichtigsten ist, dass Funktionen sowohl innerhalb von Schleifen als auch innerhalb anderer Funktionen verwendet werden können. Dies bedeutet, dass Sie nicht jedes Mal, wenn Sie ihn verwenden oder eine Rekursion verwenden, denselben Code neu schreiben müssen.

Beispielskripte

Am Ende werden mehrere Beispielskripte mit Beschreibungen vorgestellt. Trotz ihrer Einfachheit können sie im Vergleich zur manuellen Verwendung der grafischen Oberfläche viel Zeit sparen.

  • Postfächer mit zugehörigen AD-Konten löschen

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:// SERVERNAME /powershell

Import-PSSession $session
$lusers = New-Object string[] 200
$lusers = (get-mailbox -OrganizationalUnit “ Path_to_blocked “ -filter ([scriptblock]::create(„whenchanged -lt ‚$((get-date). adddays(-90))’“))).alias
$lusers >> C:\ps_logs\usuwane.txt
$count = ( $lusers ).count
$count = $count -1
for ( $w =0; $w -le $count ; $w ++)
{ Remove-Mailbox $lusers [ $w ] -Confirm:$false }

Zielsetzung:

Löschen aller Konten einer bestimmten Organisationseinheit, deren Änderungsdatum älter als 90 Tage ist. Gelöschte Konten in einer Textdatei protokollieren.

Schritt für Schritt:

Herstellen einer Verbindung zum Exchange-Server;

Laden des Befehlsmoduls;

Deklaration des Arrays $lusers ;

Speichern der Tabelle mit Aliasnamen von Postfächern, deren Konten sich in der definierten Organisationseinheit befinden und seit über 90 Tagen nicht geändert wurden;

Speichern von Postfach-Aliasnamen in einer Textdatei;

Zählen aller Aliase im $lusers -Array ;

Rechenoperationen;

Schleifenstart;

Löschen von Postfächern mit angehängten AD-Konten ohne Benutzerbestätigung;

  • Beispielkontovorgänge

$luserN = New-Object string[] 100
$luser = New-Object string[] 100

$masterList = Get-Content Accounts.txt
$count = (Get-Content Accounts.txt | Measure-Object).Count
$j = 0
for ( $i =0; $i -le $count ; $i ++)
{
foreach ( $data in $masterList [ $i ])
{
$luserN [ $j ] = $data -split ‚,‘ -replace ‚^\s |\s $‘
$luser[$j ] = (Get-ADUser – Identität $luserN [ $j ]).ObjectGUID
$j ++
}
}

Import-Module ActiveDirectory
Import-Module PSPKI
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:// SERVERNAME /powershell
Import-PSSession $session

Funktion MailboxRules {
Get-InboxRule -Mailbox $luser [ $w ] | Remove-InboxRule -Confirm:$false
}

Function MoveUser {
Move-ADObject $luser [ $w ] -TargetPath “ ou=blocked_accounts,dc=Contonso,dc=com „
}

Funktion DisableUser {
Disable-ADAccount $luser [ $w ]
}

Function CertRevoke {
$filter = ‚Request.RequesterName -eq contonso \’+ $luserN [ $w ]
Get-CertificationAuthority | Get-Issuedrequest -Filter $filter | Widerrufszertifikat – Grund „Halten“
}

$countC = $count -1
for ( $w =0; $w -le $countC ; $w ++)
{
DisableUser ( $luser )
MoveUser ( $luser )
CertRevoke ( $luserN )
MailboxRules ( $luser )
}

Zielsetzung:

Deaktivieren des Benutzerkontos, Verschieben in den entsprechenden Container, Ungültigmachen der von ihm generierten Zertifikate und Löschen aller Regeln im Postfach.

Schritt für Schritt:

Definieren von Tabellen: eine mit Anmeldungen, die andere mit Objekt-GUIDs;

Laden einer Liste von Logins aus einer Datei (Logins in der Datei nur durch Kommas getrennt);

Berechnen der Anzahl der zu ändernden Konten;

Lademodule für AD, CA und Exchengea;

Definition einer Funktion, die Regeln in einem Postfach löscht;

Definition einer Funktion, die ein Kontoobjekt an eine definierte OU überträgt;

Definition einer Funktion, die ein Benutzerkonto deaktiviert;

Definition der Funktion, die vom Konto ausgestellte Zertifikate widerruft;

Rechenoperationen;

Schleifendefinition für alle Elemente in einer Textdatei;

Aufrufen einer Funktion innerhalb einer Schleife;

Die oben genannten Befehle und Skripte wurden mit Version 5.0 von PowerShell erstellt. Für den ordnungsgemäßen Betrieb ist die Installation von PowerShell Version 3.0 oder höher erforderlich (zur Verwendung des PSPKI-Moduls).

Exchange-Befehle wurden auf der Serverversion Exchange 2010 vorbereitet. Alle Versionen, von Exchange 2007 bis Exchange 2016, unterstützen die genannten Cmdlets und die Skriptschreibstruktur.

Support Online bietet IT-Support und professionelle Unterstützung durch qualifizierte Spezialisten. IT-Outsourcing, Helpdesk , Server-Support und Cloud-Lösungen sind nur einige Elemente unseres Angebots. Wir empfehlen Ihnen, den Leistungskatalog zu lesen, den Sie im Reiter ANGEBOT finden.

Quellen:

  1. Eigene Studie
  2. Microsoft TechNet
  3. CodePLEX (www.codeplex.com)

Kacper Kondraciuk

BLOG

Zobacz inne nasze artykuły

Kostenloses Angebot ✍️