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:
$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}
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
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