Compare commits

..

No commits in common. "main" and "v1.0.0" have entirely different histories.
main ... v1.0.0

4 changed files with 166 additions and 389 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
# Build artifacts # Build artifacts
*.exe *.exe
!VServerSetup-online-console.exe

View File

@ -1,30 +1,27 @@
# VServer Setup # VServer Setup
Automatischer Windows VServer Setup Installer. Installiert alle benoetigten Programme und Konfigurationen auf einem frischen Windows Server 2022. Automatischer Windows VServer Setup Installer. Installiert alle benoetigten Programme und Konfigurationen auf einem frischen Windows Server.
Alle Downloads kommen von der eigenen Gitea-Instanz (git.24-music.de) oder offiziellen Quellen — keine Abhaengigkeit von streamerware.de mehr.
## Was wird installiert? ## Was wird installiert?
| # | Programm | Quelle | | # | Programm | Quelle |
|---|----------|--------| |---|----------|--------|
| 1 | Python 3.12.4 | python.org | | 1 | Python 3.12.4 | python.org |
| 2 | FFmpeg (+ PATH) | Gitea: ffmpeg | | 2 | FFmpeg (+ PATH) | gyan.dev |
| 3 | WinRAR | win-rar.com | | 3 | WinRAR | win-rar.com |
| 4 | G-Earth | Gitea: G-Earth | | 4 | G-Earth | streamerware.de |
| 5 | VLC Media Player | ftp.fau.de | | 5 | VLC Media Player | ftp.fau.de |
| 6 | Java 8 (Temurin) | GitHub/Adoptium | | 6 | Java 8 (Temurin) | GitHub/Adoptium |
| 7 | .NET Framework 4.8 | Microsoft | | 7 | .NET Framework 4.8 | Microsoft |
| 8 | .NET 6.0 Desktop Runtime | Gitea: dotnet-runtimes | | 8 | .NET 6.0 Desktop Runtime | streamerware.de |
| 9 | .NET 8.0 Desktop Runtime | Gitea: dotnet-runtimes | | 9 | .NET 8.0 Desktop Runtime | streamerware.de |
| 10 | Google Chrome | Google | | 10 | Google Chrome | Google |
| 11 | Habbo Launcher | Gitea: Habbo-Launcher | | 11 | Habbo Launcher | streamerware.de |
| 12 | JDownloader 2 + Backup | Gitea: JDownloader-Setup | | 12 | JDownloader 2 + Backup | streamerware.de |
| 13 | Desktop-Ordner (Downloader Fertig/Downloader Unfertig/Entpackt) + File-Uploader | Gitea: File-Uploader | | 13 | Desktop-Ordner (Fertig/Unfertig) + File-Uploader | streamerware.de |
| 14 | Scripte (Rename MKV AVI etc.) | Gitea: xabbo-scripts | | 14 | Scripte (Rename MKV AVI etc.) | streamerware.de |
| 15 | Twitch VOD Manager | Gitea: Twitch-VOD-Manager | | 15 | Twitch VOD Manager | streamerware.de |
| 16 | Multi-Hoster-Upload + `.mhu` Data-File auf Desktop | Gitea: Multi-Hoster-Upload | | 16 | Windows-Settings (IE Security, Taskview, Icons) | Registry |
| 17 | Real-Debrid-Downloader + `.mdd` Data-File auf Desktop | Gitea: real-debrid-downloader |
## Windows-Einstellungen ## Windows-Einstellungen
@ -32,25 +29,6 @@ Alle Downloads kommen von der eigenen Gitea-Instanz (git.24-music.de) oder offiz
- Taskansicht-Button ausgeblendet - Taskansicht-Button ausgeblendet
- Suchfeld ausgeblendet - Suchfeld ausgeblendet
- Desktop kleine Symbole - Desktop kleine Symbole
- Windows Update dauerhaft deaktiviert (Services + Registry Policy)
- Energiesparplan auf Hoechstleistung
## Gitea Repos
Alle eigenen Tools werden ueber die Gitea API (latest Release) geladen:
| Repo | Inhalt |
|------|--------|
| [G-Earth](https://git.24-music.de/Administrator/G-Earth) | Habbo Packet Interceptor |
| [Habbo-Launcher](https://git.24-music.de/Administrator/Habbo-Launcher) | Habbo Hotel Launcher |
| [JDownloader-Setup](https://git.24-music.de/Administrator/JDownloader-Setup) | JD2 Installer + Config Backup |
| [File-Uploader](https://git.24-music.de/Administrator/File-Uploader) | File-Uploader fuer Desktop |
| [xabbo-scripts](https://git.24-music.de/Administrator/xabbo-scripts) | Xabbo Scripte |
| [dotnet-runtimes](https://git.24-music.de/Administrator/dotnet-runtimes) | .NET 6.0 + 8.0 Desktop Runtime |
| [ffmpeg](https://git.24-music.de/Administrator/ffmpeg) | FFmpeg Essentials Build (Mirror von gyan.dev) |
| [Twitch-VOD-Manager](https://git.24-music.de/Administrator/Twitch-VOD-Manager) | Twitch VOD Manager |
| [Multi-Hoster-Upload](https://git.24-music.de/Administrator/Multi-Hoster-Upload) | Multi-Hoster Upload Tool + `.mhu` Data-File |
| [real-debrid-downloader](https://git.24-music.de/Administrator/real-debrid-downloader) | Real-Debrid Downloader + `.mdd` Data-File |
## Benutzung ## Benutzung
@ -60,37 +38,11 @@ Alle eigenen Tools werden ueber die Gitea API (latest Release) geladen:
.\VServerSetup.ps1 .\VServerSetup.ps1
``` ```
### Kompilierte EXE
Die `VServerSetup-online-console.exe` kann direkt auf dem Server ausgefuehrt werden (als Admin).
## Dateien ## Dateien
- `VServerSetup.ps1` - Hauptscript (Quellcode) - `VServerSetup.ps1` - Hauptscript (Quellcode)
- `jdownloader-backup.zip` - JDownloader 2 Konfiguration/Accounts (auch auf Gitea) - `jdownloader-backup.zip` - JDownloader 2 Konfiguration/Accounts
- `VServerSetup-online-console.exe` - Kompilierte Version
## Changelog
### v2.3.0
- FFmpeg-Download von gyan.dev auf Gitea umgezogen (gyan.dev war arsch langsam)
- Neues Repo `Administrator/ffmpeg` als Mirror
- Bei Updates: einfach neues Release mit .zip-Asset im ffmpeg-Repo hochladen
### v2.2.0
- `Multi-Hoster-Upload.mhu` wird vom Multi-Hoster-Upload Release geladen und auf Desktop gepackt
- `Multi-Debrid-Downloader.mdd` wird vom real-debrid-downloader Release geladen und auf Desktop gepackt
- Neuer Helper `Copy-Gitea-DataFile-To-Desktop`
- Skip-Logik wenn Data-File schon auf Desktop liegt
### v2.1.0
- Desktop-Ordner umbenannt: "Fertig" → "Downloader Fertig", "Unfertig" → "Downloader Unfertig"
- Neuer Ordner "Entpackt"
- JD Backup Import Crash beim Ausfuehren als EXE behoben
### v2.0.0
- Komplette Migration auf Gitea (keine streamerware.de Abhaengigkeit mehr)
- Neue Tools: Multi-Hoster-Upload, Real-Debrid-Downloader, Twitch VOD Manager (Gitea)
- Neue Repos: Habbo-Launcher, File-Uploader, JDownloader-Setup, dotnet-runtimes
- JDownloader blockiert das Setup nicht mehr (Polling statt -Wait)
- TLS 1.2 erzwungen
- JD-Backup Import zuverlaessig (Marker-Datei)
- Explorer-Neustart nach Windows-Einstellungen
- Windows Update dauerhaft deaktiviert
- Energiesparplan auf Hoechstleistung
- Helper-Funktionen (Get-Gitea-Latest-Asset, Unrar-File, Install-Gitea-App)

Binary file not shown.

View File

@ -2,14 +2,7 @@
$ErrorActionPreference = "Continue" $ErrorActionPreference = "Continue"
$ProgressPreference = "SilentlyContinue" $ProgressPreference = "SilentlyContinue"
# TLS 1.2 erzwingen - ohne das schlagen HTTPS-Downloads auf aelteren Servern fehl
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$tempDir = "$env:TEMP\vserver-setup" $tempDir = "$env:TEMP\vserver-setup"
$desktopPath = [Environment]::GetFolderPath("Desktop")
$winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
$totalSteps = 18
New-Item -ItemType Directory -Force -Path $tempDir | Out-Null New-Item -ItemType Directory -Force -Path $tempDir | Out-Null
Write-Host "========================================" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan
@ -19,8 +12,7 @@ Write-Host ""
function Download-File { function Download-File {
param($Url, $Output) param($Url, $Output)
$filename = Split-Path $Output -Leaf Write-Host " Downloading: $Output" -ForegroundColor Gray
Write-Host " Downloading: $filename" -ForegroundColor Gray
try { try {
$webClient = New-Object System.Net.WebClient $webClient = New-Object System.Net.WebClient
$webClient.Headers.Add("User-Agent", "Mozilla/5.0") $webClient.Headers.Add("User-Agent", "Mozilla/5.0")
@ -32,88 +24,8 @@ function Download-File {
} }
} }
function Unrar-File {
param($RarPath, $DestPath)
if (Test-Path $winrarPath) {
Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $RarPath, "$DestPath\" -Wait
return $true
} else {
Write-Host " FEHLER: WinRAR nicht gefunden" -ForegroundColor Red
return $false
}
}
function Get-Gitea-Latest-Asset {
param($Repo, $Filter)
$releaseApi = "https://git.24-music.de/api/v1/repos/Administrator/$Repo/releases?limit=1"
$wc = New-Object System.Net.WebClient
$wc.Headers.Add("User-Agent", "Mozilla/5.0")
$release = ($wc.DownloadString($releaseApi) | ConvertFrom-Json)[0]
$asset = $release.assets | Where-Object { $_.name -like $Filter -and $_.name -notlike "*.blockmap" } | Select-Object -First 1
if ($asset) {
Write-Host " Version: $($release.tag_name)" -ForegroundColor Gray
}
return $asset
}
function Copy-Gitea-DataFile-To-Desktop {
param($Repo, $Filter)
try {
$asset = Get-Gitea-Latest-Asset -Repo $Repo -Filter $Filter
if (-not $asset) {
Write-Host " WARNUNG: Kein Asset '$Filter' im Release gefunden" -ForegroundColor Yellow
return
}
$destPath = Join-Path $desktopPath $asset.name
if (Test-Path $destPath) {
Write-Host " $($asset.name) bereits vorhanden - ueberspringe." -ForegroundColor Gray
return
}
if (Download-File -Url $asset.browser_download_url -Output $destPath) {
Write-Host " $($asset.name) auf Desktop!" -ForegroundColor Green
}
} catch {
Write-Host " FEHLER beim Laden der Data-Datei: $_" -ForegroundColor Red
}
}
function Install-Gitea-App {
param($Name, $Repo, $StepNum, $DetectPaths, $ProcessName)
Write-Host ""
Write-Host "[$StepNum/$totalSteps] $Name..." -ForegroundColor Yellow
foreach ($p in $DetectPaths) {
if (Test-Path $p) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
return
}
}
try {
Write-Host " Hole neueste Version von Gitea..." -ForegroundColor Gray
$asset = Get-Gitea-Latest-Asset -Repo $Repo -Filter "*Setup*.exe"
if ($asset) {
$installer = "$tempDir\$($asset.name)"
if (Download-File -Url $asset.browser_download_url -Output $installer) {
Write-Host " Installiere $Name (silent)..." -ForegroundColor Gray
Start-Process -FilePath $installer -ArgumentList "/S" -Wait
if ($ProcessName) {
Start-Sleep -Seconds 3
Stop-Process -Name $ProcessName -Force -ErrorAction SilentlyContinue
}
Write-Host " $Name installiert!" -ForegroundColor Green
}
} else {
Write-Host " FEHLER: Kein Setup-Asset im Release gefunden" -ForegroundColor Red
}
} catch {
Write-Host " FEHLER beim Abrufen der Gitea-Release: $_" -ForegroundColor Red
}
}
# 1. PYTHON # 1. PYTHON
Write-Host "" Write-Host "[1/12] Python..." -ForegroundColor Yellow
Write-Host "[1/$totalSteps] Python..." -ForegroundColor Yellow
$pythonInstalled = (Get-Command python -ErrorAction SilentlyContinue) -or (Test-Path "C:\Program Files\Python*\python.exe") $pythonInstalled = (Get-Command python -ErrorAction SilentlyContinue) -or (Test-Path "C:\Program Files\Python*\python.exe")
if ($pythonInstalled) { if ($pythonInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -128,14 +40,13 @@ if ($pythonInstalled) {
} }
# 2. FFMPEG # 2. FFMPEG
Write-Host "" Write-Host "[2/12] FFmpeg..." -ForegroundColor Yellow
Write-Host "[2/$totalSteps] FFmpeg..." -ForegroundColor Yellow
if (Test-Path "C:\ffmpeg\bin\ffmpeg.exe") { if (Test-Path "C:\ffmpeg\bin\ffmpeg.exe") {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else { } else {
$ffmpegUrl = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
$ffmpegZip = "$tempDir\ffmpeg.zip" $ffmpegZip = "$tempDir\ffmpeg.zip"
$ffmpegAsset = Get-Gitea-Latest-Asset -Repo "ffmpeg" -Filter "*.zip" if (Download-File -Url $ffmpegUrl -Output $ffmpegZip) {
if ($ffmpegAsset -and (Download-File -Url $ffmpegAsset.browser_download_url -Output $ffmpegZip)) {
Write-Host " Entpacke FFmpeg nach C:\ffmpeg..." -ForegroundColor Gray Write-Host " Entpacke FFmpeg nach C:\ffmpeg..." -ForegroundColor Gray
if (Test-Path "C:\ffmpeg") { Remove-Item -Path "C:\ffmpeg" -Recurse -Force } if (Test-Path "C:\ffmpeg") { Remove-Item -Path "C:\ffmpeg" -Recurse -Force }
Expand-Archive -Path $ffmpegZip -DestinationPath $tempDir -Force Expand-Archive -Path $ffmpegZip -DestinationPath $tempDir -Force
@ -154,9 +65,8 @@ if ($currentPath -notlike "*C:\ffmpeg\bin*") {
} }
# 3. WINRAR # 3. WINRAR
Write-Host "" Write-Host "[3/12] WinRAR..." -ForegroundColor Yellow
Write-Host "[3/$totalSteps] WinRAR..." -ForegroundColor Yellow if (Test-Path "C:\Program Files\WinRAR\WinRAR.exe") {
if (Test-Path $winrarPath) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else { } else {
$winrarUrl = "https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-701.exe" $winrarUrl = "https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-701.exe"
@ -168,50 +78,28 @@ if (Test-Path $winrarPath) {
} }
} }
# 4. G-EARTH (von Gitea - nach WinRAR, damit wir entpacken koennen) # 4. G-EARTH (nach WinRAR, damit wir entpacken koennen)
Write-Host "" Write-Host "[4/12] G-Earth..." -ForegroundColor Yellow
Write-Host "[4/$totalSteps] G-Earth..." -ForegroundColor Yellow $gearthPath = "$([Environment]::GetFolderPath('Desktop'))\G-Earth"
if (Test-Path "$desktopPath\G-Earth") { if (Test-Path $gearthPath) {
Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else { } else {
try { $gearthUrl = "https://streamerware.de/G-earth.rar"
Write-Host " Hole neueste Version von Gitea..." -ForegroundColor Gray $gearthRar = "$tempDir\G-earth.rar"
$releaseApi = "https://git.24-music.de/api/v1/repos/Administrator/G-Earth/releases?limit=1" if (Download-File -Url $gearthUrl -Output $gearthRar) {
$wc = New-Object System.Net.WebClient Write-Host " Entpacke G-Earth auf Desktop..." -ForegroundColor Gray
$wc.Headers.Add("User-Agent", "Mozilla/5.0") $winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
$release = ($wc.DownloadString($releaseApi) | ConvertFrom-Json) if (Test-Path $winrarPath) {
$rarAsset = $release[0].assets | Where-Object { $_.name -like "*.rar" } | Select-Object -First 1 Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $gearthRar, "$([Environment]::GetFolderPath('Desktop'))\" -Wait
if ($rarAsset) { Write-Host " G-Earth installiert!" -ForegroundColor Green
$gearthRar = "$tempDir\$($rarAsset.name)"
Write-Host " Version: $($release[0].tag_name)" -ForegroundColor Gray
if (Download-File -Url $rarAsset.browser_download_url -Output $gearthRar) {
Write-Host " Entpacke G-Earth auf Desktop..." -ForegroundColor Gray
# In temp entpacken, dann nach G-Earth umbenennen (RAR-Ordnername aendert sich je Version)
$gearthTemp = "$tempDir\G-Earth-extract"
New-Item -ItemType Directory -Force -Path $gearthTemp | Out-Null
if (Unrar-File -RarPath $gearthRar -DestPath $gearthTemp) {
# Finde den entpackten Ordner (z.B. "G-Earth 1.5.4")
$extracted = Get-ChildItem -Path $gearthTemp -Directory | Where-Object { $_.Name -like "G-Earth*" } | Select-Object -First 1
if ($extracted) {
Move-Item -Path $extracted.FullName -Destination "$desktopPath\G-Earth" -Force
} else {
# Falls die Dateien direkt im Ordner liegen
Move-Item -Path $gearthTemp -Destination "$desktopPath\G-Earth" -Force
}
Write-Host " G-Earth installiert!" -ForegroundColor Green
}
}
} else { } else {
Write-Host " FEHLER: Kein .rar-Asset im Release gefunden" -ForegroundColor Red Write-Host " FEHLER: WinRAR nicht gefunden" -ForegroundColor Red
} }
} catch {
Write-Host " FEHLER beim Abrufen der Gitea-Release: $_" -ForegroundColor Red
} }
} }
# 5. VLC # 5. VLC
Write-Host "" Write-Host "[5/12] VLC..." -ForegroundColor Yellow
Write-Host "[5/$totalSteps] VLC..." -ForegroundColor Yellow
if (Test-Path "C:\Program Files\VideoLAN\VLC\vlc.exe") { if (Test-Path "C:\Program Files\VideoLAN\VLC\vlc.exe") {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else { } else {
@ -224,9 +112,8 @@ if (Test-Path "C:\Program Files\VideoLAN\VLC\vlc.exe") {
} }
} }
# 6. JAVA 8 # 5. JAVA 8
Write-Host "" Write-Host "[6/12] Java 8..." -ForegroundColor Yellow
Write-Host "[6/$totalSteps] Java 8..." -ForegroundColor Yellow
$javaInstalled = (Test-Path "C:\Program Files\Java\*") -or (Test-Path "C:\Program Files\Eclipse Adoptium\*") -or (Get-Command java -ErrorAction SilentlyContinue) $javaInstalled = (Test-Path "C:\Program Files\Java\*") -or (Test-Path "C:\Program Files\Eclipse Adoptium\*") -or (Get-Command java -ErrorAction SilentlyContinue)
if ($javaInstalled) { if ($javaInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -240,9 +127,8 @@ if ($javaInstalled) {
} }
} }
# 7. .NET FRAMEWORK 4.8 # 6. .NET FRAMEWORK 4.8
Write-Host "" Write-Host "[7/13] .NET Framework 4.8..." -ForegroundColor Yellow
Write-Host "[7/$totalSteps] .NET Framework 4.8..." -ForegroundColor Yellow
$netInstalled = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" -ErrorAction SilentlyContinue).Release -ge 528040 $netInstalled = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" -ErrorAction SilentlyContinue).Release -ge 528040
if ($netInstalled) { if ($netInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -256,16 +142,15 @@ if ($netInstalled) {
} }
} }
# 8. .NET 6.0 DESKTOP RUNTIME # 7. .NET 6.0 DESKTOP RUNTIME
Write-Host "" Write-Host "[8/13] .NET 6.0 Desktop Runtime..." -ForegroundColor Yellow
Write-Host "[8/$totalSteps] .NET 6.0 Desktop Runtime..." -ForegroundColor Yellow
$net6Installed = (Test-Path "C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.*") -or (Test-Path "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.*") $net6Installed = (Test-Path "C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.*") -or (Test-Path "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.*")
if ($net6Installed) { if ($net6Installed) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else { } else {
$net6Url = "https://streamerware.de/windowsdesktop-runtime-6.0.36-win-x64.exe"
$net6Installer = "$tempDir\dotnet6-desktop.exe" $net6Installer = "$tempDir\dotnet6-desktop.exe"
$net6Asset = Get-Gitea-Latest-Asset -Repo "dotnet-runtimes" -Filter "*6.0*" if (Download-File -Url $net6Url -Output $net6Installer) {
if ($net6Asset -and (Download-File -Url $net6Asset.browser_download_url -Output $net6Installer)) {
Write-Host " Installiere .NET 6.0 Desktop Runtime (silent)..." -ForegroundColor Gray Write-Host " Installiere .NET 6.0 Desktop Runtime (silent)..." -ForegroundColor Gray
Start-Process -FilePath $net6Installer -ArgumentList "/install", "/quiet", "/norestart" -Wait Start-Process -FilePath $net6Installer -ArgumentList "/install", "/quiet", "/norestart" -Wait
Write-Host " .NET 6.0 Desktop Runtime installiert!" -ForegroundColor Green Write-Host " .NET 6.0 Desktop Runtime installiert!" -ForegroundColor Green
@ -273,15 +158,14 @@ if ($net6Installed) {
} }
# 9. .NET 8.0 DESKTOP RUNTIME # 9. .NET 8.0 DESKTOP RUNTIME
Write-Host "" Write-Host "[9/16] .NET 8.0 Desktop Runtime..." -ForegroundColor Yellow
Write-Host "[9/$totalSteps] .NET 8.0 Desktop Runtime..." -ForegroundColor Yellow
$net8Installed = (Test-Path "C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.*") -or (Test-Path "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.*") $net8Installed = (Test-Path "C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.*") -or (Test-Path "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.*")
if ($net8Installed) { if ($net8Installed) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else { } else {
$net8Url = "https://streamerware.de/windowsdesktop-runtime-8.0.23-win-x64.exe"
$net8Installer = "$tempDir\dotnet8-desktop.exe" $net8Installer = "$tempDir\dotnet8-desktop.exe"
$net8Asset = Get-Gitea-Latest-Asset -Repo "dotnet-runtimes" -Filter "*8.0*" if (Download-File -Url $net8Url -Output $net8Installer) {
if ($net8Asset -and (Download-File -Url $net8Asset.browser_download_url -Output $net8Installer)) {
Write-Host " Installiere .NET 8.0 Desktop Runtime (silent)..." -ForegroundColor Gray Write-Host " Installiere .NET 8.0 Desktop Runtime (silent)..." -ForegroundColor Gray
Start-Process -FilePath $net8Installer -ArgumentList "/install", "/quiet", "/norestart" -Wait Start-Process -FilePath $net8Installer -ArgumentList "/install", "/quiet", "/norestart" -Wait
Write-Host " .NET 8.0 Desktop Runtime installiert!" -ForegroundColor Green Write-Host " .NET 8.0 Desktop Runtime installiert!" -ForegroundColor Green
@ -289,8 +173,7 @@ if ($net8Installed) {
} }
# 10. GOOGLE CHROME # 10. GOOGLE CHROME
Write-Host "" Write-Host "[10/16] Google Chrome..." -ForegroundColor Yellow
Write-Host "[10/$totalSteps] Google Chrome..." -ForegroundColor Yellow
$chromeInstalled = (Test-Path "C:\Program Files\Google\Chrome\Application\chrome.exe") -or (Test-Path "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") $chromeInstalled = (Test-Path "C:\Program Files\Google\Chrome\Application\chrome.exe") -or (Test-Path "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")
if ($chromeInstalled) { if ($chromeInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -304,184 +187,159 @@ if ($chromeInstalled) {
} }
} }
# 11. HABBO LAUNCHER (von Gitea) # 10. HABBO LAUNCHER
Install-Gitea-App -Name "Habbo Launcher" -Repo "Habbo-Launcher" ` Write-Host "[11/16] Habbo Launcher..." -ForegroundColor Yellow
-StepNum 11 ` $habboInstalled = (Test-Path "$env:LOCALAPPDATA\Programs\habbo-launcher\Habbo Launcher.exe") -or (Test-Path "C:\Program Files\Habbo Launcher\*") -or (Test-Path "$env:USERPROFILE\AppData\Local\Programs\habbo-launcher\Habbo Launcher.exe") -or (Get-ChildItem "C:\Users\*\AppData\Local\Programs\habbo-launcher\Habbo Launcher.exe" -ErrorAction SilentlyContinue) -or (Test-Path "$([Environment]::GetFolderPath('Desktop'))\Habbo Launcher.lnk")
-DetectPaths @("$env:LOCALAPPDATA\Programs\habbo-launcher\Habbo Launcher.exe", "C:\Program Files\Habbo Launcher\*") ` if ($habboInstalled) {
-ProcessName "Habbo Launcher" Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
$habboUrl = "https://streamerware.de/HabboLauncher-Setup-1.0.80.exe"
$habboInstaller = "$tempDir\HabboLauncher-Setup.exe"
if (Download-File -Url $habboUrl -Output $habboInstaller) {
Write-Host " Installiere Habbo Launcher (silent)..." -ForegroundColor Gray
Start-Process -FilePath $habboInstaller -ArgumentList "/S" -Wait
Write-Host " Habbo Launcher installiert!" -ForegroundColor Green
}
}
# 12. JDOWNLOADER # 8. JDOWNLOADER (von Website laden)
Write-Host "" Write-Host "[12/16] JDownloader..." -ForegroundColor Yellow
Write-Host "[12/$totalSteps] JDownloader..." -ForegroundColor Yellow $jdPath = "$env:LOCALAPPDATA\JDownloader 2.0"
$jdDetectPaths = @( $jdInstalled = (Test-Path "$jdPath\JDownloader2.exe") -or (Test-Path "C:\Program Files\JDownloader\JDownloader2.exe")
if ($jdInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
$jdUrl = "http://streamerware.de/JDownloader2Setup_windows-amd64_v21_0_7.exe"
$jdInstaller = "$tempDir\JDownloader2Setup.exe"
if (Download-File -Url $jdUrl -Output $jdInstaller) {
Write-Host " Installiere JDownloader (silent)..." -ForegroundColor Gray
Start-Process -FilePath $jdInstaller -ArgumentList "-q" -Wait
Write-Host " JDownloader installiert!" -ForegroundColor Green
}
}
# JD2 BACKUP IMPORTIEREN (eingebettet)
$jdPaths = @(
"$env:LOCALAPPDATA\JDownloader 2.0", "$env:LOCALAPPDATA\JDownloader 2.0",
"C:\Program Files\JDownloader", "C:\Program Files\JDownloader",
"C:\Users\Administrator\AppData\Local\JDownloader 2.0" "C:\Users\Administrator\AppData\Local\JDownloader 2.0"
) )
$jdPath = $null $jdPath = $null
foreach ($p in $jdDetectPaths) { foreach ($p in $jdPaths) {
if (Test-Path "$p\JDownloader2.exe") { $jdPath = $p; break } if (Test-Path $p) { $jdPath = $p; break }
} }
# Pruefen ob Backup bereits importiert wurde (cfg Ordner existiert)
if ($jdPath) { if ($jdPath -and (Test-Path "$jdPath\cfg")) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray Write-Host " JD2-Backup bereits importiert - ueberspringe." -ForegroundColor Gray
} else { } elseif ($jdPath) {
# JDownloader Installer von Gitea holen Write-Host " Importiere JD2-Backup..." -ForegroundColor Cyan
$jdAsset = Get-Gitea-Latest-Asset -Repo "JDownloader-Setup" -Filter "*Setup*.exe" Write-Host " Ziel: $jdPath" -ForegroundColor Gray
$jdInstaller = "$tempDir\JDownloader2Setup.exe" # JD2 Backup wird als separate Datei mitgeliefert (jdownloader-backup.zip)
if ($jdAsset -and (Download-File -Url $jdAsset.browser_download_url -Output $jdInstaller)) { # oder aus dem gleichen Verzeichnis wie das Script geladen
Write-Host " Installiere JDownloader (silent)..." -ForegroundColor Gray $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
# NICHT -Wait benutzen! Der JD-Installer (install4j) startet JDownloader nach $backupZip = Join-Path $scriptDir "jdownloader-backup.zip"
# der Installation und wartet bis JD geschlossen wird. -Wait wuerde das Script if (-not (Test-Path $backupZip)) {
# blockieren bis der User JDownloader manuell schliesst. $backupZip = "$tempDir\jd2backup.zip"
$jdProc = Start-Process -FilePath $jdInstaller -ArgumentList "-q" -PassThru $backupUrl = "https://streamerware.de/jdownloader-backup.zip"
Download-File -Url $backupUrl -Output $backupZip | Out-Null
# Warte bis JDownloader2.exe auf der Festplatte erscheint (max 2 Minuten)
Write-Host " Warte auf Installation..." -ForegroundColor Gray
$installed = $false
for ($i = 0; $i -lt 60; $i++) {
Start-Sleep -Seconds 2
foreach ($dp in $jdDetectPaths) {
if (Test-Path "$dp\JDownloader2.exe") {
$jdPath = $dp
$installed = $true
break
}
}
if ($installed) { break }
if ($jdProc.HasExited -and -not $installed) { break }
}
# JDownloader und Installer-Prozess beenden
Start-Sleep -Seconds 3
Stop-Process -Name "JDownloader2" -Force -ErrorAction SilentlyContinue
# Auf einem frischen VServer laeuft kein anderes Java - sicher zu killen
Stop-Process -Name "java" -Force -ErrorAction SilentlyContinue
if (-not $jdProc.HasExited) {
Stop-Process -Id $jdProc.Id -Force -ErrorAction SilentlyContinue
}
if ($installed) {
Write-Host " JDownloader installiert!" -ForegroundColor Green
} else {
Write-Host " WARNUNG: JDownloader Installation nicht verifiziert" -ForegroundColor Yellow
}
} }
} try {
Expand-Archive -Path $backupZip -DestinationPath $jdPath -Force
# JD2 BACKUP IMPORTIEREN Write-Host " JD2-Settings importiert!" -ForegroundColor Green
# Marker-Datei statt cfg/-Check: JDownloader erstellt cfg/ beim ersten Start mit } catch {
# Default-Dateien, was den alten Check sofort zum Ueberspringen gebracht hat Write-Host " FEHLER beim Import: $_" -ForegroundColor Red
if ($jdPath) {
if (Test-Path "$jdPath\.backup-imported") {
Write-Host " JD2-Backup bereits importiert - ueberspringe." -ForegroundColor Gray
} else {
Write-Host " Importiere JD2-Backup..." -ForegroundColor Cyan
Write-Host " Ziel: $jdPath" -ForegroundColor Gray
# Backup zuerst lokal suchen, dann von Gitea laden
$backupZip = $null
$scriptPath = $MyInvocation.MyCommand.Path
if ($scriptPath) {
$localZip = Join-Path (Split-Path -Parent $scriptPath) "jdownloader-backup.zip"
if (Test-Path $localZip) { $backupZip = $localZip }
}
if (-not $backupZip) {
Write-Host " Lade Backup von Gitea..." -ForegroundColor Gray
$backupZip = "$tempDir\jdownloader-backup.zip"
try {
$backupAsset = Get-Gitea-Latest-Asset -Repo "JDownloader-Setup" -Filter "*backup*.zip"
if ($backupAsset) {
Download-File -Url $backupAsset.browser_download_url -Output $backupZip | Out-Null
}
} catch {
Write-Host " WARNUNG: Backup konnte nicht von Gitea geladen werden" -ForegroundColor Yellow
}
}
if (Test-Path $backupZip) {
try {
Expand-Archive -Path $backupZip -DestinationPath $jdPath -Force
New-Item -Path "$jdPath\.backup-imported" -ItemType File -Force | Out-Null
Write-Host " JD2-Settings importiert!" -ForegroundColor Green
} catch {
Write-Host " FEHLER beim Import: $_" -ForegroundColor Red
}
}
} }
} else { } else {
Write-Host " JDownloader-Ordner nicht gefunden - Backup uebersprungen" -ForegroundColor Yellow Write-Host " JDownloader-Ordner nicht gefunden - Backup uebersprungen" -ForegroundColor Yellow
} }
# 13. DESKTOP ORDNER + FILE-UPLOADER # 6. FILE-UPLOADER + ORDNER
Write-Host "" Write-Host ""
Write-Host "[13/$totalSteps] Desktop Ordner..." -ForegroundColor Yellow Write-Host "[13/16] Desktop Ordner..." -ForegroundColor Yellow
$desktopPath = [Environment]::GetFolderPath("Desktop")
foreach ($folder in @("Downloader Fertig", "Downloader Unfertig", "Entpackt")) { # Ordner "Fertig" und "Unfertig" erstellen (nur wenn nicht vorhanden)
if (Test-Path "$desktopPath\$folder") { if (Test-Path "$desktopPath\Fertig") {
Write-Host " Ordner '$folder' bereits vorhanden." -ForegroundColor Gray Write-Host " Ordner 'Fertig' bereits vorhanden." -ForegroundColor Gray
} else { } else {
Write-Host " Erstelle Ordner '$folder'..." -ForegroundColor Gray Write-Host " Erstelle Ordner 'Fertig'..." -ForegroundColor Gray
New-Item -ItemType Directory -Force -Path "$desktopPath\$folder" | Out-Null New-Item -ItemType Directory -Force -Path "$desktopPath\Fertig" | Out-Null
} }
if (Test-Path "$desktopPath\Unfertig") {
Write-Host " Ordner 'Unfertig' bereits vorhanden." -ForegroundColor Gray
} else {
Write-Host " Erstelle Ordner 'Unfertig'..." -ForegroundColor Gray
New-Item -ItemType Directory -Force -Path "$desktopPath\Unfertig" | Out-Null
} }
# File-Uploader vom Server laden (nur wenn nicht vorhanden)
if (Test-Path "$desktopPath\File-Uploader") { if (Test-Path "$desktopPath\File-Uploader") {
Write-Host " File-Uploader bereits vorhanden - ueberspringe." -ForegroundColor Gray Write-Host " File-Uploader bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else { } else {
Write-Host " Hole File-Uploader von Gitea..." -ForegroundColor Gray Write-Host " Lade File-Uploader vom Server..." -ForegroundColor Gray
try { $fileUploaderUrl = "https://streamerware.de/FileUploader.rar"
$fuAsset = Get-Gitea-Latest-Asset -Repo "File-Uploader" -Filter "*.rar"
} catch { $fuAsset = $null }
$uploaderRar = "$tempDir\FileUploader.rar" $uploaderRar = "$tempDir\FileUploader.rar"
if ($fuAsset -and (Download-File -Url $fuAsset.browser_download_url -Output $uploaderRar)) {
if (Unrar-File -RarPath $uploaderRar -DestPath $desktopPath) { if (Download-File -Url $fileUploaderUrl -Output $uploaderRar) {
Write-Host " File-Uploader installiert!" -ForegroundColor Green try {
$winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
if (Test-Path $winrarPath) {
Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $uploaderRar, "$desktopPath\" -Wait
Write-Host " File-Uploader installiert!" -ForegroundColor Green
} else {
Write-Host " FEHLER: WinRAR nicht gefunden (fuer .rar Entpacken)." -ForegroundColor Red
}
} catch {
Write-Host " FEHLER beim Entpacken: $_" -ForegroundColor Red
} }
} else {
Write-Host " FEHLER: Download vom Server fehlgeschlagen." -ForegroundColor Red
} }
} }
# 14. SCRIPTE Write-Host " Desktop Ordner erstellt!" -ForegroundColor Green
# 13. SCRIPTE
Write-Host "" Write-Host ""
Write-Host "[14/$totalSteps] Scripte..." -ForegroundColor Yellow Write-Host "[14/16] Scripte..." -ForegroundColor Yellow
if (Test-Path "$desktopPath\Rename MKV AVI.py") { if (Test-Path "$desktopPath\Rename MKV AVI.py") {
Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else { } else {
try { $scripteUrl = "https://streamerware.de/Scripte.rar"
$scriptAsset = Get-Gitea-Latest-Asset -Repo "xabbo-scripts" -Filter "*.rar"
} catch { $scriptAsset = $null }
$scripteRar = "$tempDir\Scripte.rar" $scripteRar = "$tempDir\Scripte.rar"
if ($scriptAsset -and (Download-File -Url $scriptAsset.browser_download_url -Output $scripteRar)) { if (Download-File -Url $scripteUrl -Output $scripteRar) {
Write-Host " Entpacke Scripte auf Desktop..." -ForegroundColor Gray Write-Host " Entpacke Scripte auf Desktop..." -ForegroundColor Gray
if (Unrar-File -RarPath $scripteRar -DestPath $desktopPath) { $winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
if (Test-Path $winrarPath) {
Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $scripteRar, "$desktopPath\" -Wait
Write-Host " Scripte installiert!" -ForegroundColor Green Write-Host " Scripte installiert!" -ForegroundColor Green
} else {
Write-Host " FEHLER: WinRAR nicht gefunden" -ForegroundColor Red
} }
} }
} }
# 15. TWITCH VOD MANAGER (von Gitea) # 14. TWITCH VOD MANAGER
Install-Gitea-App -Name "Twitch VOD Manager" -Repo "Twitch-VOD-Manager" `
-StepNum 15 `
-DetectPaths @("$env:LOCALAPPDATA\Programs\twitch-vod-manager\Twitch VOD Manager.exe", "$desktopPath\Twitch VOD Manager.lnk") `
-ProcessName "Twitch VOD Manager"
# 16. MULTI-HOSTER-UPLOAD (von Gitea)
Install-Gitea-App -Name "Multi-Hoster-Upload" -Repo "Multi-Hoster-Upload" `
-StepNum 16 `
-DetectPaths @("$env:LOCALAPPDATA\Programs\multi-hoster-upload\Multi-Hoster-Upload.exe", "$desktopPath\Multi-Hoster-Upload.lnk") `
-ProcessName "Multi-Hoster-Upload"
Copy-Gitea-DataFile-To-Desktop -Repo "Multi-Hoster-Upload" -Filter "*.mhu"
# 17. REAL-DEBRID-DOWNLOADER (von Gitea)
Install-Gitea-App -Name "Real-Debrid-Downloader" -Repo "real-debrid-downloader" `
-StepNum 17 `
-DetectPaths @("$env:LOCALAPPDATA\Programs\real-debrid-downloader\Real-Debrid-Downloader.exe", "$desktopPath\Real-Debrid-Downloader.lnk") `
-ProcessName "Real-Debrid-Downloader"
Copy-Gitea-DataFile-To-Desktop -Repo "real-debrid-downloader" -Filter "*.mdd"
# 18. WINDOWS EINSTELLUNGEN
Write-Host "" Write-Host ""
Write-Host "[18/$totalSteps] Windows Einstellungen..." -ForegroundColor Yellow Write-Host "[15/16] Twitch VOD Manager..." -ForegroundColor Yellow
$twitchPath = "$desktopPath\Twitch Downloader"
if (Test-Path "$twitchPath\Twitch_VOD_Manager.exe") {
Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else {
$twitchUrl = "https://streamerware.de/Twitch_VOD_Manager.zip"
$twitchZip = "$tempDir\Twitch_VOD_Manager.zip"
if (Download-File -Url $twitchUrl -Output $twitchZip) {
Write-Host " Entpacke Twitch VOD Manager auf Desktop..." -ForegroundColor Gray
Expand-Archive -Path $twitchZip -DestinationPath $desktopPath -Force
Write-Host " Twitch VOD Manager installiert!" -ForegroundColor Green
}
}
# IE Enhanced Security Configuration deaktivieren # 12. WINDOWS EINSTELLUNGEN
Write-Host ""
Write-Host "[16/16] Windows Einstellungen..." -ForegroundColor Yellow
# IE Enhanced Security Configuration deaktivieren (fuer Administratoren und Benutzer)
Write-Host " IE Enhanced Security deaktivieren..." -ForegroundColor Gray Write-Host " IE Enhanced Security deaktivieren..." -ForegroundColor Gray
$ieAdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}" $ieAdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
$ieUserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}" $ieUserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"
@ -513,39 +371,6 @@ Set-ItemProperty -Path $desktopRegPath -Name "IconSize" -Value 32 -Type DWord -F
Set-ItemProperty -Path $desktopRegPath -Name "Mode" -Value 1 -Type DWord -Force Set-ItemProperty -Path $desktopRegPath -Name "Mode" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $desktopRegPath -Name "LogicalViewMode" -Value 3 -Type DWord -Force Set-ItemProperty -Path $desktopRegPath -Name "LogicalViewMode" -Value 3 -Type DWord -Force
# Windows Update dauerhaft deaktivieren
Write-Host " Windows Update deaktivieren..." -ForegroundColor Gray
# Update-Service stoppen und auf "Deaktiviert" setzen
Stop-Service -Name "wuauserv" -Force -ErrorAction SilentlyContinue
Set-Service -Name "wuauserv" -StartupType Disabled -ErrorAction SilentlyContinue
# Orchestrator-Service (plant Updates im Hintergrund)
Stop-Service -Name "UsoSvc" -Force -ErrorAction SilentlyContinue
Set-Service -Name "UsoSvc" -StartupType Disabled -ErrorAction SilentlyContinue
# BITS (Background Intelligent Transfer Service - laedt Updates runter)
Stop-Service -Name "BITS" -Force -ErrorAction SilentlyContinue
Set-Service -Name "BITS" -StartupType Disabled -ErrorAction SilentlyContinue
# Registry: Automatische Updates komplett deaktivieren
$wuRegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
if (-not (Test-Path $wuRegPath)) {
New-Item -Path $wuRegPath -Force | Out-Null
}
# NoAutoUpdate = 1 → Keine automatischen Updates
Set-ItemProperty -Path $wuRegPath -Name "NoAutoUpdate" -Value 1 -Type DWord -Force
# AUOptions = 1 → Nie nach Updates suchen
Set-ItemProperty -Path $wuRegPath -Name "AUOptions" -Value 1 -Type DWord -Force
Write-Host " Windows Update deaktiviert!" -ForegroundColor Green
# Energiesparplan auf Hoechstleistung setzen
Write-Host " Energiesparplan auf Hoechstleistung..." -ForegroundColor Gray
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
Write-Host " Hoechstleistung aktiviert!" -ForegroundColor Green
# Explorer neu starten damit alle Einstellungen sofort wirksam werden
Write-Host " Explorer wird neu gestartet..." -ForegroundColor Gray
Stop-Process -Name "explorer" -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
Start-Process "explorer.exe"
Write-Host " Windows Einstellungen angepasst!" -ForegroundColor Green Write-Host " Windows Einstellungen angepasst!" -ForegroundColor Green
# CLEANUP # CLEANUP
@ -559,4 +384,3 @@ Write-Host " FERTIG! Alle Programme installiert." -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green Write-Host "========================================" -ForegroundColor Green
Write-Host "" Write-Host ""
Write-Host "Druecke eine Taste zum Beenden..." Write-Host "Druecke eine Taste zum Beenden..."
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null