Maven_super_30_LeseTolkeKode_6 - itnett/FTD02N GitHub Wiki

La oss lage en rekke mindre Python-skript som dekker flere emner relatert til programmering og sikkerhet, samtidig som de også tar for seg spesifikke temaer fra utdanningen din som IoT, cybersikkerhet, nettverk og virtualisering. Disse skriptene vil berøre de grunnleggende aspektene ved programmering (som datastrukturer, OOP, API-er osv.) samtidig som de gir praktisk innsikt i emner som er relevante for din utdanning.

1. Programstruktur og Grunnleggende Sikkerhetsprinsipper

Dette skriptet viser en enkel strukturert tilnærming for å håndtere grunnleggende sikkerhetskontroller som brukervalgte passord og hash-koding for lagring.

Se skriptet her

2. Objektorientert Programmering og IoT Enhetssimulering

Her lager vi en klasse for en IoT-enhet, som for eksempel en temperatursensor. Dette skriptet simulerer innsamling av data fra en sensor og sender dem til en API-tjeneste.

Se skriptet her

3. Filbehandling og Logging for Servervedlikehold

Dette skriptet simulerer logging av systemhendelser som kan brukes i servervedlikehold og feilsøking.

Se skriptet her

4. Nettverkstopologier og Simuleringsverktøy med GUI

Dette skriptet bruker tkinter for å lage et GUI som visualiserer en enkel nettverkstopologi med LAN/WAN.

Se skriptet her

5. Datasikkerhet og Kryptering

Dette skriptet demonstrerer hvordan man kan bruke kryptering for å sikre sensitive data, for eksempel passord eller filer.

Se skriptet her

6. Protokoller og API-integrasjon

Dette skriptet viser hvordan man kan bruke et API for å integrere en IoT-enhet med en skytjeneste som Azure IoT Hub.

Se skriptet her

7. Virtualisering og Sikkerhet i Hypervisorer

Dette skriptet overvåker virtuelle maskiner på en hypervisor og sjekker ressursbruk.

Se skriptet her

8. Bruk av SQL for Databasesystemer og Backup

Dette skriptet viser hvordan man kan bruke SQL til å sikkerhetskopiere data i en database.

Se skriptet her

9. Automation in Linux System Administration

Dette skriptet demonstrerer hvordan man kan bruke Python for å automatisere brukeradministrasjon på en Linux-server.

Se skriptet her

10. Automated Security Audits

Dette skriptet gjennomfører en enkel sikkerhetsrevisjon av en Linux-server ved å sjekke konfigurasjoner og loggfiler.

Se skriptet her

Sammendrag

Disse skriptene gir en rekke praktiske eksempler som dekker både grunnleggende og avanserte emner innen programmering og IT-drift. De er laget for å hjelpe deg med å forstå hvordan ulike programmeringsteknikker kan brukes i praktiske scenarier som er relevante for din utdanning, inkludert IoT, cybersikkerhet, nettverksadministrasjon, virtualisering, og databaser.

Lesing, Tolkning og Forklaring av Koden

La oss gå gjennom koden som ble presentert tidligere og deretter forklare hvordan den kan utvides for å dekke samtlige temaer og læringsmål fra programmeringskurset.

1. Grunnleggende Sikkerhetsprinsipper

  • Koden: Det første skriptet handler om hashing av passord, som er en grunnleggende sikkerhetsmetode.
  • Forklaring: Hashing er en enveis funksjon som konverterer et passord til en fast lengde streng som ikke kan konverteres tilbake. Dette sikrer at passordene lagres sikkert.
  • Utvidelse: Dette skriptet kan utvides til å inkludere salting, der en tilfeldig verdi (salt) legges til passordet før hashing, for å forbedre sikkerheten. Skriptet kan også legge til funksjoner for å håndtere flere brukere og lagre hashed passord i en database.

2. Objektorientert Programmering og IoT Enhetssimulering

  • Koden: Dette skriptet lager en IoTDevice-klasse som simulerer innsamling og sending av data fra en IoT-enhet.
  • Forklaring: Objektorientert programmering (OOP) er en programmeringsmodell basert på objekter og klasser. Skriptet viser hvordan man kan definere en klasse med attributter (f.eks. navn, type) og metoder (f.eks. generate_data, send_data).
  • Utvidelse: For å dekke UML (Unified Modeling Language), kan vi lage diagrammer som beskriver klassen og dens interaksjoner med andre klasser. Skriptet kan også utvides til å inkludere flere sensorer, lagring av data i en database, og komplekse beslutningsalgoritmer for databehandling.

3. Filbehandling og Logging for Servervedlikehold

  • Koden: Skriptet logger systemhendelser til en tekstfil, som kan brukes til vedlikehold og feilsøking.
  • Forklaring: Filbehandling innebærer å åpne, lese, skrive og lukke filer. Logging er en metode for å lagre informasjon om hendelser som skjer under kjøring av et program.
  • Utvidelse: Dette skriptet kan utvides til å støtte ulike loggnivåer (info, warning, error), og loggene kan også lagres i et databaseformat som SQLite eller sendes til en ekstern logging-tjeneste.

4. Nettverkstopologier og Simuleringsverktøy med GUI

  • Koden: Skriptet bruker tkinter til å lage et GUI som visualiserer en enkel nettverkstopologi.
  • Forklaring: GUI-utvikling er viktig for å lage interaktive brukergrensesnitt. tkinter er et standard Python-bibliotek for å lage enkle GUI-er. Nettverkstopologier kan visualiseres for å forstå hvordan nettverksenheter er koblet sammen.
  • Utvidelse: For å utvikle et mer avansert GUI, kan du integrere flere nettverkselementer, tillate brukeren å interagere med topologien, og inkludere simulering av nettverkstrafikk og feil.

5. Datasikkerhet og Kryptering

  • Koden: Skriptet viser hvordan man bruker cryptography-biblioteket til å kryptere og dekryptere data.
  • Forklaring: Kryptering er prosessen med å konvertere data til en form som ikke kan leses uten en dekrypteringsnøkkel. Dette sikrer konfidensialiteten til data.
  • Utvidelse: Utvid dette skriptet til å inkludere forskjellige krypteringsalgoritmer (AES, RSA), nøkkelhåndtering, og implementer funksjoner for å sikre kommunikasjon mellom IoT-enheter og servere.

6. Protokoller og API-integrasjon

  • Koden: Skriptet sender data fra en IoT-enhet til en API-tjeneste som Azure IoT Hub.
  • Forklaring: API-er lar ulike programvarekomponenter kommunisere med hverandre. Dette skriptet simulerer sending av data fra en enhet til en skytjeneste.
  • Utvidelse: Skriptet kan utvides til å støtte flere API-er, håndtere feil i kommunikasjon, og inkludere autentisering og autorisering for å sikre at bare autoriserte enheter kan sende data.

7. Virtualisering og Sikkerhet i Hypervisorer

  • Koden: Dette skriptet overvåker ressursbruken til virtuelle maskiner på en hypervisor.
  • Forklaring: Virtualisering lar deg kjøre flere virtuelle maskiner på en enkelt fysisk maskin. Dette skriptet viser hvordan man kan overvåke ressursbruken til disse maskinene.
  • Utvidelse: Skriptet kan utvides til å inkludere flere typer overvåkning, som nettverkstrafikk, lagringsbruk, og alarmfunksjoner som varsler administratorer om eventuelle problemer.

8. SQL for Databasesystemer og Backup

  • Koden: Skriptet bruker SQL for å sikkerhetskopiere data i en SQLite-database.
  • Forklaring: SQL (Structured Query Language) brukes til å administrere og manipulere relasjonsdatabaser. Dette skriptet viser hvordan man kan lage en sikkerhetskopi av en database.
  • Utvidelse: Utvid skriptet til å inkludere flere databaseoperasjoner som normalisering, indeksering, og brukeradministrasjon. Implementer også automatiske sikkerhetskopieringsfunksjoner med tidsplanlegging.

9. Automation in Linux System Administration

  • Koden: Dette skriptet viser hvordan man kan automatisere brukeradministrasjon på en Linux-server ved å bruke Python.
  • Forklaring: Automatisering i systemadministrasjon sparer tid og reduserer menneskelige feil. Skriptet bruker subprocess for å kjøre Linux-kommandoer for å opprette og slette brukere.
  • Utvidelse: Utvid skriptet til å inkludere flere administrasjonsoppgaver som sikkerhetsoppdateringer, backup, og oppsett av nettverkstjenester som DNS og DHCP.

10. Automated Security Audits

  • Koden: Dette skriptet gjennomfører en enkel sikkerhetsrevisjon av en Linux-server.
  • Forklaring: Sikkerhetsrevisjoner er kritiske for å sikre at et system er beskyttet mot trusler. Dette skriptet sjekker statusen til brannmuren og logger mislykkede påloggingsforsøk.
  • Utvidelse: Skriptet kan utvides til å inkludere flere revisjonskontroller som sårbarhetsskanning, sjekking av konfigurasjonsfiler for sikkerhetshull, og automatisert utbedring av funn.

Hvordan Utvide Skriptene for å Dekke Samtlige Tema og Læringsmål

For å dekke alle de angitte temaene og læringsmålene i programmeringskurset, kan hvert skript utvides og kombineres med mer komplekse funksjoner som er relevante for kursinnholdet.

  • Programstrukturer og Datastrukturer: Lag mer komplekse datastrukturer som køer, stakker, lister, og trær, og vis hvordan disse kan brukes i nettverksalgoritmer eller databehandling i IoT-enheter.

  • Bibliotek: Utforsk flere Python-biblioteker som numpy for numeriske beregninger, pandas for dataanalyse, og matplotlib for datavisualisering. Implementer funksjoner for å behandle og analysere store datamengder fra sensorer eller serverlogger.

  • Funksjoner og metoder: Bygg skript med komplekse funksjoner som inkapsulerer algoritmer for risikostyring eller nettverksoptimalisering.

  • Debugging, testing og unntaksbehandling: Implementer enhetstesting ved hjelp av unittest eller pytest, og legg til unntaksbehandling for å sikre at skriptene håndterer feil på en kontrollert måte.

  • API: Integrer skriptene med flere eksterne API-er, som værdata for IoT-enheter, eller automatiseringsverktøy for serveradministrasjon.

  • GUI: Utvikle mer komplekse GUI-er for overvåking og administrasjon av nettverk, databaser og IoT-enheter, og inkluder sanntidsovervåkning og kontrollpaneler.

  • Filbehandling: Utvid filbehandlingsskriptene for å inkludere backup, komprimering, og sikkerhetskontroller på filer som inneholder sensitiv informasjon.

  • Datasikkerhet: Bygg flere sikkerhetsfunksjoner, inkludert nettverkssikkerhet, kryptering av datakommunikasjon, og sikre lagring av sensitive data.

Ved å kombinere og utvide disse skriptene, vil du være i stand til å dekke et bredt spekter av emner og ferdigheter som er nødvendige for å oppnå læringsmålene i programmeringskurset.

Nå skal vi optimalisere skriptene for å dekke alle læringsmålene, samtidig som vi legger til detaljert linje-for-linje-kommentering for å hjelpe deg med å lese og tolke koden.

1. Grunnleggende Sikkerhetsprinsipper - Utvidet Hashing Skript

Se skriptet her

Forklaring:

  • generate_salt: Genererer en salt-verdi som legges til passordet før det hashes. Dette sikrer at like passord ikke gir samme hash-verdi.
  • hash_password: Kombinerer saltet med passordet og bruker SHA-256 hashing.
  • check_password: Sammenligner den lagrede hash-verdien med den nyopprettede hash-verdien fra det oppgitte passordet.

2. Objektorientert Programmering og IoT Enhetssimulering - Utvidet med UML og Flere Sensortyper

Se skriptet her

Forklaring:

  • generate_data: Genererer data basert på sensortypen. Her utvidet med flere typer sensorer (f.eks. trykksensor).
  • send_data: Sender data til et API-endepunkt med tillegg av tidsstempel.
  • main: Oppretter flere sensorer, genererer data og sender data til et API.

3. Filbehandling og Logging for Servervedlikehold - Utvidet med SQLite Logging

Se skriptet her

Forklaring:

  • SQLite Logging: I stedet for en tekstfil, logger vi hendelser i en SQLite-database for bedre strukturering og spørringsmuligheter.
  • log_event: Legger til hendelser i databasen med tidsstempel.
  • read_logs: Leser loggene fra databasen og skriver dem ut.

4. Nettverkstopologier og Simuleringsverktøy med GUI - Utvidet med Flere Nettverkskomponenter

Se skriptet her

Forklaring:

  • draw_network: Utvidet for å inkludere flere nettverkskomponenter (f.eks. flere arbeidsstasjoner).
  • GUI: Opprettelse av et grafisk brukergrensesnitt for å visualisere en enkel nettverkstopologi med tkinter.

5. Datasikkerhet og Kryptering - Utvidet med RSA Kryptering

Se skriptet her

Forklaring:

  • RSA Kryptering: RSA brukes til asymmetrisk kryptering, hvor en offentlig nøkkel krypterer data, og en privat nøkkel dekrypterer dem.
  • generate_rsa_keypair: Genererer et nøkkelpar for kryptering og dekryptering.
  • encrypt_data_rsa / decrypt_data_rsa: Krypterer og dekrypterer meldinger med RSA.

6. Protokoller og API-integrasjon - Utvidet med Autentisering og Feilhåndtering

Se skriptet her

Forklaring:

  • Autentisering: API-kall er utvidet til å inkludere API-nøkler for autentisering.
  • Feilhåndtering: Bruker try-except for å håndtere feil under dataoverføring.

7. Virtualisering og Sikkerhet i Hypervisorer - Utvidet med Alarmfunksjoner

Se skriptet her

Forklaring:

  • Alarmfunksjoner: Skriptet overvåker ressursbruk og sender en alarm via e-post hvis ressursbruken overstiger en terskelverdi.
  • send_alarm_email: Sender en alarmmelding hvis en virtuell maskin bruker for mye ressurser.

8. SQL for Databasesystemer og Backup - Utvidet med Brukeradministrasjon

Se skriptet her

Forklaring:

  • Brukeradministrasjon: Utvidet for å inkludere opprettelse av brukere i databasen.
  • create_user: Oppretter en ny bruker i en SQLite-database og håndterer unike brukernavn.

9. Automation in Linux System Administration - Utvidet med Sikkerhetsoppdateringer

Se skriptet her

Forklaring:

  • Systemoppdateringer: Scriptet er utvidet til å inkludere systemoppdateringer som en del av administrasjonsoppgaver.
  • update_system: Kjør sikkerhetsoppdateringer på systemet.

10. Automated Security Audits - Utvidet med Sårbarhetsskanning

Se skriptet her

Forklaring:

  • Sårbarhetsskanning: Scriptet er utvidet til å inkludere en enkel sårbarhetsskanning ved hjelp av Lynis.
  • vulnerability_scan: Utfører systemrevisjon og sjekker etter sikkerhetshull.

Oppsummering

Disse utvidede skriptene dekker nå et bredt spekter av emner innenfor programmering og IT-drift, og de er kommentert linje-for-linje for å hjelpe deg med å forstå og tolke koden. Hvert skript bygger på de grunnleggende prinsippene i programmering, fra datastrukturer og funksjoner til objekter og GUI-utvikling, samtidig som de integrerer mer avanserte konsepter som kryptering, API-integrasjon, og automatiserte sikkerhetsrevisjoner. Dette gir en omfattende læringsopplevelse som oppfyller læringsmålene i kurset ditt.

Her er eksempler på hvordan de samme skriptene kan skrives om i både Bash og PowerShell. Jeg vil vise hvordan vi kan implementere tilsvarende funksjonalitet i begge språk, med tilhørende kommentarer for å forklare koden.

1. Grunnleggende Sikkerhetsprinsipper - Hashing Skript

Bash

Se skriptet her

PowerShell

# Generer en salt-verdi
function Generate-Salt {
    $saltBytes = New-Object byte[] 16
    [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($saltBytes)
    return [Convert]::ToBase64String($saltBytes)
}

# Hash et passord med SHA-256 og salt
function Hash-Password {
    param (
        [string]$password,
        [string]$salt
    )
    $combined = $salt + $password
    $sha256 = [System.Security.Cryptography.SHA256]::Create()
    $hash = $sha256.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($combined))
    return [BitConverter]::ToString($hash) -replace '-', ''
}

# Sjekk om passordet matcher hash
function Check-Password {
    param (
        [string]$storedHash,
        [string]$providedPassword,
        [string]$salt
    )
    $hash = Hash-Password -password $providedPassword -salt $salt
    return $storedHash -eq $hash
}

# Hovedskript
function Main {
    Write-Host "Welcome to Secure Password Storage!"
    $password = Read-Host "Enter a password to store"

    $salt = Generate-Salt
    $storedHash = Hash-Password -password $password -salt $salt

    Write-Host "Your hashed password is: $storedHash"

    $testPassword = Read-Host "Re-enter your password to check"
    if (Check-Password -storedHash $storedHash -providedPassword $testPassword -salt $salt) {
        Write-Host "Password matched!"
    }
    else {
        Write-Host "Password did not match!"
    }
}

Main

2. Objektorientert Programmering og IoT Enhetssimulering

Bash

Bash har ikke innebygd støtte for objektorientert programmering som Python. Derfor bruker vi funksjoner og assosiative arrays for å simulere OOP.

Se skriptet her

PowerShell

PowerShell har støtte for objektorientert programmering, så vi kan opprette klasser direkte.

class IoTDevice {
    [string]$Name
    [string]$DeviceType
    [float]$Data
    [string]$Timestamp

    IoTDevice([string]$name, [string]$deviceType) {
        $this.Name = $name
        $this.DeviceType = $deviceType
    }

    [void]GenerateData() {
        switch ($this.DeviceType) {
            "Temperature Sensor" { $this.Data = Get-Random -Minimum 20.0 -Maximum 30.0 }
            "Humidity Sensor" { $this.Data = Get-Random -Minimum 30.0 -Maximum 70.0 }
            "Pressure Sensor" { $this.Data = Get-Random -Minimum 950.0 -Maximum 1050.0 }
        }
        $this.Timestamp = Get-Date -Format "yyyy-MM-ddTHH:mm:ss"
    }

    [void]SendData([string]$apiUrl) {
        Write-Host "Sending data to $apiUrl..."
        Write-Host "Device: $($this.Name)"
        Write-Host "Type: $($this.DeviceType)"
        Write-Host "Data: $($this.Data)"
        Write-Host "Timestamp: $($this.Timestamp)"
    }
}

# Hovedskript
function Main {
    $sensor = [IoTDevice]::new("TempSensor1", "Temperature Sensor")
    $sensor.GenerateData()
    $sensor.SendData("http://example.com/api/data")
}

Main

3. Filbehandling og Logging for Servervedlikehold

Bash

Se skriptet her

PowerShell

$logDB = "server_log.db"

# Oppretter SQLite-tabell for logging hvis den ikke finnes
if (-not (Test-Path $logDB)) {
    $conn = New-Object System.Data.SQLite.SQLiteConnection
    $conn.ConnectionString = "Data Source=$logDB;Version=3;"
    $conn.Open()
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp TEXT, event TEXT);"
    $cmd.ExecuteNonQuery()
    $conn.Close()
}

# Logger en hendelse til SQLite
function Log-Event {
    param (
        [string]$event
    )
    $timestamp = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss")
    $conn = New-Object System.Data.SQLite.SQLiteConnection
    $conn.ConnectionString = "Data Source=$logDB;Version=3;"
    $conn.Open()
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "INSERT INTO logs (timestamp, event) VALUES ('$timestamp', '$event');"
    $cmd.ExecuteNonQuery()
    $conn.Close()
}

# Leser loggene fra SQLite-databasen
function Read-Logs {
    $conn = New-Object System.Data.SQLite.SQLiteConnection
    $conn.ConnectionString = "Data Source=$logDB;Version=3;"
    $conn.Open()
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "SELECT * FROM logs;"
    $reader = $cmd.ExecuteReader()
    while ($reader.Read()) {
        Write-Host "ID: $($reader['id']) Timestamp: $($reader['timestamp']) Event: $($reader['event'])"
    }
    $conn.Close

()
}

# Hovedskript
function Main {
    Write-Host "Server Maintenance Log"
    
    # Logger en hendelse
    Log-Event "System backup completed successfully."
    
    # Leser loggene
    Read-Logs
}

Main

4. Nettverkstopologier og Simuleringsverktøy med GUI

GUI-utvikling er ikke like vanlig i Bash, men vi kan skrive ut tekstbaserte nettverkstopologier. I PowerShell kan vi lage et enklere GUI.

Bash (tekstbasert)

Se skriptet her

PowerShell (enkelt GUI)

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = "Network Topology Simulation"
$form.Size = New-Object System.Drawing.Size(800, 600)

$canvas = New-Object System.Windows.Forms.Panel
$canvas.Dock = 'Fill'
$canvas.BackColor = [System.Drawing.Color]::White
$form.Controls.Add($canvas)

$graphics = $canvas.CreateGraphics()

# Tegner Router
$graphics.FillRectangle([System.Drawing.Brushes]::LightBlue, 50, 250, 100, 100)
$graphics.DrawString("Router", [System.Drawing.Font]::new("Arial", 12), [System.Drawing.Brushes]::Black, 70, 290)

# Tegner Switch
$graphics.FillEllipse([System.Drawing.Brushes]::LightGreen, 200, 200, 100, 100)
$graphics.DrawString("Switch", [System.Drawing.Font]::new("Arial", 12), [System.Drawing.Brushes]::Black, 230, 240)

# Tegner Server
$graphics.FillRectangle([System.Drawing.Brushes]::LightCoral, 350, 100, 100, 100)
$graphics.DrawString("Server", [System.Drawing.Font]::new("Arial", 12), [System.Drawing.Brushes]::Black, 380, 140)

# Tegner Workstation 1
$graphics.FillRectangle([System.Drawing.Brushes]::LightYellow, 350, 300, 100, 100)
$graphics.DrawString("Workstation 1", [System.Drawing.Font]::new("Arial", 12), [System.Drawing.Brushes]::Black, 355, 340)

# Tegner Workstation 2
$graphics.FillRectangle([System.Drawing.Brushes]::LightYellow, 500, 300, 100, 100)
$graphics.DrawString("Workstation 2", [System.Drawing.Font]::new("Arial", 12), [System.Drawing.Brushes]::Black, 505, 340)

# Kobler sammen komponenter
$graphics.DrawLine([System.Drawing.Pens]::Black, 150, 300, 200, 250)
$graphics.DrawLine([System.Drawing.Pens]::Black, 300, 250, 350, 150)
$graphics.DrawLine([System.Drawing.Pens]::Black, 300, 250, 350, 350)
$graphics.DrawLine([System.Drawing.Pens]::Black, 450, 350, 500, 350)

$form.ShowDialog()

5. Datasikkerhet og Kryptering - RSA Kryptering

Bash (simulert RSA med OpenSSL)

Se skriptet her

PowerShell (ekte RSA med .NET)

# Generer RSA nøkkelpar
$RSA = [System.Security.Cryptography.RSA]::Create(2048)

$privateKey = $RSA.ExportRSAPrivateKey()
$publicKey = $RSA.ExportRSAPublicKey()

[System.IO.File]::WriteAllBytes("private_key.bin", $privateKey)
[System.IO.File]::WriteAllBytes("public_key.bin", $publicKey)

# Krypter en melding
$message = [System.Text.Encoding]::UTF8.GetBytes("This is a secret message.")
$encryptedMessage = $RSA.Encrypt($message, [System.Security.Cryptography.RSAEncryptionPadding]::OaepSHA256)
[System.IO.File]::WriteAllBytes("encrypted_message.bin", $encryptedMessage)

# Dekrypter meldingen
$decryptedMessage = $RSA.Decrypt($encryptedMessage, [System.Security.Cryptography.RSAEncryptionPadding]::OaepSHA256)
[System.Text.Encoding]::UTF8.GetString($decryptedMessage)

6. Protokoller og API-integrasjon

Bash

Se skriptet her

PowerShell

# Send data til et API med autentisering
function Send-DataToApi {
    param (
        [string]$apiUrl,
        [string]$apiKey,
        [hashtable]$data
    )

    $jsonData = $data | ConvertTo-Json
    $headers = @{
        "Authorization" = "Bearer $apiKey"
        "Content-Type"  = "application/json"
    }

    Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $jsonData
}

# Hovedskript
function Main {
    $apiUrl = "https://your-iot-hub.azure-devices.net/devices/MyIoTDevice/messages/events?api-version=2018-06-30"
    $apiKey = "your_api_key_here"
    $data = @{
        temperature = 22.5
        humidity = 60
    }

    Send-DataToApi -apiUrl $apiUrl -apiKey $apiKey -data $data
}

Main

7. Virtualisering og Sikkerhet i Hypervisorer

Bash

Se skriptet her

PowerShell

# Overvåker ressursbruken til virtuelle maskiner
function Monitor-VirtualMachines {
    $vms = Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
    foreach ($vm in $vms) {
        Write-Host "Process: $($vm.Name)"
        Write-Host "  CPU Usage: $($vm.CPU)%"
        Write-Host "  Memory Usage: $([math]::Round($vm.WorkingSet / 1MB, 2)) MB"
        Write-Host ""
        
        if ($vm.CPU -gt 80) {
            Send-AlarmEmail -vmName $vm.Name -cpuUsage $vm.CPU -memoryUsage $([math]::Round($vm.WorkingSet / 1MB, 2))
        }
    }
}

# Sende e-post alarm
function Send-AlarmEmail {
    param (
        [string]$vmName,
        [float]$cpuUsage,
        [float]$memoryUsage
    )

    $smtpServer = "smtp.yourcompany.com

"
    $message = "Warning! $vmName is using $cpuUsage% CPU and $memoryUsage MB memory."
    $subject = "High Resource Usage Alert for $vmName"
    $from = "[email protected]"
    $to = "[email protected]"

    $mailMessage = New-Object system.net.mail.mailmessage
    $mailMessage.From = $from
    $mailMessage.To.Add($to)
    $mailMessage.Subject = $subject
    $mailMessage.Body = $message

    $smtp = New-Object Net.Mail.SmtpClient($smtpServer)
    $smtp.Send($mailMessage)

    Write-Host "Alert email sent."
}

# Hovedskript
function Main {
    Monitor-VirtualMachines
}

Main

8. SQL for Databasesystemer og Backup

Bash

Se skriptet her

PowerShell

$DBName = "example.db"
$BackupDir = "backups"

# Sikkerhetskopier database
function Backup-Database {
    $timestamp = (Get-Date).ToString("yyyyMMddHHmmss")
    $backupName = Join-Path $BackupDir "backup_$timestamp.db"

    $conn = New-Object System.Data.SQLite.SQLiteConnection
    $conn.ConnectionString = "Data Source=$DBName;Version=3;"
    $conn.Open()
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "BACKUP TO '$backupName';"
    $cmd.ExecuteNonQuery()
    $conn.Close()

    Write-Host "Backup created: $backupName"
}

# Opprett bruker
function Create-User {
    param (
        [string]$username,
        [string]$password
    )

    $conn = New-Object System.Data.SQLite.SQLiteConnection
    $conn.ConnectionString = "Data Source=$DBName;Version=3;"
    $conn.Open()

    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "INSERT INTO users (username, password) VALUES ('$username', '$password');"
    $cmd.ExecuteNonQuery()

    $conn.Close()

    Write-Host "User $username created."
}

# Hovedskript
function Main {
    if (-not (Test-Path $BackupDir)) {
        New-Item -ItemType Directory -Path $BackupDir
    }
    
    # Opprett brukertabellen hvis den ikke finnes
    $conn = New-Object System.Data.SQLite.SQLiteConnection
    $conn.ConnectionString = "Data Source=$DBName;Version=3;"
    $conn.Open()

    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT);"
    $cmd.ExecuteNonQuery()

    $conn.Close()

    # Opprett bruker og lag backup
    Create-User -username "newuser" -password "password123"
    Backup-Database
}

Main

9. Automation in Linux System Administration

Bash

Se skriptet her

PowerShell

# Opprett bruker
function Create-User {
    param (
        [string]$username
    )
    Start-Process "net" "user $username /add" -NoNewWindow -Wait
    Write-Host "User $username created successfully."
}

# Slett bruker
function Delete-User {
    param (
        [string]$username
    )
    Start-Process "net" "user $username /delete" -NoNewWindow -Wait
    Write-Host "User $username deleted successfully."
}

# Oppdater system (Windows Update)
function Update-System {
    Start-Process "powershell" "-Command Get-WindowsUpdate -Install" -NoNewWindow -Wait
    Write-Host "System updated successfully."
}

# Hovedskript
function Main {
    $action = Read-Host "Enter 'create', 'delete' for user or 'update' to update system"

    if ($action -eq "create" -or $action -eq "delete") {
        $username = Read-Host "Enter username"
        
        if ($action -eq "create") {
            Create-User -username $username
        }
        elseif ($action -eq "delete") {
            Delete-User -username $username
        }
    }
    elseif ($action -eq "update") {
        Update-System
    }
    else {
        Write-Host "Invalid action."
    }
}

Main

10. Automated Security Audits

Bash

Se skriptet her

PowerShell

# Sjekk brannmurstatus (Windows Firewall)
function Check-FirewallStatus {
    Get-NetFirewallProfile | Select-Object Name, Enabled
}

# Sjekk mislykkede påloggingsforsøk
function Check-FailedLogins {
    Get-EventLog -LogName Security -InstanceId 4625 | Select-Object TimeGenerated, Message
}

# Sårbarhetsskanning med sfc (System File Checker)
function Vulnerability-Scan {
    sfc /scannow
}

# Hovedskript
function Main {
    Write-Host "Running Security Audit..."
    Check-FirewallStatus
    Check-FailedLogins
    Vulnerability-Scan
    Write-Host "Security Audit Completed."
}

Main

Oppsummering

Disse skriptene demonstrerer hvordan man kan implementere lignende funksjoner som de Python-skriptene, men ved å bruke Bash og PowerShell. Hvert skript er utformet for å være så likt som mulig Python-eksemplene, med hensyn til språkets spesifikasjoner og muligheter.

Disse eksemplene dekker en rekke ulike emner innen IT-drift og programmering, inkludert sikkerhet, nettverk, filbehandling, databaser, automatisering, og mer. Hver funksjon er kommentert for å forklare formålet med koden, og hvordan den kan tilpasses til dine behov.