• Instagram
  • LinkedIn
  • Bluesky
logo site janna strand

over IT, eten en plaatjes draaien

  • Home
  • Koken met Steijvers
  • Tech
    • Windows Server
    • Exchange Server
    • Powershell
    • Veeam
    • VMware
    • Hyper-V
    • Proxmox
    • UniFi
    • Hewlett Packard Enterprise
  • Vinyl/Vintage Audio
    • Thorens
    • Dual
  • Fotoblog
  • Over mij
    • Bas
    • Curriculum Vitae
    • Contact
  • Links
    • Hall of Fame
  • Home
  • Koken met Steijvers
  • Tech
    • Windows Server
    • Exchange Server
    • Powershell
    • Veeam
    • VMware
    • Hyper-V
    • Proxmox
    • UniFi
    • Hewlett Packard Enterprise
  • Vinyl/Vintage Audio
    • Thorens
    • Dual
  • Fotoblog
  • Over mij
    • Bas
    • Curriculum Vitae
    • Contact
  • Links
    • Hall of Fame
logo powershell

AccountLockoutStatus

Geschreven door Bas op 11 februari 2021 in Tech

In de meeste active directories zal via een GPO een lockout policy actief zijn. Voor degenen die het niets zegt, hiermee stel je in dat wanneer er bijvoorbeeld 5maal met een foutief wachtwoord wordt aangemeld, wordt het betreffende account veiligheidshalve een uur “locked out”. Aanmelden kan dan niet. De meeste scriptkiddies gaan verder en de medewerker kan na een uur (zonder tussenkomst van een beheerder) weer aanmelden.

De beheerder wil echter wel graag uitzoeken waar die lockout vandaan komt. Daarvoor passen we eerst een reporting regel toe via de GPO.

Maak een inbound firewall rule aan binnen, bijvoorbeeld, de default domain policy. Het rule-type moet Remote Event Log Management zijn. Voor de rest is het Next, Next, Finish. PS, ik ga er dus van uit dat je al een Account Lockout Policy actief hebt binnen je omgeving.

Vervolgens heb je dan het onderstaande script. Deze leest dus de eventlogs uit die we met de bovenstaande policy genereren.

#requires -Module ActiveDirectory
 
Function Get-AccountLockoutStatus {
<#
.Synopsis
This will iterate through all your domain controllers by default and checks for event 4740 in event viewer. To use this, you must dot source the file and call the function.
For updated help and examples refer to -Online version.
 
 
.DESCRIPTION
This will go through all domain controllers by default and check to see if there are event ID for lockouts and display the information in table with Username, Time, Computername and CallerComputer.
For updated help and examples refer to -Online version.
 
 
.NOTES  
Name: Get-AccountLockoutStatus
Author: theSysadminChannel
Version: 1.01
DateCreated: 2017-Apr-09
DateUpdated: 2017-Apr-09
 
.LINK
https://thesysadminchannel.com/get-account-lock-out-source-powershell -
 
 
.PARAMETER ComputerName
By default all domain controllers are checked. If a ComputerName is specified, it will check only that.
 
.PARAMETER Username
If a username is specified, it will only output events for that username.
 
.PARAMETER DaysFromToday
This will set the number of days to check in the event logs.  Default is 3 days.
 
.EXAMPLE
Get-AccountLockoutStatus
 
Description:
Will generate a list of lockout events on all domain controllers.
 
.EXAMPLE
Get-AccountLockoutStatus -ComputerName DC01, DC02
 
Description:
Will generate a list of lockout events on DC01 and DC02.
 
.EXAMPLE
Get-AccountLockoutStatus -Username Username
 
Description:
Will generate a list of lockout events on all domain controllers and filter that specific user.
 
.EXAMPLE
Get-AccountLockoutStatus -DaysFromToday 2
 
Description:
Will generate a list of lockout events on all domain controllers going back only 2 days.
 
#>
 
[CmdletBinding()]
param(
[Parameter(
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
 
[string[]]     $ComputerName = (Get-ADDomainController -Filter * |  select -ExpandProperty Name),
 
[Parameter()]
[string]       $Username,
 
[Parameter()]
[int]          $DaysFromToday = 3
 
)
 
 
BEGIN {
$Object = @()
}
 
PROCESS {
Foreach ($Computer in $ComputerName) {
try {
$EventID = Get-WinEvent -ComputerName $Computer -FilterHashtable @{Logname = 'Security'; ID = 4740; StartTime = (Get-Date).AddDays(-$DaysFromToday)} -EA 0
Foreach ($Event in $EventID) {
$Properties = @{Computername   = $Computer
Time           = $Event.TimeCreated
Username       = $Event.Properties.value[0]
CallerComputer = $Event.Properties.value[1]
}
$Object += New-Object -TypeName PSObject -Property $Properties | Select ComputerName, Username, Time, CallerComputer
}
 
} catch {
$ErrorMessage = $Computer + " Error: " + $_.Exception.Message
 
} finally {
if ($Username) {
Write-Output $Object | Where-Object {$_.Username -eq $Username}
} else {
Write-Output $Object
}
$Object = $null
}
 
}
 
}     
 
 
END {}
 
}

In dit voorbeeld is er via de computer RENDEZVOUS dus te vaak verkeerd ingelogd onder de naam van “Janna”, waarbij het account dus “locked out” is.

Tags

account accountlockoutstatus locked out policy
Afdrukken

Bas

Terugzoeken welke query binnen een interval actief was
Coldplay - Parachutes coldplay parachutes
  • Instagram
  • LinkedIn
  • Bluesky

Onlangs toegevoegd

  • HPE Proliant server cluster + HPE MSA SAN met Hyper-V
  • DNS4EU nameserver ip-adressen
  • Hotfix Update for Exchange Server 2019 CU15 HU2 (KB5057651)
  • Efteling
  • 25 jaar Steijvers.com / Susse.net
  • Exchange Server 2019 CU15 Apr25HU
  • Efteling
  • VMware ESXi 8.0U3e Free License
  • VMware ESXi 8.0U3e
  • HPE Proliant SPP Version 2025.03

Archieven

© 2000 – 2025 Familie Steijvers, onderdeel van SUSSE.NET

Aangedreven door WordPress. Foodica WordPress thema door WPZOOM.