workaloo

term script v1

Jul 24th, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #load activedirectory module
  2. function admod{
  3. if (!(Get-module activedirectory))
  4. {
  5.     write-host "Loading Active Directory Modules" -foregroundcolor "green"
  6.     import-module activedirectory
  7. }
  8. }
  9.  
  10. #define global variables
  11. $global:colortrue = "green"
  12. $global:colorfalse = "red"
  13. $global:colorprompt = "white"
  14. $global:todaysdate = get-date -format "MMddyyyy"
  15. $global:NotesPath = "H:\projects\powershell\reports\memberof.txt"
  16. $global:DisableUser = ""
  17. $global:Incident = ""
  18. $global:Termdate = ""
  19. $global:TermdateStr = ""
  20. $global:ManagedUser = ""
  21. $global:OU = ""
  22. $global:password =
  23. $global:pwlength = 8
  24. $global:session = ""
  25. $global:response = ""
  26. $global:mailboxtarget = "mailbox database (disabled)"
  27.  
  28. #emc function - loads EMC session
  29. function emc{
  30. $ExchangeServer = "servername"
  31.  
  32. #check if session is active
  33. if ($(get-pssession))
  34. {
  35.     remove-pssession -computername $exchangeserver
  36.    
  37.     $global:Session = New-PSSession -configurationname Microsoft.Exchange -connectionuri http://$Exchangeserver/powershell/ -authentication kerberos #-credential $credential
  38.     Import-Pssession $Session
  39. } else {
  40. $global:Session = New-PSSession -configurationname Microsoft.Exchange -connectionuri http://$Exchangeserver/powershell/ -authentication kerberos #-credential $credential
  41. Import-Pssession $global:Session
  42. }
  43. }
  44.  
  45.  
  46. #set-temppassword - generates random 10 digit string
  47. function set-temppassword{
  48.     [CmdletBinding()]
  49.     [OutputType([String])]
  50.     Param(
  51.         [int]$length=30,
  52.         [alias("U")]
  53.         [Switch]$Uppercase,
  54.         [alias("L")]
  55.         [Switch]$LowerCase,
  56.         [alias("N")]
  57.         [Switch]$Numeric,
  58.         [alias("S")]
  59.         [Switch]$Symbolic
  60.     )
  61.     Begin {}
  62.     Process {
  63.         If ($Uppercase) {$CharPool += ([char[]](64..90))}
  64.         If ($LowerCase) {$CharPool += ([char[]](97..122))}
  65.         If ($Numeric) {$CharPool += ([char[]](48..57))}
  66.         If ($Symbolic) {$CharPool += ([char[]](33..47))
  67.                        $CharPool += ([char[]](33..47))}
  68.         If ($CharPool -eq $null) {
  69.             Throw 'You must select at least one of the parameters "Uppercase" "LowerCase" "Numeric" or "Symbolic"'
  70.         }
  71.         [String]$Password =  (Get-Random -InputObject $CharPool -Count $length) -join ''
  72.     }
  73.     End {
  74.         return $Password
  75.     }
  76. }
  77.  
  78. #getinfo function - obtains information from user
  79. function getinfo{
  80. #ask for username (first.last) sample
  81. $prompt = "Enter username (john.doe):"
  82. $color = $global:colorprompt
  83. do{
  84.     #cls
  85.     write-host $prompt -foregroundcolor $color
  86.     $disablename = Read-Host
  87. } while (!$(dsquery user -samid $disablename; $prompt="User $disablename was not found, try again. `n`rEnter username (john.doe):"; $color=$global:colorfalse))
  88. $global:disableuser = (get-aduser $disablename).samaccountname
  89. write-host "$global:disableuser selected" -foregroundcolor $global:colortrue
  90.  
  91. #enter incident
  92. write-host "Enter incident number:" -foregroundcolor $global:colorprompt
  93. $global:incident = Read-Host
  94. write-host "Incident #: $global:incident" -foreground $global:colortrue
  95.  
  96. #term date request
  97. $color = $global:colorprompt
  98. $prompt = "Enter term date request (mm/dd/yy):"
  99. do
  100. {
  101.     write-host $prompt -foregroundcolor $color
  102.     $global:termdate = Read-Host
  103.     $global:termdate = $global:termdate -as [DateTime]
  104.     if (!$global:termdate)
  105.     {
  106.         write-host "Not a valid date and time" -foreground $global:colorfalse
  107.         $color = $global:colorfalse
  108.     }
  109. } while ($global:termdate -isnot [datetime])
  110.  
  111. $global:termdatestr = $global:termdate.ToString("MM/dd/yy")
  112. write-host "Term date: $global:termdatestr" -foregroundcolor $global:colortrue
  113. }
  114.  
  115. #mailbox function - grants full-access rights to selected user and moves mailbox
  116. function mailbox{
  117. #cls
  118. $prompt = "Will mailbox access be given to a user? (y/n)"
  119. $color = $global:colorprompt
  120. write-host $prompt -foregroundcolor $color
  121. $managedanswer = read-host
  122.  
  123. #grant full-access management to specified user
  124. if ($managedanswer -eq "y"){
  125.     $global:response = $answer
  126.     $prompt = "Enter username (john.doe):"
  127.     $color = $global:colorprompt
  128.     do{
  129.         #cls
  130.         write-host $prompt -foregroundcolor $color
  131.         $managedname = Read-Host
  132.     } while (!$(dsquery user -samid $managedname; $prompt="User $managedname was not found, try again. `n`rEnter username (john.doe):"; $color=$global:colorfalse))
  133.     $global:manageduser = (get-aduser $managedname -properties *).mail
  134.     add-mailboxpermission -identity $disableuser -user $global:manageduser -accessright 'FullAccess'
  135.     write-host "Full-access rights given to $global:manageduser." -foregroundcolor $global:colortrue
  136. } else {write-host "Mailbox will not be managed." -foregroundcolor $global:colortrue}
  137.  
  138. set-mailbox -identity $global:disableuser -hiddenfromaddresslistsenabled $true -requiresenderauthenticationenabled $true
  139.  
  140. #move mailbox to disabled container
  141. new-moverequest -identity $global:disableuser -targetdatabase $global:mailboxtarget
  142.  
  143. }
  144.  
  145. #ou function - displays division and prompts user to select container to move disabled account to
  146. function ou{
  147. [int]$menuchoice = 0
  148. $color = $global:colorprompt
  149.  
  150. #user chooses which OU to move AD user
  151. write-host "user is located at $global:OU. `r`n`r`nplease select division below:" -foregroundcolor $global:colorprompt
  152. while ( $menuchoice -lt 1 -or $menuchoice -gt 11){
  153.     write-host "`t01. Arizona" -foregroundcolor $global:colorprompt
  154.     write-host "`t02. Atlanta" -foregroundcolor $global:colorprompt
  155.     write-host "`t03. California" -foregroundcolor $global:colorprompt
  156.     write-host "`t04. Colorado" -foregroundcolor $global:colorprompt
  157.     write-host "`t05. Consultants" -foregroundcolor $global:colorprompt
  158.     write-host "`t06. Florida" -foregroundcolor $global:colorprompt
  159.     write-host "`t07. Nevada" -foregroundcolor $global:colorprompt
  160.     write-host "`t08. North Carolina" -foregroundcolor $global:colorprompt
  161.     write-host "`t09. South Carolina" -foregroundcolor $global:colorprompt
  162.     write-host "`t10. Tennessee" -foregroundcolor $global:colorprompt
  163.     write-host "`t11. Texas" -foregroundcolor $global:colorprompt
  164.     [int]$menuchoice = read-host "Please enter an option 1 to 11..."}
  165. Switch ($menuchoice) {
  166.     1 {$divisionreply = "Arizona"}
  167.     2 {$divisionreply = "Atlanta"}
  168.     3 {$divisionreply = "California"}
  169.     4 {$divisionreply = "Colorado"}
  170.     5 {$divisionreply = "Consultants"}
  171.     6 {$divisionreply = "Florida"}
  172.     7 {$divisionreply = "Nevada"}
  173.     8 {$divisionreply = "NorthCarolina"}
  174.     9 {$divisionreply = "SouthCarolina"}
  175.     10 {$divisionreply = "Tennessee"}
  176.     11 {$divisionreply = "Texas"}
  177.     }
  178. #reset password
  179. $newpassword = set-temppassword -length $pwlength -u -l -n
  180.  
  181. #add two characters to meet password requirements (kept getting an error...this fixed it)
  182. $newpassword = $newpassword += "1A"
  183. set-adaccountpassword $global:disableuser -reset -newpassword (convertto-securestring -asplaintext -string $newpassword -force)
  184.  
  185. #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)
  186. get-adprincipalgroupmembership $global:disableuser | select name |
  187.     foreach-object {if ($_.name -ne "Domain Users") {remove-adgroupmember -identity $_.name -member $global:disableuser -confirm:$false}}
  188.  
  189. get-aduser $global:disableuser -properties * | set-aduser -clear manager, ipphone, telephonenumber
  190. disable-adaccount $global:disableuser
  191. get-aduser $global:disableuser | move-adobject -targetpath "ou=$divisionreply,ou=disabled users,dc=company,dc=corp"
  192. }
  193.  
  194. #writeinfo function - pulls information from user and appends to text file. also notates AD info property
  195. function writeinfo{
  196. $global:OU = (get-aduser $global:disableuser -properties *).canonicalname
  197. $title = (get-aduser $global:disableuser -properties *).title
  198. $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----------------------------------------------"
  199. $TextNotesEnd = "`r`n--------------------------------------------------------------------------------------------`r`n"
  200. $Notation = "term request received $global:termdate. incident # $global:incident. prev in $global:OU - JC"
  201. $TextNotes >> $NotesPath
  202.  
  203. #get list of groups
  204. Get-AdPrincipalGroupMembership $global:disableuser |
  205.     select name |
  206.         sort-object name |
  207.             out-file $NotesPath -append
  208. get-aduser $global:disableuser -properties * | ft manager | out-file $NotesPath -append
  209. $TextNotesEnd >> $NotesPath
  210.  
  211. #notates user's profile
  212. get-aduser $global:disableuser -properties info |
  213.     foreach {set-aduser -identity $_.samaccountname -replace @{info="$($_.info) `r`n$Notation"}}
  214.  
  215. write-host "Text file updated and $global:disableuser account info notated" -foregroundcolor $global:colortrue
  216. }
  217.  
  218. #verifygetinfo function - verifies information entered is correct
  219. function verifygetinfo{
  220. #cls
  221. write-host "##########################################" -foregroundcolor $global:colorprompt
  222. write-host "User to term: $global:disableuser" -foregroundcolor $global:colorprompt
  223. write-host "Incident number: $global:incident" -foregroundcolor $global:colorprompt
  224. write-host "Term request date: $global:termdatestr" -foregroundcolor $global:colorprompt
  225. write-host "##########################################" -foregroundcolor $global:colorprompt
  226. write-host "Information correct? (y/n)" -foregroundcolor $global:colorprompt
  227. $answer = read-host
  228. if($answer -eq "n") {getinfo}
  229. if($answer -eq "y")
  230. {
  231.     write-host "Information Saved!" -foregroundcolor $global:colortrue
  232. }
  233. else {write-host -foregroundcolor $global:colorfalse "Invalid Selection"
  234.     sleep 3
  235.     verifygetinfo
  236.     }
  237. }
  238.  
  239. function main{
  240. admod
  241. emc
  242. getinfo
  243. verifygetinfo
  244. writeinfo
  245. ou
  246. mailbox
  247.  
  248. #send email indicating user has been termed
  249. send-mailmessage -smtpserver "mail.company.com" -to "[email protected]" -from "[email protected]" -subject "$global:Disableuser has been terminated - Incident# $global:incident"
  250.  
  251. #copies text for incident resolution
  252. if ($global:response -eq "y") {"AD account disabled, PW reset, email hidden in GAL, email given to $manageduser" | clip}
  253. else {"AD account disabled, PW reset, email hidden in GAL, " | clip}
  254.  
  255. remove-pssession $global:session
  256. }
  257.  
  258. main
Advertisement
Add Comment
Please, Sign In to add comment