Top System Administrator Tips + Scripts
1. π Enforce Strong Password Policies (AD)
Weak passwords = biggest risk.
Tip: Regularly audit password settings and enforce complexity.
Import-Module ActiveDirectoryGet-ADDefaultDomainPasswordPolicy | Select-Object *
π Pro move: Alert if policy drifts from standard
$policy = Get-ADDefaultDomainPasswordPolicyif ($policy.MinPasswordLength -lt 14) {
Write-Warning "Password length is below recommended standard!"
}
2. π€ Find Inactive Users (Security + Licensing Savings)
Tip: Disable stale accounts after 60β90 days.
$days = 90
$date = (Get-Date).AddDays(-$days)Search-ADAccount -AccountInactive -UsersOnly -TimeSpan $days.00:00:00 |
Select Name, LastLogonDate
π Disable them:
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan $days.00:00:00 |
Disable-ADAccount
3. π» Monitor Disk Space Across Servers
Tip: Prevent outages before they happen.
$servers = @("Server1","Server2")foreach ($server in $servers) {
Get-WmiObject Win32_LogicalDisk -ComputerName $server -Filter "DriveType=3" |
Select-Object @{Name="Server";Expression={$server}},
DeviceID,
@{Name="FreeGB";Expression={[math]::round($_.FreeSpace/1GB,2)}}
}
4. π¦ Automate Software Inventory
Tip: Know whatβs installed everywhere.
$computers = Get-ADComputer -Filter * | Select -Expand Nameforeach ($computer in $computers) {
Get-WmiObject -Class Win32_Product -ComputerName $computer |
Select PSComputerName, Name, Version
}
β οΈ Note: Win32_Product is slowβuse registry for large environments.
5. π Restart Critical Services Automatically
Tip: Auto-heal common outages.
$service = "Spooler"if ((Get-Service $service).Status -ne "Running") {
Restart-Service $service
Write-Output "$service restarted"
}
6. π Daily Health Check Report (Email)
Tip: Know your environment before users do.
$servers = @("Server1","Server2")
$report = foreach ($server in $servers) {
Get-Service -ComputerName $server |
Where-Object {$_.Status -ne "Running"} |
Select PSComputerName, Name, Status
}$report | Out-File "C:\Reports\DailyHealth.txt"
π Pair with scheduled task + email send
7. π Audit Admin Group Membership
Tip: Detect privilege creep.
Get-ADGroupMember "Domain Admins" |
Select Name, SamAccountName
π Export for auditing:
Get-ADGroupMember "Domain Admins" |
Export-Csv "C:\Audit\DomainAdmins.csv" -NoTypeInformation
8. π§Ή Clean Temp Files Automatically
Tip: Reclaim space and improve performance.
$path = "C:\Windows\Temp\*"Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
9. π Test Connectivity to Critical Systems
Tip: Monitor dependencies (DCs, apps, internet)
$targets = @("8.8.8.8","yourdomain.com","Server1")foreach ($target in $targets) {
Test-Connection -ComputerName $target -Count 2 -Quiet
}
10. π§Ύ Bulk User Creation from CSV
Tip: Save hours during onboarding.
Import-Csv "C:\users.csv" | ForEach-Object {
New-ADUser `
-Name $_.Name `
-GivenName $_.FirstName `
-Surname $_.LastName `
-SamAccountName $_.Username `
-UserPrincipalName "$($_.Username)@domain.com" `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) `
-Enabled $true
}