Voor onze systeembeheerders heb ik een script geschreven die het AD wachtwoord van de client reset en per SMS naar hun toegestuurd wordt.

voor de sms functie maak ik gebruik van een Raspeberry PI met een vodafone usb dongle.

als je de functie start wordt er gevraagd om de UserPrincipalName van de gebruiker opgeven en de vraag of je het account moet unlocken.

Op  de achtergrond verbind het script met AD en reset het wachtwoord wat random gegenereerd wordt door het script. en verbind hij met de PI.
Daarnaast wordt er automatisch een e-mail gestuurd naar onze servicedesk met de uitgevoerde commando’s zodat dit verwerkt kan worden in ons call registratie

Function ResetPassword{
[CmdletBinding(DefaultParameterSetName=”UPN”)]
Param (
[Parameter(ParameterSetName=”UPN”,Position=0)]
[string]$UPN,
[string]$NextLogon
) #end Param
if (!$UPN) {
Write-Host “”
Write-Host “* Please provide the UPN: ” -NoNewline
$UPN = Read-Host
} #end if
if (!$NextLogon) {
Write-Host “”
Write-Host “* Change @ next logon Ja/Yes / Nee/No : ” -NoNewline
$NextLogon = Read-Host
} #end if

Import-Module posh-ssh # Import module posh-SSH voor de ssh connectie naar de Pi

#Clear-Variable -Name mobile # Clear Variable Mobile
Clear-Variable -Name Mob* # Clear Variable Mob*
Clear-Variable -Name Sam* # Clear Variable SamAccountname
Clear-Variable -Name Ident* # Clear Variable Identity
### SSH verbinding maken met Pi


$Samaccountname = get-aduser -Filter {UserPrincipalName -eq $Upn} -Properties * # UserPrincipalName omzetten naar SamAccounNAme
$Indentity = $Samaccountname.Samaccountname
$mobile = $Samaccountname.mobile # mobiel nummer uit AD halen

## E-mail settings
$sendingmailAdminAccount = (((Get-ADUser -Identity $Env:USERNAME).Surname).Split(“-“)[0]).Trim()
$sendingmailUserAccount = Get-ADUser -SearchBase “DC=contoso,DC=local” -Filter {surname -like $sendingmailAdminAccount} -Properties Mail
$sendingmailUserAccount1 = $sendingmailUserAccount.Mail
$sendingmailSMTPServer = “”
$sendingmailSMTPUser = “”
$sendingmailSMTPPass = “”| Convertto-SecureString -AsPlainText -Force
$sendingmailVincentvanUne = “usermail”
$sendingmailcredentials = New-Object System.Management.Automation.Pscredential -Argumentlist $sendingmailSMTPUser,$sendingmailSMTPPass
$sendingmailfiles = get-childitem $logdir | where name -like “*error*.txt”
$sendingmailbody = @()
$sendingmailattachments = @()


function Get-RandomCharacters($length, $characters) {
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
$private:ofs=””
return [String]$characters[$random]
}

function Scramble-String([string]$inputString){
$characterArray = $inputString.ToCharArray()
$scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length
$outputString = -join $scrambledStringArray
return $outputString
}

$pwdcharacter += Get-RandomCharacters -length 1 -characters ‘!@#$%&*()’

$words = “Wachtwoordvergeten”, “Nieuwwachtwoord”, “Wachtwoordreset”, “Complexwachtwoord” ,”Wachtwoordverzoek”, “Companyciviel”
$string = (Get-Random -InputObject $words) + “$pwdcharacter”+ (Get-Random -Maximum 99 )
$password = (get-culture).TextInfo.ToTitleCase($string)

$pwd = convertto-securestring $password -asplaintext -force
$newPassword = $pwd

if($samaccountname.CanonicalName -like “contoso.local/CVNL/EXTERN/*”){
Set-ADAccountPassword -Identity $Indentity -NewPassword $newPassword -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $False # AD aanpassing nieuwe wachtwoord waarbij het wachtwoord bij volgende login opnieuw ingevuld moet worden
} # controle of user in Externe ou zit zodat het wachtwoord next login niet uitgevoerd word
if(($NextLogon -eq “yes” )-or ($NextLogon -eq “ja”)-or ($NextLogon -eq “Ja”)-or ($NextLogon -eq “Yes”)){
Set-ADAccountPassword -Identity $Indentity -NewPassword $newPassword -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True # AD aanpassing nieuwe wachtwoord waarbij het wachtwoord bij volgende login niet opnieuw ingevuld moet worden
}
if(($NextLogon -eq “nee” )-or ($NextLogon -eq “no”) -or ($NextLogon -eq “Nee” )-or ($NextLogon -eq “No”)){
Set-ADAccountPassword -Identity $Indentity -NewPassword $newPassword -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $False
}
else
{write-host -ForegroundColor Red “Change @ next Logon is niet ingevuld”

Write-Host “* Change @ next logon Ja/Yes / Nee/No : ” -NoNewline
$NextLogon = Read-Host}
if($mobile -ne $null){
$mobile2 = $mobile.replace(‘ ‘,”) # uitfilteren van spaties

Write-Host “”

function pi-login{
$username = “pi”                                                                                                                            # Username Pi
$pipwd = “raspberry”                                                                                                                        # Password Pi
$secstr = New-Object -TypeName System.Security.SecureString                                                                                 # Convert pipwd to string
$pipwd.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}                                                                    
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr                                     # Samenvoegen Credentials
$RaspberryPi = “192.168.1.68”                                                                                                                # Server Adres Pi

New-SSHSession -ComputerName $RaspberryPi -Credential $cred -AcceptKey                                                                      # Connectie naar Raspberry Pi
}


## Versturen via SMS
pi-login

Invoke-SshCommand -index 0 -Command “echo ‘Uw tijdelijke nieuwe wachtwoord = $password’ Bij het aanmelden zal u uw wachtwoord moeten wijzigen | sudo gammu sendsms TEXT ‘$mobile2′”; # ssh command uitvoeren om Nieuwe password te versturen

Get-SSHSession | Remove-SshSession; # Disconnect sessions
cls
Write-Host “”
Write-Host -ForegroundColor Yellow “Password is reset SMS word verstuurd naar $mobile2”
Write-Host “”

# Sending E-mail
$sendingmailbody += ” Beste $sendingmailUserAccount2<br/> <br/>van de onderstaande account is het nieuwe wachtwoord per SMS verzonden <br/> <br/> <b>UserPrincipalName = $Upn </b><br/> <br/> <b> SamAccountName = $Indentity <br/> </b><br/>Dit is verzonden naar het volgende mobiele nummer <br/><br/>– > <b>$mobile</B> <—<br/><br/> deze stond ingevuld in ActiveDirectory <br/>”
$sendingmailbody = $sendingmailbody | Out-String
Send-MailMessage -to $sendingmailUserAccount.Mail -From $sendingmailSMTPUser -Credential $sendingmailcredentials -SmtpServer $sendingmailSMTPServer -Subject “Wachtwoord Reset is uitgevoerd” -BodyAsHtml $sendingmailbody
}


else {

Write-Host “”
Write-Host -ForegroundColor Red “Password is niet gereset omdat er geen mobiel nummer ingevuld is in AD”
Write-Host “”

# Sending E-mail
$sendingmailbody += ” Beste $sendingmailUserAccount2<br/><br/> van de onderstaande account kon de wachtwoord SMS niet verzonden worden <br/> <br/> <b>UserPrincipalName = $Upn </b><br/> <br/> <b> SamAccountName = $Indentity <br/> </b><br/>Dit is omdat hoogstwaarschijnlijk het mobiele nummer <br/><br/>– > <b>$mobile</B> <—<br/><br/> niet goed is ingevuld in Active Directory<br/><br/> Om de wachtwoord reset te kunnen uitvoeren zal dit in Active Directory gecorrigeerd moeten worden”
$sendingmailbody = $sendingmailbody | Out-String
Send-MailMessage -to $sendingmailUserAccount.Mail -From $sendingmailSMTPUser -Credential $sendingmailcredentials -SmtpServer $sendingmailSMTPServer -Subject “Wachtwoord Reset is niet uitgevoerd” -BodyAsHtml $sendingmailbody
}
}