Einblicke in (Security)-Themen ausm tiefen Wald

Kategorie: Powershell

Befehl letzte Änderung des Passworts eines Benutzers im Active Directory

Wann hat ein User das letzte Mal sein Passwort geändert? Wenn ich ein Active Directory einsetze und PowerShell nutzen möchte, so lautet der Befehl dazu wie folgt:

Get-ADUser USER -Properties PwdLastSet | Select-Object Name,UserPrincipalName,@{N="PasswordDate";e={[DateTime]::FromFileTime($_.Pwdlastset)}}

Man muss lediglich das Wort USER durch den Benutzernamen ersetzen.

Einträge in der Windows-Ereignisanzeige per PowerShell abfragen

Wenn man einmal schnell die Fehlermeldungen oder auch nur Warnungen von Windows aus der Ereignisanzeige mittels PowerShell abrufen will, so kann man dies mit folgendem Kommando:

get-winevent -FilterHashtable @{Logname = 'System';Level=2} -MaxEvents 30 | sort-Object ProviderName,TimeCreated

Will man auch noch die Warnungen dazu haben, so muss aus Level=2 einfach Level=3 werden.

Einschränkungen einmalig aufheben pro Session

Oft steht man vor dem Problem, dass aus Sicherheitsgründen die Skripte nicht ausgeführt werden können bzw. dürfen. Spätestens dann fängt man an zu googeln und landet bei execution policies.

Es geht aber auch einfacher. Mit dem folgenden Befehl umgeht man etwaige Sperren recht einfach:

powershell -ep bypass

Sollte der Befehl Probleme bereiten, so gibt es auch noch eine andere Möglichkeit:

Set-ExecutionPolicy Bypass -Scope Process -Force; .\script.ps1

ipconfig Nachbau

Will man die Details über die Netzwerkkonfiguration von Windows erfahren, so nimmt man standardmässig den Befehl

ipconfig/all

unter der CMD Konsole. Unter PowerShell geht das wie folgt genauso gut:

Get-NetIPConfiguration | Select-Object -Property InterfaceAlias, IPv4Address, IPv6Address, DNServer

Remote Rechner mittels PowerShell ansprechen

Der Traum jeden Admins ist es die Remote Verwaltung von Rechnern, ohne diese mittels RDP oder sonstiger RATs ansprechen zu müssen (VNC, etc.).

Hierzu eignen sich besonders die PowerShell-Kommandos. Folgendes Beispiel ermöglicht den Abruf der Uptime von allen Rechnern, die ich zuvor als Array ($computers) definiert habe, wie folgt:

Get-CimInstance Win32_operatingsystem -ComputerName $computers | Select-Object PSComputername,LastBootUpTime, @{Name="Uptime";Expression = {(Get-Date) - $_.LastBootUptime}}

Wichtig ist dabei aber, dass die Rechner die Version 3 von PowerShell installiert haben.

Große (Log-)Dateien unter Windows auslesen

Oft steht man vor dem Problem, dass grosse Logdateien jeden Dateibetrachter wie notepad.exe in die Knie zwingen. Nimmt man eine komfortable Version eines Editors wie Notepad++, so hängt der sich auch mal gerne auf, wenn die Datei größer als 1GB wird. Was macht man nun? Wenn man beispielsweise weiß, dass man nur die letzten 500 Einträge einer zeitlich iterativen Datei sichten will, so kann man das unter Linux bekannte „tail“ nutzen. Das gibt es netterweise auch unter Windows unter Zuhilfe des PowerShell-CMDlets „Get-Content“.

Will man also die letzten 500 Einträge einer Datei sichten, so gibt man folgendes ein:

Get-content -tail 500 gross.log

Will man dieses Ergebnis in einer Datei haben, so nimmt man noch ein Piping dazu, wie folgt:

Get-content -tail 500 gross.log > klein.log

Aktuellen Ordner zippen mit PowerShell in der CMD

Wenn man mal eben einen Ordner auf der Kommandozeile zippen will, ohne auf fremde Tools zurückgreifen zu wollen, so geht dies recht einfach in der Windows-Konsole (CMD) und dem PowerShell-Befehl Compress-Archive, wie folgt:

powershell Compress-Archive . Datei.zip

Hier ist zu beachten, dass die Angabe des Punktes („.“) das aktuelle Verzeichnis darstellt.

Regeln von Mailboxen in Exchange Online

Wer sich schon einmal gewundert hat, dass es in der Verwaltung von Exchange Online Mailboxen trotz fehlender Dauerweiterleitungen dennoch Anomalien gibt, dem sei geholfen, einmal in die Regeln einer User-Mailbox selbst hineinzuschauen.

Das geht mittels Delegation natürlich problemlos, hat aber den Nachteil, dass man mitunter warten muss, bis Exchange Online das verdaut hat.

Schneller geht es, wenn man direkt mittels PowerShell in die Mailbox-Regeln des jeweiligen Users reinschaut. Das geht schnell und komfortabel wie folgt:

Zuerst listet man sich alle Regeln auf:

Get-InboxRule -Mailbox e.xample@domain.com

Dann nimmt man sich die ID der jeweiligen Regel und schaut in die Details:

Get-InboxRule –Mailbox e.xample@domain.com -Identity "464563436546544" | FL

Freien Speicherplatz sicher löschen (ohne Extra-Tools) unter Microsoft Windows

Es gibt zahlreiche Tools (neben kostenlosen auch kostenpflichtige), die freie Speicherbereiche auf der Festplatte sicher löschen (also mit Nullen vollschreiben). Dazu gibt es jedoch auch Bordmittel von Microsoft Windows, die man komfortabel auf der CMD-Konsole nutzen kann.

Der Befehl

cipher /W:C:\

löscht den freien Speicherplatz auf Laufwerk C:\.

Exchange Online – Quarantäne Mails löschen

Arbeitet man innerhalb von Microsofts Exchange Online mit der Quarantäne, so wird man recht schnell feststellen, wie mühselig die GUI reagiert, immer wieder Reloads durchführt und einem das Leben zur „Hölle“ machen kann. Zudem stellt man fest, dass bei dem „Freilassen“ von Mails („release“), diese weiterhin dort angezeigt werden und somit ein Ansichtsfilter von Nöten ist, den man jedes Mal wieder aufs Neue einstellen muss.

Abhilfe schafft hier die Nutzung einiger PowerShell-Scripte, die man nach Belieben für seine Zwecke anpassen kann. Denk dran, die #-Zeilen sind nur Kommentare 😉

#Zunächst verbindet man sich mit Exchange Online

Connect-ExchangeOnline

#Nun holt man sich die freigelassenen Mails

Get-QuarantineMessage -ReleaseStatus Released

Nun muss man sich alle diese Mails, die als lange Liste in der Ausgabe erscheinen, in eine Variable packen und mittels Piping nur die IDs selektieren, wie folgt:

$ids = Get-QuarantineMessage -ReleaseStatus Released | select -ExpandProperty Identity

Das ist der Grundbefehl. An dieser Stelle kann man auch weitere Filter setzen, so dass man die Art der Mails weiter eingrenzt. Dies geschieht mit der Option:

-QuarantineTypes

Das sieht dann wie folgt aus:

$ids = Get-QuarantineMessage -QuarantineTypes Phish -ReleaseStatus Released | select -ExpandProperty Identity

Hier gibt es dann folgende Optionen:

Malware

Phish

Spam

HighConfPhish

Bulk

Seite 3 von 3

Präsentiert von WordPress & Theme erstellt von Anders Norén