Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #load activedirectory module
- function admod{
- if (!(Get-module activedirectory))
- {
- write-host "Loading Active Directory Modules" -foregroundcolor "green"
- import-module activedirectory
- }
- }
- #define global variables
- $global:colortrue = "green"
- $global:colorfalse = "red"
- $global:colorprompt = "white"
- $global:todaysdate = get-date -format "MMddyyyy"
- $global:NotesPath = "H:\projects\powershell\reports\memberof.txt"
- $global:DisableUser = ""
- $global:Incident = ""
- $global:Termdate = ""
- $global:TermdateStr = ""
- $global:ManagedUser = ""
- $global:OU = ""
- $global:password =
- $global:pwlength = 8
- $global:session = ""
- $global:response = ""
- $global:mailboxtarget = "mailbox database (disabled)"
- #emc function - loads EMC session
- function emc{
- $ExchangeServer = "servername"
- #check if session is active
- if ($(get-pssession))
- {
- remove-pssession -computername $exchangeserver
- $global:Session = New-PSSession -configurationname Microsoft.Exchange -connectionuri http://$Exchangeserver/powershell/ -authentication kerberos #-credential $credential
- Import-Pssession $Session
- } else {
- $global:Session = New-PSSession -configurationname Microsoft.Exchange -connectionuri http://$Exchangeserver/powershell/ -authentication kerberos #-credential $credential
- Import-Pssession $global:Session
- }
- }
- #set-temppassword - generates random 10 digit string
- function set-temppassword{
- [CmdletBinding()]
- [OutputType([String])]
- Param(
- [int]$length=30,
- [alias("U")]
- [Switch]$Uppercase,
- [alias("L")]
- [Switch]$LowerCase,
- [alias("N")]
- [Switch]$Numeric,
- [alias("S")]
- [Switch]$Symbolic
- )
- Begin {}
- Process {
- If ($Uppercase) {$CharPool += ([char[]](64..90))}
- If ($LowerCase) {$CharPool += ([char[]](97..122))}
- If ($Numeric) {$CharPool += ([char[]](48..57))}
- If ($Symbolic) {$CharPool += ([char[]](33..47))
- $CharPool += ([char[]](33..47))}
- If ($CharPool -eq $null) {
- Throw 'You must select at least one of the parameters "Uppercase" "LowerCase" "Numeric" or "Symbolic"'
- }
- [String]$Password = (Get-Random -InputObject $CharPool -Count $length) -join ''
- }
- End {
- return $Password
- }
- }
- #getinfo function - obtains information from user
- function getinfo{
- #ask for username (first.last) sample
- $prompt = "Enter username (john.doe):"
- $color = $global:colorprompt
- do{
- #cls
- write-host $prompt -foregroundcolor $color
- $disablename = Read-Host
- } while (!$(dsquery user -samid $disablename; $prompt="User $disablename was not found, try again. `n`rEnter username (john.doe):"; $color=$global:colorfalse))
- $global:disableuser = (get-aduser $disablename).samaccountname
- write-host "$global:disableuser selected" -foregroundcolor $global:colortrue
- #enter incident
- write-host "Enter incident number:" -foregroundcolor $global:colorprompt
- $global:incident = Read-Host
- write-host "Incident #: $global:incident" -foreground $global:colortrue
- #term date request
- $color = $global:colorprompt
- $prompt = "Enter term date request (mm/dd/yy):"
- do
- {
- write-host $prompt -foregroundcolor $color
- $global:termdate = Read-Host
- $global:termdate = $global:termdate -as [DateTime]
- if (!$global:termdate)
- {
- write-host "Not a valid date and time" -foreground $global:colorfalse
- $color = $global:colorfalse
- }
- } while ($global:termdate -isnot [datetime])
- $global:termdatestr = $global:termdate.ToString("MM/dd/yy")
- write-host "Term date: $global:termdatestr" -foregroundcolor $global:colortrue
- }
- #mailbox function - grants full-access rights to selected user and moves mailbox
- function mailbox{
- #cls
- $prompt = "Will mailbox access be given to a user? (y/n)"
- $color = $global:colorprompt
- write-host $prompt -foregroundcolor $color
- $managedanswer = read-host
- #grant full-access management to specified user
- if ($managedanswer -eq "y"){
- $global:response = $answer
- $prompt = "Enter username (john.doe):"
- $color = $global:colorprompt
- do{
- #cls
- write-host $prompt -foregroundcolor $color
- $managedname = Read-Host
- } while (!$(dsquery user -samid $managedname; $prompt="User $managedname was not found, try again. `n`rEnter username (john.doe):"; $color=$global:colorfalse))
- $global:manageduser = (get-aduser $managedname -properties *).mail
- add-mailboxpermission -identity $disableuser -user $global:manageduser -accessright 'FullAccess'
- write-host "Full-access rights given to $global:manageduser." -foregroundcolor $global:colortrue
- } else {write-host "Mailbox will not be managed." -foregroundcolor $global:colortrue}
- set-mailbox -identity $global:disableuser -hiddenfromaddresslistsenabled $true -requiresenderauthenticationenabled $true
- #move mailbox to disabled container
- new-moverequest -identity $global:disableuser -targetdatabase $global:mailboxtarget
- }
- #ou function - displays division and prompts user to select container to move disabled account to
- function ou{
- [int]$menuchoice = 0
- $color = $global:colorprompt
- #user chooses which OU to move AD user
- write-host "user is located at $global:OU. `r`n`r`nplease select division below:" -foregroundcolor $global:colorprompt
- while ( $menuchoice -lt 1 -or $menuchoice -gt 11){
- write-host "`t01. Arizona" -foregroundcolor $global:colorprompt
- write-host "`t02. Atlanta" -foregroundcolor $global:colorprompt
- write-host "`t03. California" -foregroundcolor $global:colorprompt
- write-host "`t04. Colorado" -foregroundcolor $global:colorprompt
- write-host "`t05. Consultants" -foregroundcolor $global:colorprompt
- write-host "`t06. Florida" -foregroundcolor $global:colorprompt
- write-host "`t07. Nevada" -foregroundcolor $global:colorprompt
- write-host "`t08. North Carolina" -foregroundcolor $global:colorprompt
- write-host "`t09. South Carolina" -foregroundcolor $global:colorprompt
- write-host "`t10. Tennessee" -foregroundcolor $global:colorprompt
- write-host "`t11. Texas" -foregroundcolor $global:colorprompt
- [int]$menuchoice = read-host "Please enter an option 1 to 11..."}
- Switch ($menuchoice) {
- 1 {$divisionreply = "Arizona"}
- 2 {$divisionreply = "Atlanta"}
- 3 {$divisionreply = "California"}
- 4 {$divisionreply = "Colorado"}
- 5 {$divisionreply = "Consultants"}
- 6 {$divisionreply = "Florida"}
- 7 {$divisionreply = "Nevada"}
- 8 {$divisionreply = "NorthCarolina"}
- 9 {$divisionreply = "SouthCarolina"}
- 10 {$divisionreply = "Tennessee"}
- 11 {$divisionreply = "Texas"}
- }
- #reset password
- $newpassword = set-temppassword -length $pwlength -u -l -n
- #add two characters to meet password requirements (kept getting an error...this fixed it)
- $newpassword = $newpassword += "1A"
- set-adaccountpassword $global:disableuser -reset -newpassword (convertto-securestring -asplaintext -string $newpassword -force)
- #remove from distro/sec groups (there are two groups that have the '/' symbol in it and it returns an error. i just haven't figured it out yet)
- get-adprincipalgroupmembership $global:disableuser | select name |
- foreach-object {if ($_.name -ne "Domain Users") {remove-adgroupmember -identity $_.name -member $global:disableuser -confirm:$false}}
- get-aduser $global:disableuser -properties * | set-aduser -clear manager, ipphone, telephonenumber
- disable-adaccount $global:disableuser
- get-aduser $global:disableuser | move-adobject -targetpath "ou=$divisionreply,ou=disabled users,dc=company,dc=corp"
- }
- #writeinfo function - pulls information from user and appends to text file. also notates AD info property
- function writeinfo{
- $global:OU = (get-aduser $global:disableuser -properties *).canonicalname
- $title = (get-aduser $global:disableuser -properties *).title
- $TextNotes = "`r`n--------------------------------------------------------------------------------------------`r`nUser: $global:disableuser `r`nTitle: $title `r`nToday's Date: $todaysdate `r`nTerm Request Date: $global:termdate `r`nIncident number: $global:incident `r`n----------------------------------------------"
- $TextNotesEnd = "`r`n--------------------------------------------------------------------------------------------`r`n"
- $Notation = "term request received $global:termdate. incident # $global:incident. prev in $global:OU - JC"
- $TextNotes >> $NotesPath
- #get list of groups
- Get-AdPrincipalGroupMembership $global:disableuser |
- select name |
- sort-object name |
- out-file $NotesPath -append
- get-aduser $global:disableuser -properties * | ft manager | out-file $NotesPath -append
- $TextNotesEnd >> $NotesPath
- #notates user's profile
- get-aduser $global:disableuser -properties info |
- foreach {set-aduser -identity $_.samaccountname -replace @{info="$($_.info) `r`n$Notation"}}
- write-host "Text file updated and $global:disableuser account info notated" -foregroundcolor $global:colortrue
- }
- #verifygetinfo function - verifies information entered is correct
- function verifygetinfo{
- #cls
- write-host "##########################################" -foregroundcolor $global:colorprompt
- write-host "User to term: $global:disableuser" -foregroundcolor $global:colorprompt
- write-host "Incident number: $global:incident" -foregroundcolor $global:colorprompt
- write-host "Term request date: $global:termdatestr" -foregroundcolor $global:colorprompt
- write-host "##########################################" -foregroundcolor $global:colorprompt
- write-host "Information correct? (y/n)" -foregroundcolor $global:colorprompt
- $answer = read-host
- if($answer -eq "n") {getinfo}
- if($answer -eq "y")
- {
- write-host "Information Saved!" -foregroundcolor $global:colortrue
- }
- else {write-host -foregroundcolor $global:colorfalse "Invalid Selection"
- sleep 3
- verifygetinfo
- }
- }
- function main{
- admod
- emc
- getinfo
- verifygetinfo
- writeinfo
- ou
- mailbox
- #send email indicating user has been termed
- send-mailmessage -smtpserver "mail.company.com" -to "[email protected]" -from "[email protected]" -subject "$global:Disableuser has been terminated - Incident# $global:incident"
- #copies text for incident resolution
- if ($global:response -eq "y") {"AD account disabled, PW reset, email hidden in GAL, email given to $manageduser" | clip}
- else {"AD account disabled, PW reset, email hidden in GAL, " | clip}
- remove-pssession $global:session
- }
- main
Advertisement
Add Comment
Please, Sign In to add comment