Active Directory Useful Powershell Commands and Scripts 1739748834
Active Directory Useful Powershell Commands and Scripts 1739748834
PowerShell Script
Import-Module ActiveDirectory
Restore a GPO
Import-GPO -BackupGpoName "SecurityPolicy" -TargetName
"RestoredPolicy" -Path "C:\GPOBackups"
Write-Host "Restored GPO from backup"
Conclusion
8. Click Finish.
2. Automate Bulk User Creation
(Weekly)
This script creates users from a CSV file every
Monday at 8 AM.
Schedule Task
• Trigger: Weekly (Monday at 8:00 AM)
• Action: Run "C:\Scripts\CreateUsers.ps1"
3. Disable Inactive Users (Monthly)
This script disables AD accounts that haven’t
logged in for 90+ days.
PowerShell Script:
DisableInactiveUsers.ps1
$DaysInactive = 90
$Date = (Get-Date).AddDays(-$DaysInactive)
Schedule Task
• Trigger: Monthly (1st of each month at 12:00
AM)
• Action: Run "C:
\Scripts\DisableInactiveUsers.ps1"
4. Backup Group Policy Objects
(Daily)
This script backs up all GPOs to a folder every
night at 2 AM.
Schedule Task
• Trigger: Daily (2:00 AM)
• Action: Run "C:\Scripts\BackupGPOs.ps1"
5. Export AD Users and Groups
(Weekly)
This script exports all users & groups to a CSV
file.
Schedule Task
• Trigger: Monthly (First Sunday at 3:00 AM)
• Action: Run "C:\Scripts\RestartDCs.ps1"
7. Check for Locked Users (Hourly)
This script logs locked-out users every hour.
PowerShell Script:
CheckLockedUsers.ps1
$LockedUsers = Get-ADUser -Filter {LockedOut -eq $true}
if ($LockedUsers) {
$LockedUsers | Out-File "C:\Logs\LockedUsers.log"
-Append
Write-Host "Logged locked-out users."
}
Schedule Task
• Trigger: Every hour
• Action: Run "C:
\Scripts\CheckLockedUsers.ps1"
8. Restart Print Spooler Service (Every
Night)
This script restarts the Print Spooler service
every night at 1 AM.
Schedule Task
• Trigger: Daily (1:00 AM)
• Action: Run "C:\Scripts\RestartSpooler.ps1"
9. Test Internet Connection (Every 5
Minutes)
This script checks internet connectivity every 5
minutes.
Schedule Task
• Trigger: Every 5 minutes
• Action: Run "C:\Scripts\CheckInternet.ps1"
10. Cleanup Old Log Files (Daily)
This script deletes log files older than 30 days.
Schedule Task
• Trigger: Daily (4:00 AM)
• Action: Run "C:\Scripts\CleanupLogs.ps1"
Conclusion
$DisabledUsers = @()
foreach ($User in $Users) {
Disable-ADAccount -Identity $User.SamAccountName
$DisabledUsers += $User.SamAccountName
}
# Email Notification
$Subject = "Inactive Users Disabled"
$Body = "The following users were disabled due to
inactivity:`n" + ($DisabledUsers -join "`n")
Send-MailMessage -To $To -From $From -Subject $Subject
-Body $Body -SmtpServer $SMTPServer -Credential
$Credential -UseSsl -Port $SMTPPort
Write-Host "Email Sent!"
if ($LockedUsers) {
$Body = "The following accounts are locked:`n" +
($LockedUsers.SamAccountName -join "`n")
$Subject = "ALERT: Locked-Out Users Detected"
# Export AD Users
$Users = Get-ADUser -Filter * -Property SamAccountName,
DisplayName, Enabled, LastLogonDate
$Users | Export-Csv $ReportFile -NoTypeInformation
5. Click Finish.
4. Bonus: Send Email Alerts Without
Hardcoding Passwords
For security, instead of storing plaintext
passwords in scripts, use Secure Credentials
Storage.
Final Thoughts
Logging Function
$DaysInactive = 90
$Date = (Get-Date).AddDays(-$DaysInactive)
$Users = Get-ADUser -Filter {LastLogonDate -lt $Date
-and Enabled -eq $true} -Properties LastLogonDate
$SMTPServer = "smtp.office365.com"
$SMTPPort = "587"
$From = "[email protected]"
$To = "[email protected]"
$Credential = Import-Clixml -Path "C:
\Scripts\SMTP_Creds.xml"
Send-MailMessage -To $To -From $From -Subject
$Subject -Body $Body -SmtpServer $SMTPServer
-Credential $Credential -UseSsl -Port $SMTPPort
}
Function Write-Log {
param (
[string]$Message,
[string]$Level = "INFO"
)
$LogFile = "C:\Logs\AutomationLog.log"
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$Timestamp [$Level] $Message" | Out-File -Append
-FilePath $LogFile
$LogEntry = [PSCustomObject]@{
Timestamp = $Timestamp
Event = "Scheduled Task Executed"
Status = "Success"
}
Final Overview
<Output out>
Module om_udp
Host graylog-server
Port 514
</Output>
<Route 1>
Path in => out
</Route>
3. Restart NXLog:
Restart-Service nxlog
Final Overview
SIEM Tool Integration Method
Splunk Splunk Forwarder + REST API
ELK Stack Winlogbeat + Logstash
Azure Sentinel Log Analytics Agent + KQL Queries
Graylog NXLog Forwarding
Final Overview