Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import-module activedirectory
- clear
- get-service winrm
- Enable-PSRemoting
- set-item WSMan:\localhost\Client\TrustedHosts -value "WIN-2016"
- $ip = "WIN-2016"
- $cred = Get-Credential Administrator
- $SesjonADServer = New-PSSession -ComputerName $ip -credential $cred
- clear
- startscript
- function startscript { #fikser fargefeilen..
- hovedMeny
- }
- function hovedMeny{
- [int]$Menyvalg = 0
- while($Menyvalg -lt 1 -or $Menyvalg -gt 11){
- write-host "========================= ~ Drift av AD ~ ========================= `n" -ForegroundColor Cyan
- write-host "1." -ForegroundColor cyan -NoNewline
- write-host " Ny AD-bruker`n" -ForegroundColor DarkCyan
- write-host "2." -ForegroundColor cyan -NoNewline
- write-host " Ny AD-bruker med CSV`n" -ForegroundColor DarkCyan
- write-host "3." -ForegroundColor cyan -NoNewline
- write-host " Finn AD-brukere`n" -ForegroundColor DarkCyan
- write-host "4." -ForegroundColor cyan -NoNewline
- write-host " Finn aktive brukere`n" -ForegroundColor DarkCyan
- write-host "5." -ForegroundColor cyan -NoNewline
- write-host " Finn deaktiverte brukere`n" -ForegroundColor DarkCyan
- write-host "6." -ForegroundColor cyan -NoNewline
- write-host " Aktiver AD-brukere`n" -ForegroundColor DarkCyan
- write-host "7." -ForegroundColor cyan -NoNewline
- write-host " Deaktiver AD-brukere`n" -ForegroundColor DarkCyan
- write-host "8." -ForegroundColor cyan -NoNewline
- write-host " Remove AD-brukere`n" -ForegroundColor DarkCyan
- write-host "9." -ForegroundColor cyan -NoNewline
- write-host " Finn grupper som brukere er medlem av`n" -ForegroundColor DarkCyan
- write-host "10." -ForegroundColor cyan -NoNewline
- write-host " Finn utløpsdato til passord hos bruker`n" -ForegroundColor DarkCyan
- write-host "11." -ForegroundColor cyan -NoNewline
- write-host " Nullstill passord`n" -ForegroundColor DarkCyan
- write-host "0. Avslutt`n" -ForegroundColor Red
- [int]$Menyvalg = read-host "Velg et alternativ fra 0 til 11"
- switch($Menyvalg){
- 0{avslutt}
- 1{newADUser}
- 2{newADUserCSV}
- 3{Find-ADBruker}
- 4{Write-AdAktivBruker}
- 5{Write-AdDeaktivertBruker}
- 6{Aktiver-AdBruker}
- 7{Deaktiver-AdBruker}
- 8{Remove-AdBruker}
- 9{Get-AdBrukerGruppe}
- 10{Get-PassordUtlopsDato}
- 11{Set-AdBrukerPassord}
- default{
- clear
- write-host "Du valgte et tall utenfor menyvalggrensen..." -ForegroundColor yellow
- }
- }
- }
- }
- function newADUser {
- # Skriv inn fornavn
- $fornavn = Read-Host "Skriv inn brukerens fornavn"
- # Skriv inn etternavn
- $etternavn = Read-Host "Skriv inn brukerens etternavn"
- # Sjekk at fornavn og etternavn ikke er for kort
- do
- {
- $err = $false
- if($Fornavn.Length -lt 2)
- {
- $Fornavn = Read-Host `
- -prompt 'Fornavnet må minst være på to bokstaver'
- $err = $true
- }
- if($Etternavn.Length -lt 2)
- {
- $Etternavn = Read-Host `
- -Prompt 'Etternavnet må være på minst to bokstaver'
- $err = $true
- }
- }while($err -eq $true)
- # Opprett fullt navn ut fra fornavn og etternavn
- $fulltNavn = "$fornavn $etternavn"
- # Skriv inn e-post
- $epost = Read-Host "Skriv inn brukerens e-post"
- # Sett et unikt brukernavn
- $brukernavn = Set-Brukernavn $fornavn $etternavn
- # Ta bort mellomrom ol.
- $brukernavn = $brukernavn.Trim()
- # Les inn og konverter passordet over til sikker tekst
- $passord = Read-Host "Skriv inn brukerens passord:" `
- -AsSecureString
- $passord = ConvertTo-SecureString $passord `
- -AsPlainText -Force
- # Forsøk å opprette AD bruker
- Invoke-Command -Session $SesjonADServer -ScriptBlock {
- try
- {
- New-ADUser `
- -SamAccountName $using:brukernavn `
- -UserPrincipalName $using:brukernavn `
- -Name $using:fulltNavn `
- -Surname $using:etternavn `
- -AccountPassword $using:passord `
- -ChangePasswordAtLogon $true `
- -EmailAddress $using:epost `
- -Enabled $true
- Write-Host "Brukeren $brukernavn er opprettet" `
- -Foreground Green
- }catch{
- Write-Host $_.Exception.Message -Foreground red
- }
- }
- hovedmeny
- }
- Function newADUserCSV {
- do {
- # Dialogboks for å åpne CSV-fil
- $csvFil = New-Object System.Windows.Forms.OpenFileDialog
- $csvFil.Filter =
- "csv files (*.csv)|*.csv|txt files (*.txt)|"+
- "*.txt|All files (*.*)|*.*"
- $csvFil.Title =
- "Åpne opp CSV fil som inneholder brukere"
- $csvFil.ShowDialog()
- }until ($csvFil.FileName -ne "")
- # Importer brukere fra CSV
- $brukere = Import-Csv $csvFil.FileName -Delimiter ";"
- write 'csv importert'
- # Gå igjennom alle brukere
- foreach ($bruker in $brukere) {
- # Konvert passord over til sikker tekst
- $passord = ConvertTo-SecureString $bruker.Passord `
- -AsPlainText -Force
- # Hent ut etternavn
- $etternavn = $bruker.Etternavn
- # Hent ut fornavn
- $fornavn = $bruker.Fornavn
- # Hent ut epost
- $epost = $bruker.Epost
- # Hent ut OU-sti
- $OU = $bruker.OU
- # Sett et unikt brukernavn
- $brukernavn = Set-Brukernavn $fornavn $etternavn
- # Ta bort mellomrom ol.
- $brukernavn = $brukernavn.Trim()
- # Opprett fullt navn ut fra fornavn og etternavn
- $fulltNavn = "$fornavn $etternavn"
- # Opprett bruker
- Invoke-Command -Session $SesjonADServer -ScriptBlock {
- Try {
- New-ADUser `
- -SamAccountName $using:brukernavn `
- -UserPrincipalName $using:brukernavn `
- -Name $using:fulltNavn `
- -Surname $using:etternavn `
- -AccountPassword $using:passord `
- -ChangePasswordAtLogon $using:true `
- -EmailAddress $using:epost `
- -Enabled $true
- Write "Brukeren $using:brukernavn er opprettet" `
- -Foreground Green
- }catch{
- Write-Host $_.Exception.Message
- }
- }
- }
- hovedmeny
- }
- Function Find-ADBruker {
- $Hjelp =
- 'Søk etter brukere. Velg en eller flere brukere
- Ved å skrive nummeret etterfulgt av komma.
- [f.eks. 2,5].
- Skriv ut dette ved å skrive ?!
- Avslutt søk ved å skrive x!
- Når du er ferdig, skriv f!'
- write-host $Hjelp
- [object[]]$ValgteBrukere = $null
- do
- {
- $avslutt = $false
- [int]$tall = $null
- # Skriver ut valgte brukere
- if($ValgteBrukere -notlike $null)
- {
- # Fjerner doble forekomster
- $ValgteBrukere = $ValgteBrukere |
- Sort -Property userprincipalname -Unique
- [string]$ut = $ValgteBrukere.userprincipalname
- $ut = $ut.Replace(' ', ',')
- Write-host "Du har valgt: $ut"
- }
- $SøkeTekst = Read-Host '>'
- # Sjekker søkeord
- if($SøkeTekst.Length -eq 2 -and $SøkeTekst -eq 'x!')
- {
- # Avslutt søk
- Write-host 'Avbryter. . .'
- return $null
- }
- elseif($SøkeTekst.Length -eq 2 `
- -and $SøkeTekst -eq 'f!')
- {
- # Returnerer valgte brukere
- return $ValgteBrukere
- }
- elseif($SøkeTekst.Length -eq 2 `
- -and $SøkeTekst -eq '?!')
- {
- write-host $Hjelp
- }
- # Tester om brukeren har skrevet inn tall
- # Hvis det er valgt kun ett objekt
- elseif([int32]::TryParse($SøkeTekst,[ref]$tall))
- {
- # Velg objekter
- Write-host 'Velger ett objekt'
- [object[]]$ValgteBrukere += $resultat |
- where{$_.nummer -eq $SøkeTekst}
- }
- elseif($SøkeTekst.Contains(','))
- {
- $SøkeTekst = $SøkeTekst.Split(',') | %{$_.Trim()}
- [object[]]$ValgteBrukere += $resultat |
- where{$_.nummer -in $SøkeTekst}
- }
- else
- {
- # Hent ut alle brukere
- $resultat = Invoke-Command -Session $SesjonADServer `
- -ScriptBlock {
- Get-ADUser -Filter *
- }
- # Finn brukere som matcher søketekst
- $resultat = $resultat |
- where {$_.userprincipalname -match $SøkeTekst}
- # Skriver ut resultat
- if($resultat -notlike $null)
- {
- Write-ADBruker $resultat | out-null
- }
- else
- {
- Write 'Ingen treff i søk'
- }
- }
- }while($avslutt -eq $false)
- hovedmeny
- }
- Function Write-AdAktivBruker {
- $brukere = Invoke-Command -Session $SesjonADServer `
- -ScriptBlock {
- get-aduser -filter {enabled -eq $true}
- }
- write $brukere
- hovedmeny
- }
- Function Write-AdDeaktivertBruker {
- $brukere = Invoke-Command -Session $SesjonADServer `
- -ScriptBlock {
- get-aduser -filter {enabled -eq $false}
- }
- Write $brukere
- hovedmeny
- }
- Function Aktiver-AdBruker {
- # Søk etter brukere og hent ut valgte brukere
- $brukere = Find-ADBruker
- if($brukere -notlike $null)
- {
- Invoke-Command -Session $SesjonADServer -script {
- $using:brukere.objectguid | Set-ADUser -Enabled $true
- }
- write 'Brukerne er nå aktiverte'
- }
- hovedmeny
- }
- Function Deaktiver-AdBruker {
- # Søk etter brukere og hent ut valgte brukere
- $brukere = Find-ADBruker
- elseif($Deaktiver -and $brukere -notlike $null)
- {
- Invoke-Command -Session $SesjonADServer -script {
- $using:brukere.objectguid | Set-ADUser -Enabled $false
- }
- write 'Brukerne er nå deaktiverte'
- }
- hovedmeny
- }
- Function Remove-AdBruker {
- # Søk etter brukere og hent ut valgte brukere
- $brukere = Find-ADBruker
- if($brukere -notlike $null)
- {
- Invoke-Command -Session $SesjonADServer -ScriptBlock {
- $using:brukere.objectguid | Remove-ADUser
- }
- write 'Brukerne er nå aktiverte'
- }
- hovedmeny
- }
- Function Get-AdBrukerGruppe {
- Write-Host "Henter brukere. . ." -ForegroundColor Cyan
- $Brukere = Invoke-Command -Session $sesjonadserver `
- -script {
- Get-ADUser -filter *
- }
- # Skriv ut brukere
- write $brukere
- do
- {
- # Velg bruker
- $inndata = Read-Host `
- -Prompt "Velg en bruker ved å skrive samaccountname"
- # Valider valg
- $valg = $brukere | where {$_.samaccountname -eq $inndata}}until($valg -ne $null)
- # Hent brukerens grupper
- $gruppe = Invoke-Command -Session $sesjonadserver `
- -script {
- Get-ADPrincipalGroupMembership `
- -identity $using:valg.samaccountname
- }
- # Rensk skjerm
- clear-host
- # List ut grupper
- write $gruppe
- # Trykk en tast for å gå tilbake
- pause
- }
- Function Get-PassordUtlopsDato {
- $brukere = Invoke-Command -Session $sesjonadserver `
- -script {
- $PwMaxDager =
- (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
- Get-ADUser -filter `
- {enabled -eq $true -and
- PasswordNeverExpires -eq $false} `
- -Properties * |
- Select-Object -Property "samaccountname",
- @{name="Utløpsdato"
- ;Expression={$_.PasswordLastSet.AddDays($PwMaxDager)}}|
- where {$_.Utløpsdato -ne $null}
- }
- write ($brukere |
- select -prop samaccountname, Utløpsdato)
- }
- Function Set-AdBrukerPassord {
- # Hent brukere
- $brukere = Invoke-Command -Session $sesjonadserver `
- -ScriptBlock {
- get-aduser -filter *
- }
- # List ut brukere
- write ($brukere | ft -prop samaccountname, name)
- do
- {
- # Hent inndata
- $inndata = read-host `
- -Prompt "Velg bruker ved å skrive samaccountname"
- # Velg bruker
- $valg = $brukere |
- where {$_.samaccountname -eq $inndata}
- # valider valg
- }until($valg -ne $null)
- # Skriv nytt passord
- Invoke-Command -Session $sesjonadserver -script {
- Set-ADAccountPassword `
- -Identity $using:valg.samaccountname -reset
- }
- # Hvis alt gikk bra
- if($?){
- write-host `
- "Passord for $($valg.samaccountname) er endret"
- }else{
- write-host "Noe gikk galt"
- }
- }
- function Avslutt{
- write-host "du avsluttet porgrammet.."
- exit(1)
- }
- #hjelpefunksjoner
- function Format-Brukernavn {
- # Skript av Stein Meisingseth v/ NTNU
- param([String]$brukernavn)
- #sett brukernavn til små bokstaver
- $brukernavn=$brukernavn.ToLower()
- #Erstatt æøå med eoa
- $brukernavn=$brukernavn.replace('æ','e')
- $brukernavn=$brukernavn.replace('ø','o')
- $brukernavn=$brukernavn.replace('å','a')
- #Returnere det formatere brukernavnet
- return $brukernavn
- }
- Function Set-Brukernavn {
- # Skript av Stein Meisingseth v/ NTNU
- # Modifisert av forfatter
- param(
- [string]$Fornavn,
- [string]$Etternavn
- )
- # Setter midlertidig variabel til $null
- # slik at den ikke inneholder noe fra tidligere
- $midlertidigBrukernavn = $null
- $sjekk = $true
- # Hvis fornavn eller etternavn er på to bokstaver blir
- # disse to brukt i brukernavnet i stedet for tre
- # bokstaver
- if($fornavn.length -eq 2)
- {
- $brukernavn = $fornavn.substring(0,2)
- }else
- {
- $brukernavn = $fornavn.substring(0,3)
- }
- if($etternavn.length -eq 2)
- {
- $brukernavn += $etternavn.substring(0,2)
- }else
- {
- $brukernavn += $etternavn.substring(0,3)
- }
- # Telleren bli satt til en. Den skal brukes hvis
- # brukernavnet allerede er i bruk
- $teller = 1
- # Bruker Format-Brukernavn
- $navn = Format-Brukernavn $brukernavn
- $MidlertidigBrukernavn = $navn
- # Hent ut alle brukere
- $finnes = Invoke-Command -Session $SesjonADServer `
- -ScriptBlock {
- Get-ADUser -Filter *}
- do{
- $finnes = $finnes |
- where {$_.SamAccountName -eq $MidlertidigBrukernavn}
- # Hvis brukernavnet ikke er i bruk
- if($finnes -eq $null){
- $sjekk = $false
- $navn = $MidlertidigBrukernavn
- }else{
- # Hvis det er to like brukernavn vil teller bli lagt
- # til slutten av brukernavnet for å skille de.
- $MidlertidigBrukernavn = $navn + $teller
- #inkrementerer teller slik at en får et annet
- # brukernavn neste gang.
- $teller +=1
- }
- }while($sjekk -eq $true)
- return $navn
- }
- function Set-LinjeNummer {
- param (
- [parameter(mandatory=$true)]
- [Object[]]$Objekt
- )
- # Legger til linjenummer på objektet
- $Nummer = 1
- # Gjennomgår hver rad i objekt
- $Objekt | ForEach-Object {
- # Legger til linjenummer som egenskap for hver rad
- Add-Member -InputObject $_ -MemberType NoteProperty `
- -Name Nummer -Value $Nummer
- # Inkrementerer linjenummer
- $Nummer++
- }
- # Hvert objekt har nå et linjenummer
- return $objekt
- }
- Function Write-ADBruker {
- param($bruker)
- # Legg til linjenummer
- Set-LinjeNummer $bruker
- Write-Host ($bruker | Format-Table `
- -Property nummer, `
- @{expression={$_.UserPrincipalName};Label='UserName'}, `
- name, enabled | out-string)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement