Inhaltsverzeichnis

Allgemeine Beispiele für PowerShell im AD

User, Gruppen und Computer

User auslesen:
alle nicht deaktiverten Domänen-User auslesen und nur den Namen anzeigen:

get-aduser -ldapfilter "(&(&(objectCategory=user)(userAccountControl=512)))" | where-object -property enabled -eq true | fl name

userAccountControl=512 heißt „NORMAL_ACCOUNT“, siehe:https://support.microsoft.com/en-us/help/305144/how-to-use-useraccountcontrol-to-manipulate-user-account-properties

Gruppen auslesen:

Get-ADGroup -Filter "GroupScope -eq 'Global' -and GroupCategory -eq 'Security'"

verschachtelte AD-Gruppen-Mitgliedschaften (nested):
sh. https://gallery.technet.microsoft.com/scriptcenter/Get-nested-group-15f725f2

Get-ADNestedGroupMembers "GroupName"

Computer auslesen:

Get-ADComputer -filter 'name -like "*"' -Properties * | select name,OperatingSystem,IPv4Address''

Username zu SID:

(New-Object System.Security.Principal.NTAccount($(read-host -prompt "Username"))).Translate([System.Security.Principal.SecurityIdentifier]).value

Benutzer remote von Arbeitsplatz abmelden:
Step 1: Wer ist an dem System angemeldet?

Invoke-Command -ComputerName REMOTECOMPUTER-X -ScriptBlock {quser}

Die Ausgabe dazu sieht wie folgt aus:

 BENUTZERNAME          SITZUNGSNAME       ID  STATUS  LEERLAUF   ANMELDEZEIT
 USER_TO_LOG_OFF                           1   Getr.        36   06.07.2022 07:37
 2ND_USER                 rdp-tcp#0        3   Aktiv         .   06.07.2022 13:49

Step 2: Benutzer über Session-ID abmelden:

Invoke-Command -ComputerName vm-133 -ScriptBlock {logoff 1}

Das Ganze halbwegs automatisiert als Skript:

RemoteLogOff-User.ps1
$User=Read-Host "SamAccountName eingeben"
 
 
# Anmeldelogs nach dem System des Benutzers durchsuchen
$Directory="\\vbw-bochum.local\dfs\Logondaten\benutzer"
$Files=Get-ChildItem $Directory -File
 
$UserSystems=@()
foreach ($File in $Files)
    {
    foreach($line in Get-Content ($File.FullName))
        {
        if($line -like "Rechner*")
            {
            $item=New-Object -type psobject | Add-Member -MemberType NoteProperty -Name "SamAccountName" -Value $File.name.TrimEnd(".txt") -PassThru | add-member -MemberType NoteProperty -Name "System" -Value $line.TrimStart("Rechner: ") -PassThru | Add-Member -MemberType NoteProperty -Name "Erfassungsdatum" -Value $File.lastwritetime -PassThru 
            }
        }
 
    $UserSystems += $item
    }
 
$system=(($UserSystems | Where-Object samaccountname -like $User).system).trimend(" ")
 
# Auf dem gefundenen System nach Sessions mit dem Anmeldenamen suchen
Invoke-Command -ComputerName $system -ScriptBlock `
    {
    $sessions=quser | Where-Object {$_ -match "$($user:using)"}
    $sessions
    $SessionIDs=@()
    foreach ($line in $sessions)
        {
        if ($line -notlike "*Benutzername*" -and $line -notlike "*Aktiv*")
            {
            #replace "\s{2,}",";" => Ersetze alle mehr als 2x aufeinanderfolgenden Leerzeichen durch ein ;
            $SessionIDs+=($line -replace "\s{2,}",";").split(";")[2]
            }
        }
 
    foreach ($SessionID in $SessionIDs)
        {
        logoff $SessionID
        }
    }

Horizon-Anmeldedienst starten:

Invoke-Command -ComputerName REMOTECOMPUTER-X -ScriptBlock {Get-Service vmlm | start-service}

Arbeiten am AD

Anbinden einer Domäne als PSDrive

New-PSDrive -Name AD2 -PSProvider ActiveDirectory -Server $FQDN_DC_ServerName -root "//RootDSE/"

DNS abfragen:

Get-DnsServerZone -ComputerName DNSSERVERNAME

Alle DomainController abfragen

(Get-ADForest).Domains | %{ Get-ADDomainController -Filter * -Server $_ }

Subnets in Sites and Services

Get-ADReplicationSubnet -filter * -Properties * | Select Name, Site, Location, Description

Exchange-Version

Get-ADObject "CN=ms-Exch-Schema-Version-Pt,$((Get-ADRootDSE).schemaNamingContext)" -Property Rangeupper

Bilder konvertieren

Eigentlich ist das kein Powershell-Problem. Bilder können über eine beliebige Shell sehr gut mit Hilfe von ImageMagick konvertiert werden.

Alle *.HEIC Dateien im aktuellen Verzeichnis nach .PNG konvertieren:

magick mogrify -monitor -format PNG *.heic

Wahlweise nach .JPG:

magick mogrify -monitor -format JPG *.heic

Eine einzelne Datei konvertieren:

magick convert IMG_1874.HEIC IMG_1874.jpg