Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.65 KB | None | 0 0
  1. import-module activedirectory
  2. clear
  3. get-service winrm
  4. Enable-PSRemoting
  5. set-item WSMan:\localhost\Client\TrustedHosts -value "WIN-2016"
  6. $ip = "WIN-2016"
  7. $cred = Get-Credential Administrator
  8. $SesjonADServer = New-PSSession -ComputerName $ip -credential $cred
  9.  
  10. clear
  11. startscript
  12.  
  13. function startscript { #fikser fargefeilen..
  14. hovedMeny
  15. }
  16.  
  17. function hovedMeny{
  18. [int]$Menyvalg = 0
  19. while($Menyvalg -lt 1 -or $Menyvalg -gt 11){
  20. write-host "========================= ~ Drift av AD ~ ========================= `n" -ForegroundColor Cyan
  21. write-host "1." -ForegroundColor cyan -NoNewline
  22. write-host " Ny AD-bruker`n" -ForegroundColor DarkCyan
  23. write-host "2." -ForegroundColor cyan -NoNewline
  24. write-host " Ny AD-bruker med CSV`n" -ForegroundColor DarkCyan
  25. write-host "3." -ForegroundColor cyan -NoNewline
  26. write-host " Finn AD-brukere`n" -ForegroundColor DarkCyan
  27. write-host "4." -ForegroundColor cyan -NoNewline
  28. write-host " Finn aktive brukere`n" -ForegroundColor DarkCyan
  29. write-host "5." -ForegroundColor cyan -NoNewline
  30. write-host " Finn deaktiverte brukere`n" -ForegroundColor DarkCyan
  31. write-host "6." -ForegroundColor cyan -NoNewline
  32. write-host " Aktiver AD-brukere`n" -ForegroundColor DarkCyan
  33. write-host "7." -ForegroundColor cyan -NoNewline
  34. write-host " Deaktiver AD-brukere`n" -ForegroundColor DarkCyan
  35. write-host "8." -ForegroundColor cyan -NoNewline
  36. write-host " Remove AD-brukere`n" -ForegroundColor DarkCyan
  37. write-host "9." -ForegroundColor cyan -NoNewline
  38. write-host " Finn grupper som brukere er medlem av`n" -ForegroundColor DarkCyan
  39. write-host "10." -ForegroundColor cyan -NoNewline
  40. write-host " Finn utløpsdato til passord hos bruker`n" -ForegroundColor DarkCyan
  41. write-host "11." -ForegroundColor cyan -NoNewline
  42. write-host " Nullstill passord`n" -ForegroundColor DarkCyan
  43.  
  44. write-host "0. Avslutt`n" -ForegroundColor Red
  45.  
  46. [int]$Menyvalg = read-host "Velg et alternativ fra 0 til 11"
  47. switch($Menyvalg){
  48. 0{avslutt}
  49. 1{newADUser}
  50. 2{newADUserCSV}
  51. 3{Find-ADBruker}
  52. 4{Write-AdAktivBruker}
  53. 5{Write-AdDeaktivertBruker}
  54. 6{Aktiver-AdBruker}
  55. 7{Deaktiver-AdBruker}
  56. 8{Remove-AdBruker}
  57. 9{Get-AdBrukerGruppe}
  58. 10{Get-PassordUtlopsDato}
  59. 11{Set-AdBrukerPassord}
  60. default{
  61. clear
  62. write-host "Du valgte et tall utenfor menyvalggrensen..." -ForegroundColor yellow
  63. }
  64. }
  65. }
  66. }
  67.  
  68.  
  69. function newADUser {
  70.  
  71. # Skriv inn fornavn
  72. $fornavn = Read-Host "Skriv inn brukerens fornavn"
  73.  
  74. # Skriv inn etternavn
  75. $etternavn = Read-Host "Skriv inn brukerens etternavn"
  76.  
  77. # Sjekk at fornavn og etternavn ikke er for kort
  78. do
  79. {
  80. $err = $false
  81. if($Fornavn.Length -lt 2)
  82. {
  83. $Fornavn = Read-Host `
  84. -prompt 'Fornavnet må minst være på to bokstaver'
  85. $err = $true
  86. }
  87.  
  88. if($Etternavn.Length -lt 2)
  89. {
  90. $Etternavn = Read-Host `
  91. -Prompt 'Etternavnet må være på minst to bokstaver'
  92. $err = $true
  93. }
  94. }while($err -eq $true)
  95.  
  96. # Opprett fullt navn ut fra fornavn og etternavn
  97. $fulltNavn = "$fornavn $etternavn"
  98.  
  99. # Skriv inn e-post
  100. $epost = Read-Host "Skriv inn brukerens e-post"
  101.  
  102. # Sett et unikt brukernavn
  103. $brukernavn = Set-Brukernavn $fornavn $etternavn
  104.  
  105. # Ta bort mellomrom ol.
  106. $brukernavn = $brukernavn.Trim()
  107.  
  108. # Les inn og konverter passordet over til sikker tekst
  109. $passord = Read-Host "Skriv inn brukerens passord:" `
  110. -AsSecureString
  111. $passord = ConvertTo-SecureString $passord `
  112. -AsPlainText -Force
  113.  
  114. # Forsøk å opprette AD bruker
  115. Invoke-Command -Session $SesjonADServer -ScriptBlock {
  116. try
  117. {
  118. New-ADUser `
  119. -SamAccountName $using:brukernavn `
  120. -UserPrincipalName $using:brukernavn `
  121. -Name $using:fulltNavn `
  122. -Surname $using:etternavn `
  123. -AccountPassword $using:passord `
  124. -ChangePasswordAtLogon $true `
  125. -EmailAddress $using:epost `
  126. -Enabled $true
  127.  
  128. Write-Host "Brukeren $brukernavn er opprettet" `
  129. -Foreground Green
  130.  
  131. }catch{
  132. Write-Host $_.Exception.Message -Foreground red
  133. }
  134. }
  135.  
  136. hovedmeny
  137. }
  138.  
  139. Function newADUserCSV {
  140.  
  141. do {
  142. # Dialogboks for å åpne CSV-fil
  143. $csvFil = New-Object System.Windows.Forms.OpenFileDialog
  144. $csvFil.Filter =
  145. "csv files (*.csv)|*.csv|txt files (*.txt)|"+
  146. "*.txt|All files (*.*)|*.*"
  147. $csvFil.Title =
  148. "Åpne opp CSV fil som inneholder brukere"
  149. $csvFil.ShowDialog()
  150. }until ($csvFil.FileName -ne "")
  151.  
  152. # Importer brukere fra CSV
  153. $brukere = Import-Csv $csvFil.FileName -Delimiter ";"
  154. write 'csv importert'
  155.  
  156. # Gå igjennom alle brukere
  157. foreach ($bruker in $brukere) {
  158.  
  159. # Konvert passord over til sikker tekst
  160. $passord = ConvertTo-SecureString $bruker.Passord `
  161. -AsPlainText -Force
  162. # Hent ut etternavn
  163. $etternavn = $bruker.Etternavn
  164. # Hent ut fornavn
  165. $fornavn = $bruker.Fornavn
  166. # Hent ut epost
  167. $epost = $bruker.Epost
  168. # Hent ut OU-sti
  169. $OU = $bruker.OU
  170.  
  171. # Sett et unikt brukernavn
  172. $brukernavn = Set-Brukernavn $fornavn $etternavn
  173. # Ta bort mellomrom ol.
  174. $brukernavn = $brukernavn.Trim()
  175. # Opprett fullt navn ut fra fornavn og etternavn
  176. $fulltNavn = "$fornavn $etternavn"
  177.  
  178. # Opprett bruker
  179. Invoke-Command -Session $SesjonADServer -ScriptBlock {
  180. Try {
  181. New-ADUser `
  182. -SamAccountName $using:brukernavn `
  183. -UserPrincipalName $using:brukernavn `
  184. -Name $using:fulltNavn `
  185. -Surname $using:etternavn `
  186. -AccountPassword $using:passord `
  187. -ChangePasswordAtLogon $using:true `
  188. -EmailAddress $using:epost `
  189. -Enabled $true
  190.  
  191. Write "Brukeren $using:brukernavn er opprettet" `
  192. -Foreground Green
  193. }catch{
  194. Write-Host $_.Exception.Message
  195. }
  196. }
  197. }
  198. hovedmeny
  199. }
  200.  
  201. Function Find-ADBruker {
  202. $Hjelp =
  203. 'Søk etter brukere. Velg en eller flere brukere
  204. Ved å skrive nummeret etterfulgt av komma.
  205. [f.eks. 2,5].
  206. Skriv ut dette ved å skrive ?!
  207. Avslutt søk ved å skrive x!
  208. Når du er ferdig, skriv f!'
  209.  
  210. write-host $Hjelp
  211.  
  212. [object[]]$ValgteBrukere = $null
  213.  
  214. do
  215. {
  216. $avslutt = $false
  217. [int]$tall = $null
  218.  
  219. # Skriver ut valgte brukere
  220. if($ValgteBrukere -notlike $null)
  221. {
  222. # Fjerner doble forekomster
  223. $ValgteBrukere = $ValgteBrukere |
  224. Sort -Property userprincipalname -Unique
  225.  
  226. [string]$ut = $ValgteBrukere.userprincipalname
  227. $ut = $ut.Replace(' ', ',')
  228. Write-host "Du har valgt: $ut"
  229. }
  230.  
  231. $SøkeTekst = Read-Host '>'
  232.  
  233. # Sjekker søkeord
  234.  
  235. if($SøkeTekst.Length -eq 2 -and $SøkeTekst -eq 'x!')
  236. {
  237. # Avslutt søk
  238. Write-host 'Avbryter. . .'
  239. return $null
  240. }
  241. elseif($SøkeTekst.Length -eq 2 `
  242. -and $SøkeTekst -eq 'f!')
  243. {
  244. # Returnerer valgte brukere
  245. return $ValgteBrukere
  246. }
  247. elseif($SøkeTekst.Length -eq 2 `
  248. -and $SøkeTekst -eq '?!')
  249. {
  250. write-host $Hjelp
  251. }
  252. # Tester om brukeren har skrevet inn tall
  253. # Hvis det er valgt kun ett objekt
  254. elseif([int32]::TryParse($SøkeTekst,[ref]$tall))
  255. {
  256. # Velg objekter
  257. Write-host 'Velger ett objekt'
  258. [object[]]$ValgteBrukere += $resultat |
  259. where{$_.nummer -eq $SøkeTekst}
  260. }
  261. elseif($SøkeTekst.Contains(','))
  262. {
  263. $SøkeTekst = $SøkeTekst.Split(',') | %{$_.Trim()}
  264. [object[]]$ValgteBrukere += $resultat |
  265. where{$_.nummer -in $SøkeTekst}
  266. }
  267. else
  268. {
  269. # Hent ut alle brukere
  270. $resultat = Invoke-Command -Session $SesjonADServer `
  271. -ScriptBlock {
  272. Get-ADUser -Filter *
  273. }
  274.  
  275. # Finn brukere som matcher søketekst
  276. $resultat = $resultat |
  277. where {$_.userprincipalname -match $SøkeTekst}
  278.  
  279. # Skriver ut resultat
  280. if($resultat -notlike $null)
  281. {
  282. Write-ADBruker $resultat | out-null
  283. }
  284. else
  285. {
  286. Write 'Ingen treff i søk'
  287. }
  288. }
  289. }while($avslutt -eq $false)
  290. hovedmeny
  291. }
  292.  
  293. Function Write-AdAktivBruker {
  294. $brukere = Invoke-Command -Session $SesjonADServer `
  295. -ScriptBlock {
  296. get-aduser -filter {enabled -eq $true}
  297. }
  298.  
  299. write $brukere
  300.  
  301. hovedmeny
  302. }
  303.  
  304. Function Write-AdDeaktivertBruker {
  305. $brukere = Invoke-Command -Session $SesjonADServer `
  306. -ScriptBlock {
  307. get-aduser -filter {enabled -eq $false}
  308. }
  309.  
  310. Write $brukere
  311. hovedmeny
  312. }
  313.  
  314. Function Aktiver-AdBruker {
  315. # Søk etter brukere og hent ut valgte brukere
  316. $brukere = Find-ADBruker
  317.  
  318. if($brukere -notlike $null)
  319. {
  320. Invoke-Command -Session $SesjonADServer -script {
  321. $using:brukere.objectguid | Set-ADUser -Enabled $true
  322. }
  323. write 'Brukerne er nå aktiverte'
  324. }
  325. hovedmeny
  326. }
  327.  
  328. Function Deaktiver-AdBruker {
  329. # Søk etter brukere og hent ut valgte brukere
  330. $brukere = Find-ADBruker
  331.  
  332. elseif($Deaktiver -and $brukere -notlike $null)
  333. {
  334. Invoke-Command -Session $SesjonADServer -script {
  335. $using:brukere.objectguid | Set-ADUser -Enabled $false
  336. }
  337. write 'Brukerne er nå deaktiverte'
  338. }
  339. hovedmeny
  340. }
  341.  
  342. Function Remove-AdBruker {
  343. # Søk etter brukere og hent ut valgte brukere
  344. $brukere = Find-ADBruker
  345.  
  346. if($brukere -notlike $null)
  347. {
  348. Invoke-Command -Session $SesjonADServer -ScriptBlock {
  349. $using:brukere.objectguid | Remove-ADUser
  350. }
  351. write 'Brukerne er nå aktiverte'
  352. }
  353. hovedmeny
  354. }
  355.  
  356. Function Get-AdBrukerGruppe {
  357. Write-Host "Henter brukere. . ." -ForegroundColor Cyan
  358.  
  359. $Brukere = Invoke-Command -Session $sesjonadserver `
  360. -script {
  361. Get-ADUser -filter *
  362. }
  363.  
  364. # Skriv ut brukere
  365. write $brukere
  366.  
  367. do
  368. {
  369. # Velg bruker
  370. $inndata = Read-Host `
  371. -Prompt "Velg en bruker ved å skrive samaccountname"
  372.  
  373. # Valider valg
  374. $valg = $brukere | where {$_.samaccountname -eq $inndata}}until($valg -ne $null)
  375.  
  376. # Hent brukerens grupper
  377. $gruppe = Invoke-Command -Session $sesjonadserver `
  378. -script {
  379. Get-ADPrincipalGroupMembership `
  380. -identity $using:valg.samaccountname
  381. }
  382.  
  383. # Rensk skjerm
  384. clear-host
  385.  
  386. # List ut grupper
  387. write $gruppe
  388.  
  389. # Trykk en tast for å gå tilbake
  390. pause
  391. }
  392.  
  393. Function Get-PassordUtlopsDato {
  394. $brukere = Invoke-Command -Session $sesjonadserver `
  395. -script {
  396. $PwMaxDager =
  397. (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
  398.  
  399. Get-ADUser -filter `
  400. {enabled -eq $true -and
  401. PasswordNeverExpires -eq $false} `
  402. -Properties * |
  403. Select-Object -Property "samaccountname",
  404. @{name="Utløpsdato"
  405. ;Expression={$_.PasswordLastSet.AddDays($PwMaxDager)}}|
  406. where {$_.Utløpsdato -ne $null}
  407. }
  408.  
  409. write ($brukere |
  410. select -prop samaccountname, Utløpsdato)
  411. }
  412.  
  413. Function Set-AdBrukerPassord {
  414. # Hent brukere
  415. $brukere = Invoke-Command -Session $sesjonadserver `
  416. -ScriptBlock {
  417. get-aduser -filter *
  418. }
  419.  
  420. # List ut brukere
  421. write ($brukere | ft -prop samaccountname, name)
  422.  
  423. do
  424. {
  425. # Hent inndata
  426. $inndata = read-host `
  427. -Prompt "Velg bruker ved å skrive samaccountname"
  428.  
  429. # Velg bruker
  430. $valg = $brukere |
  431. where {$_.samaccountname -eq $inndata}
  432.  
  433. # valider valg
  434. }until($valg -ne $null)
  435.  
  436. # Skriv nytt passord
  437. Invoke-Command -Session $sesjonadserver -script {
  438. Set-ADAccountPassword `
  439. -Identity $using:valg.samaccountname -reset
  440. }
  441.  
  442. # Hvis alt gikk bra
  443. if($?){
  444. write-host `
  445. "Passord for $($valg.samaccountname) er endret"
  446. }else{
  447. write-host "Noe gikk galt"
  448. }
  449. }
  450.  
  451. function Avslutt{
  452. write-host "du avsluttet porgrammet.."
  453. exit(1)
  454. }
  455.  
  456. #hjelpefunksjoner
  457. function Format-Brukernavn {
  458. # Skript av Stein Meisingseth v/ NTNU
  459. param([String]$brukernavn)
  460.  
  461. #sett brukernavn til små bokstaver
  462. $brukernavn=$brukernavn.ToLower()
  463.  
  464. #Erstatt æøå med eoa
  465. $brukernavn=$brukernavn.replace('æ','e')
  466. $brukernavn=$brukernavn.replace('ø','o')
  467. $brukernavn=$brukernavn.replace('å','a')
  468.  
  469. #Returnere det formatere brukernavnet
  470. return $brukernavn
  471. }
  472.  
  473. Function Set-Brukernavn {
  474. # Skript av Stein Meisingseth v/ NTNU
  475. # Modifisert av forfatter
  476. param(
  477. [string]$Fornavn,
  478. [string]$Etternavn
  479. )
  480.  
  481. # Setter midlertidig variabel til $null
  482. # slik at den ikke inneholder noe fra tidligere
  483. $midlertidigBrukernavn = $null
  484. $sjekk = $true
  485.  
  486. # Hvis fornavn eller etternavn er på to bokstaver blir
  487. # disse to brukt i brukernavnet i stedet for tre
  488. # bokstaver
  489. if($fornavn.length -eq 2)
  490. {
  491. $brukernavn = $fornavn.substring(0,2)
  492. }else
  493. {
  494. $brukernavn = $fornavn.substring(0,3)
  495. }
  496.  
  497. if($etternavn.length -eq 2)
  498. {
  499. $brukernavn += $etternavn.substring(0,2)
  500. }else
  501. {
  502. $brukernavn += $etternavn.substring(0,3)
  503. }
  504.  
  505. # Telleren bli satt til en. Den skal brukes hvis
  506. # brukernavnet allerede er i bruk
  507. $teller = 1
  508.  
  509. # Bruker Format-Brukernavn
  510. $navn = Format-Brukernavn $brukernavn
  511. $MidlertidigBrukernavn = $navn
  512.  
  513.  
  514. # Hent ut alle brukere
  515. $finnes = Invoke-Command -Session $SesjonADServer `
  516. -ScriptBlock {
  517. Get-ADUser -Filter *}
  518.  
  519. do{
  520. $finnes = $finnes |
  521. where {$_.SamAccountName -eq $MidlertidigBrukernavn}
  522.  
  523. # Hvis brukernavnet ikke er i bruk
  524. if($finnes -eq $null){
  525. $sjekk = $false
  526. $navn = $MidlertidigBrukernavn
  527. }else{
  528. # Hvis det er to like brukernavn vil teller bli lagt
  529. # til slutten av brukernavnet for å skille de.
  530. $MidlertidigBrukernavn = $navn + $teller
  531.  
  532. #inkrementerer teller slik at en får et annet
  533. # brukernavn neste gang.
  534. $teller +=1
  535. }
  536. }while($sjekk -eq $true)
  537.  
  538. return $navn
  539. }
  540.  
  541. function Set-LinjeNummer {
  542. param (
  543. [parameter(mandatory=$true)]
  544. [Object[]]$Objekt
  545. )
  546.  
  547.  
  548. # Legger til linjenummer på objektet
  549. $Nummer = 1
  550.  
  551. # Gjennomgår hver rad i objekt
  552. $Objekt | ForEach-Object {
  553. # Legger til linjenummer som egenskap for hver rad
  554. Add-Member -InputObject $_ -MemberType NoteProperty `
  555. -Name Nummer -Value $Nummer
  556.  
  557. # Inkrementerer linjenummer
  558. $Nummer++
  559. }
  560.  
  561. # Hvert objekt har nå et linjenummer
  562. return $objekt
  563. }
  564.  
  565. Function Write-ADBruker {
  566. param($bruker)
  567.  
  568. # Legg til linjenummer
  569. Set-LinjeNummer $bruker
  570.  
  571. Write-Host ($bruker | Format-Table `
  572. -Property nummer, `
  573. @{expression={$_.UserPrincipalName};Label='UserName'}, `
  574. name, enabled | out-string)
  575. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement