Legg til full struktur og maler
This commit is contained in:
parent
c89e9ca909
commit
e066bbee66
40 changed files with 519 additions and 0 deletions
21
.editorconfig
Normal file
21
.editorconfig
Normal file
|
|
@ -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
|
||||||
30
.gitignore
vendored
Normal file
30
.gitignore
vendored
Normal file
|
|
@ -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/
|
||||||
8
CHANGELOG.md
Normal file
8
CHANGELOG.md
Normal file
|
|
@ -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)
|
||||||
61
CONTRIBUTING.md
Normal file
61
CONTRIBUTING.md
Normal file
|
|
@ -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/<kort-beskrivelse>` eller `fix/<kort-beskrivelse>`.
|
||||||
|
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
|
||||||
10
_shared/README.md
Normal file
10
_shared/README.md
Normal file
|
|
@ -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.
|
||||||
1
_shared/assets/.gitkeep
Normal file
1
_shared/assets/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
_shared/functions/.gitkeep
Normal file
1
_shared/functions/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
_shared/modules/.gitkeep
Normal file
1
_shared/modules/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
10
cove/README.md
Normal file
10
cove/README.md
Normal file
|
|
@ -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.
|
||||||
1
cove/backup-jobs/.gitkeep
Normal file
1
cove/backup-jobs/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
cove/monitoring/.gitkeep
Normal file
1
cove/monitoring/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
cove/reporting/.gitkeep
Normal file
1
cove/reporting/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
4
docs/README.md
Normal file
4
docs/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Dokumentasjon
|
||||||
|
|
||||||
|
Overordnet dokumentasjon for scriptbiblioteket: konvensjoner, beslutninger og
|
||||||
|
eventuelle driftsnotater. Se også `../README.md` og `../CONTRIBUTING.md`.
|
||||||
14
microsoft-365/README.md
Normal file
14
microsoft-365/README.md
Normal file
|
|
@ -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.
|
||||||
1
microsoft-365/entra-id/.gitkeep
Normal file
1
microsoft-365/entra-id/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
microsoft-365/exchange-online/.gitkeep
Normal file
1
microsoft-365/exchange-online/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
microsoft-365/reporting/.gitkeep
Normal file
1
microsoft-365/reporting/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
microsoft-365/security-compliance/.gitkeep
Normal file
1
microsoft-365/security-compliance/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
microsoft-365/sharepoint-onedrive/.gitkeep
Normal file
1
microsoft-365/sharepoint-onedrive/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
microsoft-365/teams/.gitkeep
Normal file
1
microsoft-365/teams/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
12
ninjarmm/README.md
Normal file
12
ninjarmm/README.md
Normal file
|
|
@ -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.
|
||||||
1
ninjarmm/automations/.gitkeep
Normal file
1
ninjarmm/automations/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
ninjarmm/monitoring/.gitkeep
Normal file
1
ninjarmm/monitoring/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
ninjarmm/reporting/.gitkeep
Normal file
1
ninjarmm/reporting/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
ninjarmm/software-deployment/.gitkeep
Normal file
1
ninjarmm/software-deployment/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
11
sentinelone/README.md
Normal file
11
sentinelone/README.md
Normal file
|
|
@ -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.
|
||||||
1
sentinelone/api/.gitkeep
Normal file
1
sentinelone/api/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
sentinelone/deployment/.gitkeep
Normal file
1
sentinelone/deployment/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
sentinelone/reporting/.gitkeep
Normal file
1
sentinelone/reporting/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
sentinelone/response-actions/.gitkeep
Normal file
1
sentinelone/response-actions/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
37
templates/SCRIPT_README_TEMPLATE.md
Normal file
37
templates/SCRIPT_README_TEMPLATE.md
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
# <Scriptnavn>
|
||||||
|
|
||||||
|
Kort beskrivelse av hva scriptet/mappen løser.
|
||||||
|
|
||||||
|
## Formål
|
||||||
|
Hva scriptet gjør og når du bruker det.
|
||||||
|
|
||||||
|
## Forutsetninger
|
||||||
|
- Plattform/versjon: <f.eks. PowerShell 7, Microsoft.Graph-modul>
|
||||||
|
- Rettigheter: <f.eks. Global Reader, lokal admin>
|
||||||
|
- Hemmeligheter: <hvilke, og hvordan de leveres – f.eks. $env:API_TOKEN>
|
||||||
|
|
||||||
|
## Bruk
|
||||||
|
```
|
||||||
|
<eksempelkommando>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parametere
|
||||||
|
| Parameter | Påkrevd | Beskrivelse |
|
||||||
|
|-----------|---------|-------------|
|
||||||
|
| `...` | Ja/Nei | ... |
|
||||||
|
|
||||||
|
## Eksempler
|
||||||
|
```
|
||||||
|
<eksempel 1>
|
||||||
|
<eksempel 2>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testet
|
||||||
|
- Dato: ÅÅÅÅ-MM-DD
|
||||||
|
- Testet på: <miljø/versjon>
|
||||||
|
- Forfatter: <initialer>
|
||||||
|
|
||||||
|
## Endringslogg
|
||||||
|
| Dato | Versjon | Endring | Av |
|
||||||
|
|------|---------|---------|----|
|
||||||
|
| ÅÅÅÅ-MM-DD | 1.0.0 | Første versjon | <init> |
|
||||||
69
templates/template.ps1
Normal file
69
templates/template.ps1
Normal file
|
|
@ -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: <f.eks. Microsoft.Graph>
|
||||||
|
Rettigheter : <f.eks. lokal admin / Global Reader>
|
||||||
|
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."
|
||||||
|
}
|
||||||
58
templates/template.py
Normal file
58
templates/template.py
Normal file
|
|
@ -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 : <tjeneste / API>
|
||||||
|
Krav : Python 3.9+, pakker: <f.eks. requests, msal>
|
||||||
|
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())
|
||||||
51
templates/template.sh
Normal file
51
templates/template.sh
Normal file
|
|
@ -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] <argument>
|
||||||
|
# Eksempel : ./kebab-case.sh --dry-run /sti/til/noe
|
||||||
|
#
|
||||||
|
# Forfatter : Fornavn Etternavn (initialer)
|
||||||
|
# Opprettet : ÅÅÅÅ-MM-DD
|
||||||
|
# Versjon : 1.0.0
|
||||||
|
# Plattform : Linux/macOS | <tjeneste>
|
||||||
|
# Krav : bash 4+, <evt. verktøy: jq, curl>
|
||||||
|
# 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 "$@"
|
||||||
12
windows-server/README.md
Normal file
12
windows-server/README.md
Normal file
|
|
@ -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`.
|
||||||
1
windows-server/deployment/.gitkeep
Normal file
1
windows-server/deployment/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
87
windows-server/maintenance/Get-DiskSpaceReport.ps1
Normal file
87
windows-server/maintenance/Get-DiskSpaceReport.ps1
Normal file
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1
windows-server/monitoring/.gitkeep
Normal file
1
windows-server/monitoring/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
windows-server/reporting/.gitkeep
Normal file
1
windows-server/reporting/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
1
windows-server/security-hardening/.gitkeep
Normal file
1
windows-server/security-hardening/.gitkeep
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Behold mappen i git. Slett denne fila naar mappen faar innhold.
|
||||||
Loading…
Reference in a new issue