PowerShell: Find, List and Select ADUser (Menu)
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!
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! :-)










Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!