Initialer Import der Synology Scripts
This commit is contained in:
Executable
+471
@@ -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"
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user