Initialer Import der Synology Scripts

This commit is contained in:
root
2026-08-05 08:43:57 +02:00
commit 5e32a7c411
404 changed files with 79932 additions and 0 deletions
+471
View File
@@ -0,0 +1,471 @@
############################################################
# PART 4.1
#
# PART 4.1 Betriebssystem prüfen
############################################################
function Test-OperatingSystem {
Write-Log "Prüfe Betriebssystem"
try {
$OS = Get-CimInstance Win32_OperatingSystem
}
catch {
Stop-Installation "Betriebssystem konnte nicht ermittelt werden."
}
Write-Log "Betriebssystem : $($OS.Caption)"
Write-Log "Version : $($OS.Version)"
Write-Log "Build : $($OS.BuildNumber)"
if($OS.ProductType -ne 3)
{
Stop-Installation "Dieses Script unterstützt nur Windows Server."
}
switch -Regex ($OS.Caption)
{
"2022"
{
Write-Log "Windows Server 2022 erkannt."
}
"2025"
{
Write-Log "Windows Server 2025 erkannt."
}
default
{
Stop-Installation "Nicht unterstütztes Betriebssystem."
}
}
}
############################################################
# PART 4.2
#
# PART 4.2 PowerShell-Version prüfen
############################################################
function Test-PowerShellVersion {
Write-Log "Prüfe PowerShell"
$PSVersion = $PSVersionTable.PSVersion
Write-Log "PowerShell Version: $PSVersion"
if($PSVersion.Major -lt 5)
{
Stop-Installation "PowerShell 5.1 oder höher wird benötigt."
}
if($PSVersion.Major -ge 7)
{
Write-Log "PowerShell 7 erkannt."
}
else
{
Write-Log "PowerShell 5.x erkannt."
}
}
############################################################
# PART 4.3
#
# PART 4.3 CPU prüfen
############################################################
function Test-CPU {
Write-Log "Prüfe CPU"
$CPU = Get-CimInstance Win32_Processor
Write-Log "CPU : $($CPU.Name)"
Write-Log "Kerne : $($CPU.NumberOfCores)"
Write-Log "Logische CPUs : $($CPU.NumberOfLogicalProcessors)"
if($CPU.NumberOfLogicalProcessors -lt 2)
{
Stop-Installation "Mindestens 2 logische Prozessoren erforderlich."
}
}
############################################################
# PART 4.4
#
# PART 4.4 RAM prüfen
############################################################
function Test-Memory {
Write-Log "Prüfe Arbeitsspeicher"
$RAM = (Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory
$RAMGB = [Math]::Round($RAM / 1GB,2)
Write-Log "RAM : $RAMGB GB"
if($RAMGB -lt 8)
{
Stop-Installation "Mindestens 8 GB RAM erforderlich."
}
}
############################################################
# PART 4.5
#
# PART 4.5 Laufwerke prüfen
############################################################
function Test-Drive {
param(
[Parameter(Mandatory)]
[string]$DriveLetter,
[Parameter(Mandatory)]
[int]$MinimumFreeGB
)
Write-Log "Prüfe Laufwerk $DriveLetter"
$Drive = Get-CimInstance Win32_LogicalDisk |
Where-Object DeviceID -eq $DriveLetter
if(!$Drive)
{
Stop-Installation "Laufwerk $DriveLetter existiert nicht."
}
$Free = [Math]::Round($Drive.FreeSpace / 1GB,2)
Write-Log "Freier Speicher : $Free GB"
if($Free -lt $MinimumFreeGB)
{
Stop-Installation "Zu wenig Speicher auf $DriveLetter."
}
}
############################################################
# PART 4.6
#
# PART 4.6 Installationspfade prüfen
############################################################
function Test-InstallationPaths {
Write-Log "Prüfe Installationslaufwerke"
Test-Drive "C:" 10
Test-Drive "F:" 20
Test-Drive "H:" 20
}
############################################################
# PART 4.7
#
# PART 4.7 Pending Reboot
############################################################
function Test-PendingReboot {
Write-Log "Prüfe Pending Reboot"
$Pending = $false
if(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending")
{
$Pending = $true
}
if(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired")
{
$Pending = $true
}
if(Get-ItemProperty `
"HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" `
-ErrorAction SilentlyContinue |
Select-Object -ExpandProperty PendingFileRenameOperations `
-ErrorAction SilentlyContinue)
{
$Pending = $true
}
if($Pending)
{
Write-Log "Pending Reboot erkannt."
Restart-AndResume
}
Write-Log "Kein Pending Reboot."
}
############################################################
# PART 4.8
#
# PART 4.8 Gesamter Systemcheck
############################################################
function Invoke-SystemCheck {
Write-Log ""
Write-Log "===================================="
Write-Log "Systemprüfung gestartet"
Write-Log "===================================="
Test-OperatingSystem
Test-PowerShellVersion
Test-CPU
Test-Memory
Test-InstallationPaths
Test-PendingReboot
Write-Log "Systemprüfung erfolgreich abgeschlossen."
}
############################################################
# PART 4.9
#
# SQL Server Prüfung
#
# SQL Server 2022 Standard
# Instanz VEEAMSQLSERVER
############################################################
function Test-SQLInstance {
Write-Log "===================================="
Write-Log "Prüfe SQL Instanz"
Write-Log "===================================="
#
# Variablen
#
$SQLInstanceName = "VEEAMSQLSERVER"
$SQLServerName = $env:COMPUTERNAME
$SQLConnection = "$SQLServerName\$SQLInstanceName"
Write-Log "SQL Server : $SQLConnection"
#
# SQL Dienst prüfen
#
$ServiceName = "MSSQL`$$SQLInstanceName"
$SQLService = Get-Service `
-Name $ServiceName `
-ErrorAction SilentlyContinue
if(!$SQLService)
{
Stop-Installation `
"SQL Instanz $SQLInstanceName wurde nicht gefunden."
}
Write-Log "SQL Dienst gefunden"
Write-Log "Status: $($SQLService.Status)"
if($SQLService.Status -ne "Running")
{
Stop-Installation `
"SQL Dienst läuft nicht."
}
#
# SQL Verbindung testen
#
Write-Log "Teste SQL Verbindung"
try
{
Add-Type -AssemblyName System.Data
$ConnectionString = @"
Server=$SQLConnection;
Integrated Security=True;
Database=master;
Connection Timeout=10;
"@
$Connection = New-Object `
System.Data.SqlClient.SqlConnection
$Connection.ConnectionString =
$ConnectionString
$Connection.Open()
Write-Log "SQL Verbindung erfolgreich"
#
# SQL Version lesen
#
$Command = $Connection.CreateCommand()
$Command.CommandText =
"SELECT SERVERPROPERTY('ProductVersion'),
SERVERPROPERTY('Edition'),
SERVERPROPERTY('ProductLevel')"
$Reader = $Command.ExecuteReader()
while($Reader.Read())
{
$SQLVersion = $Reader.GetValue(0)
$SQLEdition = $Reader.GetValue(1)
$SQLLevel = $Reader.GetValue(2)
Write-Log "SQL Version : $SQLVersion"
Write-Log "Edition : $SQLEdition"
Write-Log "Level : $SQLLevel"
}
$Reader.Close()
#
# Datenbank prüfen
#
$Command = $Connection.CreateCommand()
$Command.CommandText =
@"
SELECT name
FROM sys.databases
WHERE name='VeeamBackup'
"@
$Result = $Command.ExecuteScalar()
if($Result)
{
Write-Log "VeeamBackup Datenbank vorhanden"
}
else
{
Write-Log "VeeamBackup Datenbank wird durch Veeam Setup erstellt"
}
#
# Login Rechte prüfen
#
$Command.CommandText =
@"
SELECT IS_SRVROLEMEMBER('sysadmin')
"@
$SysAdmin =
$Command.ExecuteScalar()
if($SysAdmin -eq 1)
{
Write-Log "Installationskonto besitzt SQL Sysadmin Rechte"
}
else
{
Write-Log "WARNUNG: Konto besitzt keine SQL Sysadmin Rolle"
}
$Connection.Close()
}
catch
{
Stop-Installation `
"SQL Verbindung fehlgeschlagen:`n$($_.Exception.Message)"
}
Write-Log "SQL Prüfung erfolgreich"
}