Files
dms/2_GPO_und_Fileserver_Setup.ps1
T

153 lines
8.2 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# ByteTrail GmbH GPO & File Server Setup Script
# Domäne: bytetrail.local
# Ausführen auf: SRV-DC01 (bzw. Fileserver) als Domain Admin
# ============================================================
Import-Module GroupPolicy -ErrorAction Stop
#region KONFIGURATION
$Domain = "byte.trail"
$NetBIOSDom = "BYTE" # NetBIOS Name für Rechtevergabe
$DomainDN = "DC=byte,DC=trail"
$FreigabePfad = "E:\Freigabe"
#endregion
Write-Host "`n=== ByteTrail GPO & Fileserver Setup gestartet ===" -ForegroundColor Cyan
# ============================================================
# TEIL 1: GRUPPENRICHTLINIEN (GPOs)
# ============================================================
Write-Host "`n[1/2] Konfiguriere Gruppenrichtlinien (GPOs)..." -ForegroundColor Yellow
$GpoSecurityName = "ByteTrail_Base_Security"
$GpoDrivesName = "ByteTrail_Mapped_Drives"
# 1.1 Basis-Sicherheit (Domänenweit)
if (!(Get-GPO -Name $GpoSecurityName -ErrorAction SilentlyContinue)) {
try {
$gpoSec = New-GPO -Name $GpoSecurityName -Comment "Basis-Sicherheitsrichtlinien (Bildschirmsperre etc.)"
New-GPLink -Name $GpoSecurityName -Target $DomainDN -LinkEnabled Yes | Out-Null
# ECHTE RICHTLINIEN SETZEN: Automatische Bildschirmsperre nach 15 Minuten (900 Sekunden) erzwingen
Set-GPRegistryValue -Name $GpoSecurityName -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName "ScreenSaveActive" -Type String -Value "1" | Out-Null
Set-GPRegistryValue -Name $GpoSecurityName -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName "ScreenSaverIsSecure" -Type String -Value "1" | Out-Null
Set-GPRegistryValue -Name $GpoSecurityName -Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" -ValueName "ScreenSaveTimeOut" -Type String -Value "900" | Out-Null
Write-Host " [+] GPO '$GpoSecurityName' erstellt, konfiguriert und mit Domäne verknüpft." -ForegroundColor Green
} catch {
Write-Host " [!] Fehler bei GPO '$GpoSecurityName': $($_.Exception.Message)" -ForegroundColor Red
}
} else {
Write-Host " [~] GPO '$GpoSecurityName' existiert bereits." -ForegroundColor Gray
}
# 1.2 Netzlaufwerke GPO-Hülle (Verknüpft mit allen relevanten OUs)
if (!(Get-GPO -Name $GpoDrivesName -ErrorAction SilentlyContinue)) {
try {
New-GPO -Name $GpoDrivesName -Comment "Automatische Netzlaufwerk-Zuweisungen fuer Fachabteilungen" | Out-Null
# Mit den OUs aus Skript 1 verknüpfen
New-GPLink -Name $GpoDrivesName -Target "OU=Geschaeftsfuehrung,$DomainDN" -LinkEnabled Yes | Out-Null
New-GPLink -Name $GpoDrivesName -Target "OU=Sales,$DomainDN" -LinkEnabled Yes | Out-Null
New-GPLink -Name $GpoDrivesName -Target "OU=Marketing,$DomainDN" -LinkEnabled Yes | Out-Null
New-GPLink -Name $GpoDrivesName -Target "OU=Service,$DomainDN" -LinkEnabled Yes | Out-Null
Write-Host " [+] GPO '$GpoDrivesName' erstellt und mit OUs verknüpft." -ForegroundColor Green
} catch {
Write-Host " [!] Fehler bei GPO '$GpoDrivesName': $($_.Exception.Message)" -ForegroundColor Red
}
} else {
Write-Host " [~] GPO '$GpoDrivesName' existiert bereits." -ForegroundColor Gray
}
# ============================================================
# TEIL 2: FILESERVER ORDNER & BERECHTIGUNGEN (NTFS)
# ============================================================
Write-Host "`n[2/2] Konfiguriere Ordnerstruktur & NTFS-Berechtigungen auf $FreigabePfad..." -ForegroundColor Yellow
# 2.1 Hauptordner erstellen und Freigabe (SMB) einrichten
if (!(Test-Path $FreigabePfad)) {
New-Item -Path $FreigabePfad -ItemType Directory -Force | Out-Null
}
try {
Get-SmbShare -Name "Freigabe" -ErrorAction Stop | Out-Null
Write-Host " [~] SMB-Freigabe 'Freigabe' existiert bereits." -ForegroundColor Gray
} catch {
New-SmbShare -Name "Freigabe" -Path $FreigabePfad -FullAccess "$NetBIOSDom\Domain Admins" -ChangeAccess "$NetBIOSDom\Domain Users" | Out-Null
Write-Host " [+] SMB-Freigabe 'Freigabe' erstellt." -ForegroundColor Green
}
# Vererbung am Hauptordner deaktivieren
$AclBase = Get-Acl $FreigabePfad
$AclBase.SetAccessRuleProtection($true, $true)
Set-Acl -Path $FreigabePfad -AclObject $AclBase
# 2.2 Definition der Unterordner und zugehöriger Gruppen
$Folders = @(
@{ Name = "Geschaeftsfuehrung"; Group = "GRP-GF-VOLLZUGRIFF" }
@{ Name = "Sales"; Group = "GRP-SALES-FILES" }
@{ Name = "Marketing"; Group = "GRP-MKT-FILES" }
@{ Name = "Service"; Group = "GRP-SVC-FILES" }
)
$RightsModify = [System.Security.AccessControl.FileSystemRights]::Modify
$RightsRead = [System.Security.AccessControl.FileSystemRights]::ReadAndExecute
$RightsFull = [System.Security.AccessControl.FileSystemRights]::FullControl
$Inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
$Propagation = [System.Security.AccessControl.PropagationFlags]::None
$Allow = [System.Security.AccessControl.AccessControlType]::Allow
$RuleAdmin = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\GRP-ADMINS", $RightsFull, $Inheritance, $Propagation, $Allow)
$RuleGFRead = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\GRP-GF-VOLLZUGRIFF", $RightsRead, $Inheritance, $Propagation, $Allow)
# 2.3 Abteilungsordner anlegen und Rechte setzen
foreach ($Folder in $Folders) {
$FolderPath = "$FreigabePfad\$($Folder.Name)"
if (!(Test-Path $FolderPath)) { New-Item -Path $FolderPath -ItemType Directory -Force | Out-Null }
$Acl = Get-Acl -Path $FolderPath
$Acl.SetAccessRuleProtection($true, $false) # Entfernt alte vererbte Rechte
# Admins bekommen Vollzugriff
$Acl.AddAccessRule($RuleAdmin)
# Fachabteilung bekommt Ändern-Rechte
$RuleDept = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\$($Folder.Group)", $RightsModify, $Inheritance, $Propagation, $Allow)
$Acl.AddAccessRule($RuleDept)
# GF bekommt Leserechte (außer in ihrem eigenen Ordner)
if ($Folder.Name -ne "Geschaeftsfuehrung") {
$Acl.AddAccessRule($RuleGFRead)
}
Set-Acl -Path $FolderPath -AclObject $Acl
Write-Host " [+] Rechte für Ordner '$($Folder.Name)' erfolgreich gesetzt." -ForegroundColor Green
}
# 2.4 Öffentlicher Austausch-Ordner (Alle dürfen lesen/schreiben)
$AustauschPath = "$FreigabePfad\Austausch"
if (!(Test-Path $AustauschPath)) { New-Item -Path $AustauschPath -ItemType Directory -Force | Out-Null }
$AclAustausch = Get-Acl -Path $AustauschPath
$AclAustausch.SetAccessRuleProtection($true, $false)
$RuleAll = New-Object System.Security.AccessControl.FileSystemAccessRule("$NetBIOSDom\Domain Users", $RightsModify, $Inheritance, $Propagation, $Allow)
$AclAustausch.AddAccessRule($RuleAll)
$AclAustausch.AddAccessRule($RuleAdmin)
Set-Acl -Path $AustauschPath -AclObject $AclAustausch
Write-Host " [+] Rechte für Ordner 'Austausch' erfolgreich gesetzt." -ForegroundColor Green
# ============================================================
# ZUSAMMENFASSUNG
# ============================================================
Write-Host "`n=== Setup abgeschlossen ===" -ForegroundColor Cyan
Write-Host "GPOs:" -ForegroundColor White
Write-Host "- Base_Security (mit aktivem Screenlock nach 15min) wurde auf die Domäne angewendet."
Write-Host "- Mapped_Drives wurde erstellt und mit den OUs verknüpft."
Write-Host "`nFileserver:" -ForegroundColor White
Write-Host "- Ordnerstruktur unter $FreigabePfad wurde angelegt und SMB-Freigabe aktiviert."
Write-Host "- NTFS-Berechtigungen (Sicherheit) wurden strikt nach dem AGDLP-Prinzip gesetzt."
Write-Host "`nHINWEIS ZU NETZLAUFWERKEN:" -ForegroundColor Yellow
Write-Host "Um die Laufwerke (z.B. Laufwerk S: für Sales) tatsächlich bei den Nutzern einzublenden, öffne nun 'gpmc.msc' (Gruppenrichtlinienverwaltung), bearbeite die GPO 'ByteTrail_Mapped_Drives' und füge unter Benutzerkonfiguration -> Einstellungen -> Windows-Einstellungen -> Laufwerkzuordnungen die Pfade (z.B. \\SRV-DC01\Freigabe\Sales) hinzu."
Write-Host ""