Vind Active Directory-gebruikers met een verlopen wachtwoord (PowerShell). Bent u verantwoordelijk voor het beheer van wachtwoorden in uw Active Directory-omgeving (AD)? Een cruciale taak is het identificeren van gebruikers waarvan de wachtwoorden zijn verlopen, omdat deze gebruikers niet meer kunnen inloggen op hun accounts totdat ze hun wachtwoord opnieuw instellen. Dit artikel laat u zien hoe u PowerShell efficiënt kunt gebruiken om actieve Directory-gebruikers met verlopen wachtwoorden te vinden.
Zullen we beginnen met ons artikelblog over Active Directory-gebruikers vinden met verlopen wachtwoord (PowerShell).
AD-gebruikers met verlopen wachtwoorden zoeken via PowerShell
Volgend artikel bespaart tijd en moeite, want we zoeken snel specifieke gebruikers voor wachtwoordherstel of verloopnotificaties. Of u een netwerkbeheerder bent of u alleen maar probeert de veiligheid van uw Active Directory-omgeving te verbeteren, biedt deze handleiding de informatie die u nodig hebt om aan de slag te kunnen.
Vereisten
Als we deze handleiding willen volgen, hebben we het volgende nodig:
- A Windows computer joined to an Active Directory domain.
- GeïnstalleerdActieveDirectory-module op het computer.
- Het computer moet ook minimaal Windows PowerShell 5.1 of hoger hebben.
Gebruikers in Active Directory zoeken
Voor het resetten van een gebruikerswachtwoord moeten we eerst het account lokaliseren. Als gevolg daarvan moet onze eerste stap zijn om te bepalen of er een reservaat bestaat. Om dit te doen, voer het Get-ADUser cmdlet uit met de Identity parameter ingesteld op de naam van het account.
De Identity parameter accepteert een van de vier identificatoren: distinguished name (DN), GUID (objectGUID), Security ID (objectSID), of SAM accountnaam (SAMAccountName).
Bijvoorbeeld, als we het wachtwoord voor een specifieke gebruiker willen resetten, moeten we eerst controleren of de gebruiker bestaat voordat we een accountreset uitvoeren. Voer hiervoor de volgende opdracht uit en plak deze in onze PowerShell console. Zorg ervoor dat u eerst de gebruikersnaam wijzigt naar de juiste:
Get-ADUser -Identity
De opdracht retourneerde de gebruikerskenmerken, zoals weergegeven in de onderstaande schermafbeelding, waarbij werd bevestigd dat het account bestaat en de gebruikersnaam correct is:
Het vinden van Gebruikers met Verlopen Wachtwoord in AD
We kunnen snel de wachtwoordverloopdatum voor een enkele gebruiker krijgen door de attribuut msDS-UserPasswordExpiryTimeComputed toe te voegen en te gebruiken met het commando Get-ADUser:
Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'
Maar deze regel code zal resulteren in een voor mensen onleesbare output, dus moeten we de volgende regel toevoegen om de resultaten om te zetten in een leesbaar formaat. Om de onderstaande regel toe te voegen, zullen we het Select-Object -Property commando gebruiken op een nieuwe PowerShell pipeline:
Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
Hetzelfde attribuut, msDS-UserPasswordExpiryTimeComputed, uitvoeren met de juiste filter, geeft ons een lijst van Active Directory accounts en hun wachtwoordverloop tijden:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

We verbeteren het bovenstaande script door de lijst van gebruikers te exporteren naar een tekstbestand dat we later kunnen gebruiken. Hiervoor kunnen we het Out-File commando gebruiken dat de output naar een tekstbestand zal sturen:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt
Het bovenstaande script genereert een bestand genaamd gebruikerslijst.txt dat we later kunnen gebruiken. We hebben ook de Vervaldatum eigenschap uit de output weggelaten, omdat we alleen de gebruikers-ID’s nodig hebben van accounts die zijn verlopen. We gebruiken deze lijst voor massaherstel, wat later in het artikel wordt besproken.
Het opnieuw instellen van het wachtwoord van de Active Directory-gebruiker
Nu we hebben geleerd hoe we Get-ADUser moeten gebruiken om een gebruikersaccount te controleren, weten we dat het resultaat geldig is en dat de gebruikers-ID bestaat. We moeten nu de Set-ADAccountPassword cmdlet gebruiken om het wachtwoord van de gebruiker opnieuw in te stellen.
De Set-ADAccountPassword opdracht wijzigt het wachtwoord van een gebruiker als we het oude wachtwoord opgeven. Als we het oude wachtwoord niet hebben, wordt het wachtwoord opnieuw ingesteld met de Reset parameter.
Het nieuwe willekeurig gegenereerde wachtwoord is een 14-teken wachtwoord met vijf niet-alfanumerieke tekens. Om uit te voeren, opent u een PowerShell venster, kopieert u de code, plakt u deze in PowerShell en drukt u op Enter:
$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
- Regel 1: Specificeert de gebruikersnaam waarvan het wachtwoord moet worden gereset. Zorg ervoor dat u de GEBRUIKERSNAAM string vervangt door de daadwerkelijke gebruikers-ID.
- Regel 2: Importeert de System.Web .NET assembly object klasse.
- Regel 3: Genereert een willekeurig wachtwoord dat 14 tekens lang is met vijf niet-alfanumerieke tekens.
- Regel 4: Converteert het wachtwoord in platte tekst naar een beveiligd wachtwoordobject.
- Regel 5: Vergemakkelijkt het resetten van het wachtwoord.
- Regel 6: Dwz de AD-account om het wachtwoord bij de volgende aanmelding te wijzigen.
- Regel 7: Toont het nieuwe wachtwoord in de console. We raden dit echter niet aan om veiligheidsredenen. Regel 6 zorgt voor de wachtwoordwijziging naar de wens van de gebruiker en wordt beschouwd als de beste praktijk voor deze procedure.
Verbeter uw Active Directory-beveiliging & Azure AD
Probeer ons uit gratis, toegang tot alle functies. – Meer dan 200 AD-rapporttemplates beschikbaar. Pas uw eigen AD-rapporten eenvoudig aan.
Het schrijven van het Active Directory-wachtwoord reset-hulpmiddel
We hebben nu een script dat we gebruiken om het wachtwoord van een gebruiker te resetten. De volgende stap is om ons script om te zetten in een hulpmiddel. Een herbruikbaar hulpmiddel voert dezelfde acties uit met minimale handmatige gebruikersacties.
Bij het bouwen van een hulpmiddel is één cruciale kant dat degene die het hulpmiddel uitvoert niet elke keer de code hoeft te bewerken. Helaas vereist onze code nog steeds dat de gebruiker de $username variabele bewerkt.
In plaats van onze toolgebruikers toe te staan om de waarden handmatig te wijzigen, waarom schrijven we dan geen script dat parameters accepteert? Om dit te doen, volg de onderstaande stappen:
- Open Windows PowerShell ISE.
- Maak een nieuw PowerShell-bestand aan en sla het bestand op onder de naam Reset-ADPassword.ps1. Sla het script op in ons voorkeurspad. Dit artikel slaat het bestand op in de C:\PS\scripts map.
- Kopieer en plak de onderstaande code in onze scripteditor voordat u het script opslaat.
param (
$username
)
if (-not($username)) {
Write-Host "Username not found. Exiting script"
return $null
}
try {
$null = Get-ADUser -Identity $username -ErrorAction Stop
} catch {
Write-Host $_.Exception.Message
return $null
}
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
try {
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
Set-ADuser -Identity $username -ChangePasswordAtLogon $true
[pscustomobject]@{
Username = $username
NewPassword = $randomPassword
}
} catch {
Write-Host "There was an error performing the password reset. Please find additional information below."
Write-host $_.Exception.Message
return $null
}
- Lijn 1: Voegt een parameter toe genaamd gebruikersnaam.
- Lijn 5: Controleert of de gebruiker een gebruikersnaamwaarde heeft opgegeven. De if blok laat ook een bericht zien en stopt de scriptuitvoering als de voorwaarde is voldaan.
- Lijn 10: Controleert of de gebruikersnaam geldig is of niet.
- Lijn 12: Valideert of de gebruikersnaam ongeldig is. Toont een bericht en stopt de scriptuitvoering.
- Lijn 17: Genereert een willekeurig wachtwoord dat 14 tekens lang is met vijf niet-alfanumerieke tekens.
- Lijn 18: Converteert het normale tekstwachtwoord naar een beveiligd tekenreekswachtwoordobject.
- Lijn 20: Maakt het mogelijk om het wachtwoord te resetten.
- Lijn 22: Dwingt het AD-account om het wachtwoord bij de volgende aanmelding te wijzigen.
- Lijn 24: Toont het nieuwe wachtwoord in de console. We raden dit echter niet aan voor beveiliging doeleinden. Lijn 6 zal zorgen voor de wachtwoordwijziging naar de voorkeur van de gebruiker en wordt beschouwd als de beste praktijk voor deze procedure.
- Lijn 28: Toont een foutbericht als de reset is mislukt.
Voorbeelduitvoeringen van het AD-wachtwoordresettool
A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.
Wachtwoordreset voor één gebruiker
Stel dat we het wachtwoord van één gebruiker moeten resetten. Eerst, voer het Active Directory-wachtwoordresettool uit en geef aan welke gebruikersnaam moet worden aangepakt. Om bijvoorbeeld het wachtwoord van één gebruiker te resetten, voer het script uit zoals hieronder:
.\Reset-ADPassword.ps1 -username USERNAME
Als resultaat reset het script het wachtwoord en toont het op het scherm. Bijvoorbeeld, deze uitvoer stuurt het nieuwe wachtwoord naar de getroffen gebruiker:
Wachtwoordreset voor meerdere gebruikers
Gelukkig kunnen we in PowerShell door een lijst heen lopen met behulp van arrays en de foreach-lus. Bovendien stelt de ForEach-Object cmdlet in PowerShell ons in staat om meerdere items tegelijk te verwerken. Deze cmdlet stelt ons in staat om verschillende items door de pijplijn te sturen.
Om de wachtwoorden van meerdere gebruikers te resetten, creëer een array met twee of meer gebruikersnamen. De array-items worden vervolgens door de pijplijn gestuurd, waar de ForEach-Object PowerShell-opdracht het wachtwoordresettool op elke gebruikersnaam uitvoert.
@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Echter, verbeteren we dit als we meer dan twee gebruikersaccounts herstellen. Denk aan het tekstbestand dat we eerder hebben gegenereerd? We maken ervan gebruik in deze sectie.
We moeten het tekstbestand lezen dat de gebruikersaccounts bevat en de AD-wachtwoordresettool uitvoeren voor elk ervan. Gebruik hiervoor de Get-Content cmdlet om de inhoud van het tekstbestand in PowerShell te importeren. Vervolgens stuurt het script de gegevens naar de pipeline en voert het het AD-wachtwoord reset script uit voor elk account.
Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Na uitvoering van het bovenstaande fragment hebben we meerdere gebruikerswachtwoorden opnieuw ingesteld in één runtime.
Bedankt voor het lezen van het artikelblog Vind gebruikers met verlopen wachtwoorden in Active Directory (PowerShell). We zullen het nu afronden.
Vind AD-gebruikers met verlopen wachtwoorden PowerShell Conclusie
In conclusie, het vinden van Active Directory gebruikers met verlopen wachtwoorden met behulp van PowerShell is een eenvoudig proces dat ons tijd en moeite bespaart. Door gebruik te maken van de Get-ADUser cmdlet en te filteren op gebruikers met verlopen wachtwoorden, kunt u snel specifieke gebruikers identificeren en targeten voor het resetten van wachtwoorden of verval notificaties. Deze opdracht is handig voor organisaties met grote aantallen gebruikers, omdat het u in staat stelt om proactief wachtwoordverval te beheren en het risico op beveiligings schendingen te verminderen.
Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/