Einleitung
Inspiriert durch eines meiner Projekte, in dem ein ähnliches Skript zum Einsatz gekommen ist, habe ich ebenfalls ein PowerShell Skript entwickelt, dass quasi dieselben Ergebnisse liefert: „Finden, Auflisten und selektiv Auswählbar!“ – Zur weiteren Verarbeitung!
Beschreibung
Das hier entwickelte Skript ist in der Lage, mit Teilen eines Namens oder des SamAccountNames eine Liste von möglichen Übereinstimmungen im Active Directory zu finden und nummeriert in einer Auswahlliste aufzubereiten / darzustellen. Schlussendlich ist es möglich, den betreffenden Eintrag zur weiteren Verarbeitung einzeln auszuwählen oder alternativ, wird bei einem einzigen Suchergebnis die Auswahlliste übersprungen!
Die hier in Kurzfassung beschriebenen Prozessschritte sind in einer einzigen Funktion verpackt und die Funktion kann nun in diversen PowerShell Skripten weiterverwendet werden… überzeugt Euch selbst!
Skriptausgaben
In den folgenden Bildern ist Beispielhaft dargestellt, wie das Skript grundsätzlich funktioniert!
Eingabeprüfung
Ausgabe
Skriptbeispiel
<# .SYNOPSIS Find, List and Select ADUser. .DESCRIPTION The script offers the possibility to find ADUser accounts based on incomplete or similar spellings. The result is a list of possible ADUser accounts and from the list it is possible to select the specific user account you are looking for, for further script processing. .COMPONENT Requires Module ActiveDirectory .OUTPUTS 1. SamAccountName of selected ADUser .NOTES Version: 1.0 Author: André Stuhr Creation Date: 08/30/2022 Purpose/Change: First initial script development #> param ( [string]$User ) # PowerShell Window Colors $Host.UI.RawUI.ForegroundColor = ‘White’ $Host.UI.RawUI.BackgroundColor = ‘Black’ # PowerShell Window Title $Host.UI.RawUI.WindowTitle = "Find, List and Select ADUser” # Import Active Directory Modules Import-Module ActiveDirectory function Find-ADUser ($User) { # User input prompt if ($User -eq "") { $User = Read-Host "Complete Name or part of Name" } # Find input characters if ($User -gt "") { # Set search variables $UserWildCard = "*" + $User + "*" $x = 0 $Account = Get-ADUser -Filter * | Where-Object {` $_.Name -like "$UserWildCard" -or ` $_.SamAccountName -like "$UserWildCard" -and ` $_.Enabled -eq "true"} | Sort-Object Name | Select-Object Name, SamAccountName $AccountCount = $Account | Measure-Object | Select-Object Count $AccountCount = $AccountCount.count # Results more as 1 Clear-Host if ($AccountCount -gt 1) { ForEach ($Element in $Account) { $x++ $Name = $Element.Name $SamAccountName = $Element.SamAccountName if ($AccountCount -gt 1) { write-host "$x. $Name [$SamAccountName]" } } } else { $x++ $Name = $Account.Name $SamAccountName = $Account.SamAccountName } # Select input option and check character input if ($x -gt 1) { write-host $ValueCheck = "true" while ($ValueCheck -eq "true") { $regex = "[0-9]" $Choose = Read-Host "Choose Option" # Input characters are not match the list results if (` $Choose -notmatch $regex -or ` $Choose -eq 0 -or ` $Choose -eq $null) { write-host write-host "Invalid Input. Use range between 1 and $x!" -foregroundcolor yellow write-host "Quit with 'STRG + C'" write-host $ValueCheck = "true" } else { $ValueCheck = "false" } } # Read SamAccountName from selected ADUser Account Clear-Host $a = $Account[$Choose -1].SamAccountName } # If 1 result only if ($x -eq 1) { # Read SamAccountName from selected ADUser Account Clear-Host $a = $Account.SamAccountName } # Set SamAccountName of ADUser Account into new variable $User = $a return $User } } # Find ADUser with SamAccountName Clear-Host $UserID = Find-ADUser $User # Query, if user is exist, if not, stop script if ($UserID -eq $null) { Write-Host "USER NOT FOUND!" -ForegroundColor Red Write-Warning "Script will terminate in 5 Seconds!" Write-Host sleep 5 break } # Example for processing the result Clear-Host Get-ADUser $UserID -Properties * |fl Name, SamAccountName pause
Wie bereits angedeutet, kann die PowerShell Funktion zur Weiterverarbeitung ausgiebig genutzt werden, wie in diesem Beispiel enthalten (Zeile 152). Lasst mir gerne entsprechende Kommentare da, solltet Ihr noch Anmerkungen zur weiteren Ausgestaltung des Skripts parat haben… ansonsten hoffe ich, Euch mit diesem Skript eine kleine Freude gemacht zu haben! 🙂