From e066bbee664048389d9688b73b464091e35adbfd Mon Sep 17 00:00:00 2001 From: Ole Andre Werdal Date: Thu, 18 Jun 2026 11:16:46 +0200 Subject: [PATCH] Legg til full struktur og maler --- .editorconfig | 21 +++++ .gitignore | 30 +++++++ CHANGELOG.md | 8 ++ CONTRIBUTING.md | 61 +++++++++++++ _shared/README.md | 10 +++ _shared/assets/.gitkeep | 1 + _shared/functions/.gitkeep | 1 + _shared/modules/.gitkeep | 1 + cove/README.md | 10 +++ cove/backup-jobs/.gitkeep | 1 + cove/monitoring/.gitkeep | 1 + cove/reporting/.gitkeep | 1 + docs/README.md | 4 + microsoft-365/README.md | 14 +++ microsoft-365/entra-id/.gitkeep | 1 + microsoft-365/exchange-online/.gitkeep | 1 + microsoft-365/reporting/.gitkeep | 1 + microsoft-365/security-compliance/.gitkeep | 1 + microsoft-365/sharepoint-onedrive/.gitkeep | 1 + microsoft-365/teams/.gitkeep | 1 + ninjarmm/README.md | 12 +++ ninjarmm/automations/.gitkeep | 1 + ninjarmm/monitoring/.gitkeep | 1 + ninjarmm/reporting/.gitkeep | 1 + ninjarmm/software-deployment/.gitkeep | 1 + sentinelone/README.md | 11 +++ sentinelone/api/.gitkeep | 1 + sentinelone/deployment/.gitkeep | 1 + sentinelone/reporting/.gitkeep | 1 + sentinelone/response-actions/.gitkeep | 1 + templates/SCRIPT_README_TEMPLATE.md | 37 ++++++++ templates/template.ps1 | 69 +++++++++++++++ templates/template.py | 58 +++++++++++++ templates/template.sh | 51 +++++++++++ windows-server/README.md | 12 +++ windows-server/deployment/.gitkeep | 1 + .../maintenance/Get-DiskSpaceReport.ps1 | 87 +++++++++++++++++++ windows-server/monitoring/.gitkeep | 1 + windows-server/reporting/.gitkeep | 1 + windows-server/security-hardening/.gitkeep | 1 + 40 files changed, 519 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 _shared/README.md create mode 100644 _shared/assets/.gitkeep create mode 100644 _shared/functions/.gitkeep create mode 100644 _shared/modules/.gitkeep create mode 100644 cove/README.md create mode 100644 cove/backup-jobs/.gitkeep create mode 100644 cove/monitoring/.gitkeep create mode 100644 cove/reporting/.gitkeep create mode 100644 docs/README.md create mode 100644 microsoft-365/README.md create mode 100644 microsoft-365/entra-id/.gitkeep create mode 100644 microsoft-365/exchange-online/.gitkeep create mode 100644 microsoft-365/reporting/.gitkeep create mode 100644 microsoft-365/security-compliance/.gitkeep create mode 100644 microsoft-365/sharepoint-onedrive/.gitkeep create mode 100644 microsoft-365/teams/.gitkeep create mode 100644 ninjarmm/README.md create mode 100644 ninjarmm/automations/.gitkeep create mode 100644 ninjarmm/monitoring/.gitkeep create mode 100644 ninjarmm/reporting/.gitkeep create mode 100644 ninjarmm/software-deployment/.gitkeep create mode 100644 sentinelone/README.md create mode 100644 sentinelone/api/.gitkeep create mode 100644 sentinelone/deployment/.gitkeep create mode 100644 sentinelone/reporting/.gitkeep create mode 100644 sentinelone/response-actions/.gitkeep create mode 100644 templates/SCRIPT_README_TEMPLATE.md create mode 100644 templates/template.ps1 create mode 100644 templates/template.py create mode 100644 templates/template.sh create mode 100644 windows-server/README.md create mode 100644 windows-server/deployment/.gitkeep create mode 100644 windows-server/maintenance/Get-DiskSpaceReport.ps1 create mode 100644 windows-server/monitoring/.gitkeep create mode 100644 windows-server/reporting/.gitkeep create mode 100644 windows-server/security-hardening/.gitkeep diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a4f1b17 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[*.{ps1,psm1,psd1}] +indent_size = 4 + +[*.sh] +indent_size = 2 + +[*.py] +indent_size = 4 + +[*.{yml,yaml,json,md}] +indent_size = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3b750b --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Hemmeligheter - skal ALDRI committes +*.secret +*.key +*.pem +*.pfx +.env +.env.* +secrets.* +credentials.* + +# Logger og midlertidige filer +*.log +*.tmp +tmp/ +out/ + +# PowerShell +*.psd1.bak + +# Python +__pycache__/ +*.pyc +.venv/ +venv/ + +# OS / editor +.DS_Store +Thumbs.db +.vscode/ +.idea/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..91dff0d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# Endringslogg + +Alle vesentlige endringer i scriptbiblioteket noteres her (nyeste øverst). + +Format: `ÅÅÅÅ-MM-DD – [plattform] kort beskrivelse (initialer)` + +## Ikke utgitt +- 2026-06-18 – [struktur] Opprettet biblioteket med mappestruktur, maler og eksempel (W-tek) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..8a288e8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,61 @@ +# Bidragsguide – W-tek Scriptbibliotek + +Følg disse konvensjonene så biblioteket holder seg ryddig, trygt og enkelt å bruke. + +## 1. Navnekonvensjoner + +| Språk | Konvensjon | Eksempel | +|--------------|------------------------------------|-----------------------------------| +| PowerShell | `Verb-Noun.ps1` (godkjent verb, PascalCase) | `Get-DiskSpaceReport.ps1` | +| Bash/Shell | `kebab-case.sh` | `rotate-log-files.sh` | +| Python | `snake_case.py` | `export_user_report.py` | +| Batch/CMD | `kebab-case.cmd` | `map-network-drives.cmd` | + +- Bruk **godkjente PowerShell-verb** (`Get-Verb`): Get, Set, New, Remove, Invoke, Update, Enable, Disable osv. +- Navnet skal beskrive hva scriptet gjør, ikke hvilket system (systemet framgår av mappen). + +## 2. Mappeplassering + +Plattform på toppnivå, funksjon som undermappe (se `README.md`). +- Enkelt script = én fil i riktig mappe. +- Sammensatt script (flere filer, moduler, ressurser) = egen undermappe med `README.md` basert på `templates/SCRIPT_README_TEMPLATE.md`. + +## 3. Obligatorisk header + +Hvert script **skal** ha en utfylt header (bruk malen for språket). Minimumsfelt: + +- Kort beskrivelse (synopsis) og en lengre beskrivelse +- Alle parametere/argumenter dokumentert +- Minst ett kjøre-eksempel +- **Forfatter**, **opprettet-dato**, **versjon** +- **Plattform/krav** (f.eks. PowerShell 5.1/7, moduler, rettigheter) +- **Endringslogg** (dato, versjon, hva og hvem) +- **Tags** for søk (f.eks. `m365, entra, rapportering`) + +## 4. Sikkerhet (viktig) + +- **Ingen hemmeligheter i koden eller historikken.** Aldri passord, API-nøkler, tokens, sertifikater eller kundedata. +- Hent hemmeligheter via parametere, miljøvariabler eller en hemmelighetsløsning (f.eks. Windows Credential Manager, Azure Key Vault). +- Spesielt for **NinjaRMM / SentinelOne / Cove / Graph**: API-nøkler skal aldri committes. Bruk plassholdere som `$env:S1_API_TOKEN`. +- Skulle en hemmelighet ved et uhell bli committet: rull nøkkelen umiddelbart og gi beskjed – historikken må renses. + +## 5. Kvalitet og kjøring + +- Skriv **idempotente** script der det er mulig. +- Endringsscript skal støtte tørrkjøring: PowerShell `-WhatIf`/`-Confirm`, Bash/Python en `--dry-run`-flagg. +- Håndter feil eksplisitt (`try/catch`, `set -euo pipefail`, `try/except`) og gi tydelige exit-koder. +- Logg det som er relevant, men aldri hemmeligheter. + +## 6. Git-arbeidsflyt + +1. Lag en branch: `feature/` eller `fix/`. +2. Commit-melding: kort og beskrivende, gjerne `[plattform] handling` – f.eks. `[m365] legg til lisensrapport`. +3. Åpne en **pull request**. Minst én kollega gjennomgår før merge (firekontroll – relevant for ISO 9001/27001). +4. Oppdater `CHANGELOG.md` ved større tillegg/endringer. + +## 7. Testkrav + +Før merge skal scriptet være testet. Beskriv i PR-en (eller scriptets README): +- Hva som er testet +- Hvilken plattform/versjon det er testet på +- Eventuelle forutsetninger/begrensninger diff --git a/_shared/README.md b/_shared/README.md new file mode 100644 index 0000000..67b4374 --- /dev/null +++ b/_shared/README.md @@ -0,0 +1,10 @@ +# Delte ressurser + +Gjenbrukbar kode og ressurser på tvers av plattformene. + +**Undermapper** +- `modules/` – PowerShell-moduler (.psm1) til import i flere script +- `functions/` – frittstående hjelpefunksjoner/snutter +- `assets/` – maler, ikoner, konfig-eksempler (uten hemmeligheter) + +Legg felles logikk her i stedet for å duplisere den i hvert script. diff --git a/_shared/assets/.gitkeep b/_shared/assets/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/_shared/assets/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/_shared/functions/.gitkeep b/_shared/functions/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/_shared/functions/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/_shared/modules/.gitkeep b/_shared/modules/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/_shared/modules/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/cove/README.md b/cove/README.md new file mode 100644 index 0000000..eceb9f2 --- /dev/null +++ b/cove/README.md @@ -0,0 +1,10 @@ +# Cove (Cove Data Protection) + +Script for overvåking og rapportering av Cove-backup (N-able). + +**Undermapper** +- `backup-jobs/` – jobbstyring og konfigurasjon +- `monitoring/` – status, feilede jobber, varsling +- `reporting/` – backup- og gjenopprettingsrapporter + +SIKKERHET: API-/innloggingslegitimasjon leveres som miljøvariabler/parametere – aldri i koden. diff --git a/cove/backup-jobs/.gitkeep b/cove/backup-jobs/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/cove/backup-jobs/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/cove/monitoring/.gitkeep b/cove/monitoring/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/cove/monitoring/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/cove/reporting/.gitkeep b/cove/reporting/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/cove/reporting/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..3695ef1 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,4 @@ +# Dokumentasjon + +Overordnet dokumentasjon for scriptbiblioteket: konvensjoner, beslutninger og +eventuelle driftsnotater. Se også `../README.md` og `../CONTRIBUTING.md`. diff --git a/microsoft-365/README.md b/microsoft-365/README.md new file mode 100644 index 0000000..c598361 --- /dev/null +++ b/microsoft-365/README.md @@ -0,0 +1,14 @@ +# Microsoft 365 + +Script mot M365-tjenester via PowerShell-moduler (Microsoft.Graph, ExchangeOnlineManagement, +MicrosoftTeams, PnP.PowerShell) eller Graph API. + +**Undermapper** +- `entra-id/` – brukere, grupper, lisenser, betinget tilgang +- `exchange-online/` – postbokser, regler, distribusjonslister +- `teams/` – team, policyer, kanaler +- `sharepoint-onedrive/` – nettsteder, deling, lagring +- `security-compliance/` – Defender, revisjon, DLP, samsvar +- `reporting/` – lisens-, bruks- og sikkerhetsrapporter + +SIKKERHET: App-registreringer/secrets og tokens skal aldri committes – bruk parametere/miljøvariabler. diff --git a/microsoft-365/entra-id/.gitkeep b/microsoft-365/entra-id/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/microsoft-365/entra-id/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/microsoft-365/exchange-online/.gitkeep b/microsoft-365/exchange-online/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/microsoft-365/exchange-online/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/microsoft-365/reporting/.gitkeep b/microsoft-365/reporting/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/microsoft-365/reporting/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/microsoft-365/security-compliance/.gitkeep b/microsoft-365/security-compliance/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/microsoft-365/security-compliance/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/microsoft-365/sharepoint-onedrive/.gitkeep b/microsoft-365/sharepoint-onedrive/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/microsoft-365/sharepoint-onedrive/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/microsoft-365/teams/.gitkeep b/microsoft-365/teams/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/microsoft-365/teams/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/ninjarmm/README.md b/ninjarmm/README.md new file mode 100644 index 0000000..71e60a3 --- /dev/null +++ b/ninjarmm/README.md @@ -0,0 +1,12 @@ +# NinjaRMM + +Script som distribueres og kjøres via NinjaRMM på endepunkter/servere. + +**Undermapper** +- `automations/` – planlagte/utløste automasjoner +- `monitoring/` – tilstandssjekker som rapporterer tilbake til Ninja +- `software-deployment/` – installasjon/oppdatering av programvare +- `reporting/` – uttrekk og statusrapporter + +Merk: Ninja kjører ofte script som SYSTEM. Test rettigheter og exit-koder nøye. +API-nøkler/legitimasjon hentes via Ninja sine egne variabler eller miljøvariabler – aldri hardkodet. diff --git a/ninjarmm/automations/.gitkeep b/ninjarmm/automations/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/ninjarmm/automations/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/ninjarmm/monitoring/.gitkeep b/ninjarmm/monitoring/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/ninjarmm/monitoring/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/ninjarmm/reporting/.gitkeep b/ninjarmm/reporting/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/ninjarmm/reporting/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/ninjarmm/software-deployment/.gitkeep b/ninjarmm/software-deployment/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/ninjarmm/software-deployment/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/sentinelone/README.md b/sentinelone/README.md new file mode 100644 index 0000000..29730da --- /dev/null +++ b/sentinelone/README.md @@ -0,0 +1,11 @@ +# SentinelOne + +Script for utrulling, respons og rapportering mot SentinelOne, inkl. API-bruk. + +**Undermapper** +- `deployment/` – agent-installasjon/avinstallasjon +- `response-actions/` – isolering, opprydding, respons +- `reporting/` – trussel-/agent-rapporter +- `api/` – gjenbrukbare API-kall (Mgmt API) + +SIKKERHET: `S1_API_TOKEN` og console-URL leveres som miljøvariabler/parametere – aldri i koden. diff --git a/sentinelone/api/.gitkeep b/sentinelone/api/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/sentinelone/api/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/sentinelone/deployment/.gitkeep b/sentinelone/deployment/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/sentinelone/deployment/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/sentinelone/reporting/.gitkeep b/sentinelone/reporting/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/sentinelone/reporting/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/sentinelone/response-actions/.gitkeep b/sentinelone/response-actions/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/sentinelone/response-actions/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/templates/SCRIPT_README_TEMPLATE.md b/templates/SCRIPT_README_TEMPLATE.md new file mode 100644 index 0000000..c41b0be --- /dev/null +++ b/templates/SCRIPT_README_TEMPLATE.md @@ -0,0 +1,37 @@ +# + +Kort beskrivelse av hva scriptet/mappen løser. + +## Formål +Hva scriptet gjør og når du bruker det. + +## Forutsetninger +- Plattform/versjon: +- Rettigheter: +- Hemmeligheter: + +## Bruk +``` + +``` + +## Parametere +| Parameter | Påkrevd | Beskrivelse | +|-----------|---------|-------------| +| `...` | Ja/Nei | ... | + +## Eksempler +``` + + +``` + +## Testet +- Dato: ÅÅÅÅ-MM-DD +- Testet på: +- Forfatter: + +## Endringslogg +| Dato | Versjon | Endring | Av | +|------|---------|---------|----| +| ÅÅÅÅ-MM-DD | 1.0.0 | Første versjon | | diff --git a/templates/template.ps1 b/templates/template.ps1 new file mode 100644 index 0000000..9cfe3c7 --- /dev/null +++ b/templates/template.ps1 @@ -0,0 +1,69 @@ +<# +.SYNOPSIS + Kort, én-setnings beskrivelse av hva scriptet gjør. + +.DESCRIPTION + Lengre beskrivelse: hva scriptet løser, hvordan det fungerer, og eventuelle + forutsetninger eller bivirkninger man bør være klar over. + +.PARAMETER Eksempelparameter + Beskriv hva parameteren styrer, og gyldige verdier. + +.PARAMETER WhatIf + Tørrkjør uten å gjøre endringer (støttes via SupportsShouldProcess). + +.EXAMPLE + .\Verb-Noun.ps1 -Eksempelparameter "verdi" + Beskriv hva eksempelet gjør. + +.EXAMPLE + .\Verb-Noun.ps1 -Eksempelparameter "verdi" -WhatIf + Viser hva som ville blitt gjort, uten å endre noe. + +.NOTES + Forfatter : Fornavn Etternavn (initialer) + Opprettet : ÅÅÅÅ-MM-DD + Versjon : 1.0.0 + Plattform : Windows Server 2019/2022 | M365 | NinjaRMM | SentinelOne | Cove + Krav : PowerShell 5.1+ (eller 7+), moduler: + Rettigheter : + Tags : tag1, tag2, tag3 + + Endringslogg: + ÅÅÅÅ-MM-DD 1.0.0 Første versjon (initialer) + + SIKKERHET: Aldri hemmeligheter i koden. Bruk parametere eller miljøvariabler, + f.eks. $env:API_TOKEN. +#> + +#Requires -Version 5.1 +# #Requires -Modules Microsoft.Graph # avkommenter ved behov + +[CmdletBinding(SupportsShouldProcess = $true)] +param( + [Parameter(Mandatory = $true)] + [string] $Eksempelparameter +) + +begin { + $ErrorActionPreference = 'Stop' + Set-StrictMode -Version Latest + Write-Verbose "Starter $($MyInvocation.MyCommand.Name)" +} + +process { + try { + if ($PSCmdlet.ShouldProcess($Eksempelparameter, "Beskriv handlingen")) { + # --- Hovedlogikk her --- + Write-Output "Kjører mot: $Eksempelparameter" + } + } + catch { + Write-Error "Feilet: $($_.Exception.Message)" + exit 1 + } +} + +end { + Write-Verbose "Ferdig." +} diff --git a/templates/template.py b/templates/template.py new file mode 100644 index 0000000..ec4a737 --- /dev/null +++ b/templates/template.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Kort, én-setnings beskrivelse av hva scriptet gjør. + +Lengre beskrivelse av formål, virkemåte og forutsetninger. + +Bruk: + python snake_case.py --eksempel "verdi" [--dry-run] + +Eksempel: + python snake_case.py --eksempel "verdi" --dry-run + +Metadata: + Forfatter : Fornavn Etternavn (initialer) + Opprettet : ÅÅÅÅ-MM-DD + Versjon : 1.0.0 + Plattform : + Krav : Python 3.9+, pakker: + Tags : tag1, tag2 + +Endringslogg: + ÅÅÅÅ-MM-DD 1.0.0 Første versjon (initialer) + +SIKKERHET: Aldri hemmeligheter i koden. Les dem fra miljøvariabler, +f.eks. os.environ["API_TOKEN"]. +""" +from __future__ import annotations + +import argparse +import logging +import sys + +logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") +log = logging.getLogger(__name__) + + +def parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + p.add_argument("--eksempel", required=True, help="Beskriv parameteren.") + p.add_argument("--dry-run", action="store_true", help="Tørrkjør uten endringer.") + return p.parse_args() + + +def main() -> int: + args = parse_args() + try: + if args.dry_run: + log.info("[dry-run] Ville kjørt mot: %s", args.eksempel) + return 0 + # --- Hovedlogikk her --- + log.info("Kjører mot: %s", args.eksempel) + return 0 + except Exception as exc: # noqa: BLE001 + log.error("Feilet: %s", exc) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/templates/template.sh b/templates/template.sh new file mode 100644 index 0000000..9784188 --- /dev/null +++ b/templates/template.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# ============================================================================= +# Navn : kebab-case.sh +# Synopsis : Kort, én-setnings beskrivelse av hva scriptet gjør. +# Beskrivelse: Lengre beskrivelse av formål og virkemåte. +# +# Bruk : ./kebab-case.sh [--dry-run] +# Eksempel : ./kebab-case.sh --dry-run /sti/til/noe +# +# Forfatter : Fornavn Etternavn (initialer) +# Opprettet : ÅÅÅÅ-MM-DD +# Versjon : 1.0.0 +# Plattform : Linux/macOS | +# Krav : bash 4+, +# Tags : tag1, tag2 +# +# Endringslogg: +# ÅÅÅÅ-MM-DD 1.0.0 Første versjon (initialer) +# +# SIKKERHET: Aldri hemmeligheter i koden. Bruk miljøvariabler, f.eks. $API_TOKEN. +# ============================================================================= +set -euo pipefail + +DRY_RUN=0 + +usage() { + grep '^# ' "$0" | sed 's/^# \{0,1\}//' + exit "${1:-0}" +} + +# --- Argumenthåndtering --- +while [ $# -gt 0 ]; do + case "$1" in + --dry-run) DRY_RUN=1; shift ;; + -h|--help) usage 0 ;; + *) ARG="$1"; shift ;; + esac +done + +: "${ARG:?Mangler argument. Se --help}" + +main() { + if [ "$DRY_RUN" -eq 1 ]; then + echo "[dry-run] Ville kjørt mot: $ARG" + return 0 + fi + # --- Hovedlogikk her --- + echo "Kjører mot: $ARG" +} + +main "$@" diff --git a/windows-server/README.md b/windows-server/README.md new file mode 100644 index 0000000..c85a17e --- /dev/null +++ b/windows-server/README.md @@ -0,0 +1,12 @@ +# Windows Server + +Script for drift, vedlikehold og herding av Windows Server (2016/2019/2022). + +**Undermapper** +- `maintenance/` – opprydding, diskvedlikehold, oppdateringer, omstart-rutiner +- `monitoring/` – helsesjekker, tjenestestatus, ytelse +- `security-hardening/` – baseline/herding, GPO, lokal sikkerhetspolicy +- `deployment/` – rolle-/funksjonsinstallasjon, konfigurasjon +- `reporting/` – inventar- og statusrapporter + +Hovedspråk: PowerShell. Se `../templates/template.ps1`. diff --git a/windows-server/deployment/.gitkeep b/windows-server/deployment/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/windows-server/deployment/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/windows-server/maintenance/Get-DiskSpaceReport.ps1 b/windows-server/maintenance/Get-DiskSpaceReport.ps1 new file mode 100644 index 0000000..7c24a7a --- /dev/null +++ b/windows-server/maintenance/Get-DiskSpaceReport.ps1 @@ -0,0 +1,87 @@ +<# +.SYNOPSIS + Lager en rapport over diskbruk på en eller flere Windows-servere. + +.DESCRIPTION + Henter ledig og total kapasitet for alle faste disker via CIM, og markerer + volumer som har mindre ledig plass enn en gitt terskel. Resultatet kan vises + i konsollet eller eksporteres til CSV. Skriveoperasjonen (CSV) støtter -WhatIf. + +.PARAMETER ComputerName + En eller flere maskiner å sjekke. Standard er den lokale maskinen. + +.PARAMETER ThresholdPercent + Terskel for ledig plass i prosent. Volumer under terskelen flagges. Standard 15. + +.PARAMETER CsvPath + Valgfri sti for CSV-eksport. Utelates for kun konsoll-utskrift. + +.EXAMPLE + .\Get-DiskSpaceReport.ps1 + Viser diskbruk for den lokale serveren med standardterskel (15 %). + +.EXAMPLE + .\Get-DiskSpaceReport.ps1 -ComputerName SRV01,SRV02 -ThresholdPercent 10 -CsvPath C:\Temp\disk.csv + Sjekker to servere med 10 % terskel og eksporterer til CSV. + +.NOTES + Forfatter : W-tek Drift (WT) + Opprettet : 2026-06-18 + Versjon : 1.0.0 + Plattform : Windows Server 2016/2019/2022 + Krav : PowerShell 5.1+, WinRM for fjernkjøring + Rettigheter : Lokal admin på målmaskinene + Tags : windows-server, disk, vedlikehold, rapportering + + Endringslogg: + 2026-06-18 1.0.0 Første versjon (WT) +#> + +#Requires -Version 5.1 + +[CmdletBinding(SupportsShouldProcess = $true)] +param( + [string[]] $ComputerName = $env:COMPUTERNAME, + [ValidateRange(1, 99)] + [int] $ThresholdPercent = 15, + [string] $CsvPath +) + +begin { + $ErrorActionPreference = 'Stop' + Set-StrictMode -Version Latest + $results = [System.Collections.Generic.List[object]]::new() +} + +process { + foreach ($computer in $ComputerName) { + try { + $disks = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" -ComputerName $computer + foreach ($disk in $disks) { + $freePct = [math]::Round(($disk.FreeSpace / $disk.Size) * 100, 1) + $results.Add([pscustomobject]@{ + Server = $computer + Drive = $disk.DeviceID + FreeGB = [math]::Round($disk.FreeSpace / 1GB, 1) + TotalGB = [math]::Round($disk.Size / 1GB, 1) + FreePercent = $freePct + BelowThreshold = $freePct -lt $ThresholdPercent + }) + } + } + catch { + Write-Warning "Kunne ikke hente data fra ${computer}: $($_.Exception.Message)" + } + } +} + +end { + $results | Sort-Object FreePercent | Format-Table -AutoSize + + if ($CsvPath) { + if ($PSCmdlet.ShouldProcess($CsvPath, "Skriv CSV-rapport")) { + $results | Export-Csv -Path $CsvPath -NoTypeInformation -Encoding UTF8 + Write-Output "Rapport skrevet til $CsvPath" + } + } +} diff --git a/windows-server/monitoring/.gitkeep b/windows-server/monitoring/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/windows-server/monitoring/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/windows-server/reporting/.gitkeep b/windows-server/reporting/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/windows-server/reporting/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold. diff --git a/windows-server/security-hardening/.gitkeep b/windows-server/security-hardening/.gitkeep new file mode 100644 index 0000000..a3b6299 --- /dev/null +++ b/windows-server/security-hardening/.gitkeep @@ -0,0 +1 @@ +# Behold mappen i git. Slett denne fila naar mappen faar innhold.