Compare commits

...

12 Commits
v1.0.0 ... main

Author SHA1 Message Date
a01dbb892e docs: README aktualisiert — FFmpeg-Quelle + .mhu/.mdd + Changelog
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 13:05:15 +02:00
86eb0648c9 feat: FFmpeg-Download von gyan.dev auf Gitea umgezogen (schneller)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 12:56:37 +02:00
9339bda3e2 feat: .mhu + .mdd Data-Files vom jeweiligen App-Release auf Desktop laden
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 11:23:26 +02:00
71e4ec005e feat: Desktop-Ordner umbenennen — Downloader Fertig/Unfertig + Entpackt
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:10:14 +01:00
82c6c2dce9 fix: JD backup import crash when running as EXE
$MyInvocation.MyCommand.Path is NULL in ps2exe compiled scripts,
causing Split-Path/Join-Path/Test-Path to throw errors.
Now checks for NULL before using the path and falls through
to Gitea download.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:41:31 +01:00
2b4fab9e46 chore: remove old exe, new VServerSetup.exe in v2.0.0 release
Built with ps2exe from current VServerSetup.ps1.
Old VServerSetup-online-console.exe removed from repo.
New exe available as release download.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:22:24 +01:00
3bfdf2a653 feat: migrate all downloads from streamerware.de to Gitea
All custom tools now download from git.24-music.de releases:
- Habbo Launcher → Habbo-Launcher repo
- JDownloader installer + backup → JDownloader-Setup repo
- File-Uploader → File-Uploader repo
- Scripte → xabbo-scripts repo
- .NET 6.0/8.0 runtimes → dotnet-runtimes repo
- G-Earth was already on Gitea

Zero streamerware.de dependencies remaining.
Added Get-Gitea-Latest-Asset helper function for cleaner code.
Updated README with all Gitea repo links.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:01:47 +01:00
9cd9581563 feat: G-Earth now downloads latest release from Gitea
Fetches newest .rar from git.24-music.de/Administrator/G-Earth,
extracts to temp dir, then moves to Desktop\G-Earth with a
consistent folder name regardless of version.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:52:18 +01:00
0c99ecf248 docs: update README with all current features
Add Multi-Hoster-Upload, Real-Debrid-Downloader, Gitea sources,
Windows Update disable, high performance power plan.
Mark old exe as outdated.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:48:38 +01:00
9ae23b9dde feat: set power plan to high performance
Uses built-in GUID 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
to switch from balanced to high performance.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:37:34 +01:00
b8833f2897 feat: disable Windows Update permanently (services + registry policy)
Stops and disables wuauserv, UsoSvc, and BITS services.
Sets NoAutoUpdate and AUOptions registry policies to prevent
automatic and manual update checks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:36:41 +01:00
c54df9162d fix: complete script overhaul - JD blocking bug, TLS, backup import, Gitea apps
Critical fixes:
- JDownloader no longer blocks script (use polling instead of -Wait)
- Force TLS 1.2 for HTTPS downloads on older servers
- JD backup import uses marker file instead of cfg/ check (was always skipped)
- Explorer restart after Windows settings for immediate effect

New features:
- Twitch VOD Manager, Multi-Hoster-Upload, Real-Debrid-Downloader from Gitea
- Install-Gitea-App helper function (auto-fetches latest release)
- Unrar-File helper function (DRY)

Cleanup:
- Consistent step numbering via $totalSteps variable
- WinRAR path as global variable
- Gitea WebClient with User-Agent header
- ReadKey pause at script end
- Cleaner formatting throughout

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:32:38 +01:00
4 changed files with 389 additions and 166 deletions

1
.gitignore vendored
View File

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

View File

@ -1,27 +1,30 @@
# VServer Setup
Automatischer Windows VServer Setup Installer. Installiert alle benoetigten Programme und Konfigurationen auf einem frischen Windows Server.
Automatischer Windows VServer Setup Installer. Installiert alle benoetigten Programme und Konfigurationen auf einem frischen Windows Server 2022.
Alle Downloads kommen von der eigenen Gitea-Instanz (git.24-music.de) oder offiziellen Quellen — keine Abhaengigkeit von streamerware.de mehr.
## Was wird installiert?
| # | Programm | Quelle |
|---|----------|--------|
| 1 | Python 3.12.4 | python.org |
| 2 | FFmpeg (+ PATH) | gyan.dev |
| 2 | FFmpeg (+ PATH) | Gitea: ffmpeg |
| 3 | WinRAR | win-rar.com |
| 4 | G-Earth | streamerware.de |
| 4 | G-Earth | Gitea: G-Earth |
| 5 | VLC Media Player | ftp.fau.de |
| 6 | Java 8 (Temurin) | GitHub/Adoptium |
| 7 | .NET Framework 4.8 | Microsoft |
| 8 | .NET 6.0 Desktop Runtime | streamerware.de |
| 9 | .NET 8.0 Desktop Runtime | streamerware.de |
| 8 | .NET 6.0 Desktop Runtime | Gitea: dotnet-runtimes |
| 9 | .NET 8.0 Desktop Runtime | Gitea: dotnet-runtimes |
| 10 | Google Chrome | Google |
| 11 | Habbo Launcher | streamerware.de |
| 12 | JDownloader 2 + Backup | streamerware.de |
| 13 | Desktop-Ordner (Fertig/Unfertig) + File-Uploader | streamerware.de |
| 14 | Scripte (Rename MKV AVI etc.) | streamerware.de |
| 15 | Twitch VOD Manager | streamerware.de |
| 16 | Windows-Settings (IE Security, Taskview, Icons) | Registry |
| 11 | Habbo Launcher | Gitea: Habbo-Launcher |
| 12 | JDownloader 2 + Backup | Gitea: JDownloader-Setup |
| 13 | Desktop-Ordner (Downloader Fertig/Downloader Unfertig/Entpackt) + File-Uploader | Gitea: File-Uploader |
| 14 | Scripte (Rename MKV AVI etc.) | Gitea: xabbo-scripts |
| 15 | Twitch VOD Manager | Gitea: Twitch-VOD-Manager |
| 16 | Multi-Hoster-Upload + `.mhu` Data-File auf Desktop | Gitea: Multi-Hoster-Upload |
| 17 | Real-Debrid-Downloader + `.mdd` Data-File auf Desktop | Gitea: real-debrid-downloader |
## Windows-Einstellungen
@ -29,6 +32,25 @@ Automatischer Windows VServer Setup Installer. Installiert alle benoetigten Prog
- Taskansicht-Button ausgeblendet
- Suchfeld ausgeblendet
- 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
@ -38,11 +60,37 @@ Automatischer Windows VServer Setup Installer. Installiert alle benoetigten Prog
.\VServerSetup.ps1
```
### Kompilierte EXE
Die `VServerSetup-online-console.exe` kann direkt auf dem Server ausgefuehrt werden (als Admin).
## Dateien
- `VServerSetup.ps1` - Hauptscript (Quellcode)
- `jdownloader-backup.zip` - JDownloader 2 Konfiguration/Accounts
- `VServerSetup-online-console.exe` - Kompilierte Version
- `jdownloader-backup.zip` - JDownloader 2 Konfiguration/Accounts (auch auf Gitea)
## 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,7 +2,14 @@
$ErrorActionPreference = "Continue"
$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"
$desktopPath = [Environment]::GetFolderPath("Desktop")
$winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
$totalSteps = 18
New-Item -ItemType Directory -Force -Path $tempDir | Out-Null
Write-Host "========================================" -ForegroundColor Cyan
@ -12,7 +19,8 @@ Write-Host ""
function Download-File {
param($Url, $Output)
Write-Host " Downloading: $Output" -ForegroundColor Gray
$filename = Split-Path $Output -Leaf
Write-Host " Downloading: $filename" -ForegroundColor Gray
try {
$webClient = New-Object System.Net.WebClient
$webClient.Headers.Add("User-Agent", "Mozilla/5.0")
@ -24,8 +32,88 @@ 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
Write-Host "[1/12] Python..." -ForegroundColor Yellow
Write-Host ""
Write-Host "[1/$totalSteps] Python..." -ForegroundColor Yellow
$pythonInstalled = (Get-Command python -ErrorAction SilentlyContinue) -or (Test-Path "C:\Program Files\Python*\python.exe")
if ($pythonInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -40,13 +128,14 @@ if ($pythonInstalled) {
}
# 2. FFMPEG
Write-Host "[2/12] FFmpeg..." -ForegroundColor Yellow
Write-Host ""
Write-Host "[2/$totalSteps] FFmpeg..." -ForegroundColor Yellow
if (Test-Path "C:\ffmpeg\bin\ffmpeg.exe") {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
$ffmpegUrl = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
$ffmpegZip = "$tempDir\ffmpeg.zip"
if (Download-File -Url $ffmpegUrl -Output $ffmpegZip) {
$ffmpegAsset = Get-Gitea-Latest-Asset -Repo "ffmpeg" -Filter "*.zip"
if ($ffmpegAsset -and (Download-File -Url $ffmpegAsset.browser_download_url -Output $ffmpegZip)) {
Write-Host " Entpacke FFmpeg nach C:\ffmpeg..." -ForegroundColor Gray
if (Test-Path "C:\ffmpeg") { Remove-Item -Path "C:\ffmpeg" -Recurse -Force }
Expand-Archive -Path $ffmpegZip -DestinationPath $tempDir -Force
@ -65,8 +154,9 @@ if ($currentPath -notlike "*C:\ffmpeg\bin*") {
}
# 3. WINRAR
Write-Host "[3/12] WinRAR..." -ForegroundColor Yellow
if (Test-Path "C:\Program Files\WinRAR\WinRAR.exe") {
Write-Host ""
Write-Host "[3/$totalSteps] WinRAR..." -ForegroundColor Yellow
if (Test-Path $winrarPath) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
$winrarUrl = "https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-701.exe"
@ -78,28 +168,50 @@ if (Test-Path "C:\Program Files\WinRAR\WinRAR.exe") {
}
}
# 4. G-EARTH (nach WinRAR, damit wir entpacken koennen)
Write-Host "[4/12] G-Earth..." -ForegroundColor Yellow
$gearthPath = "$([Environment]::GetFolderPath('Desktop'))\G-Earth"
if (Test-Path $gearthPath) {
# 4. G-EARTH (von Gitea - nach WinRAR, damit wir entpacken koennen)
Write-Host ""
Write-Host "[4/$totalSteps] G-Earth..." -ForegroundColor Yellow
if (Test-Path "$desktopPath\G-Earth") {
Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else {
$gearthUrl = "https://streamerware.de/G-earth.rar"
$gearthRar = "$tempDir\G-earth.rar"
if (Download-File -Url $gearthUrl -Output $gearthRar) {
try {
Write-Host " Hole neueste Version von Gitea..." -ForegroundColor Gray
$releaseApi = "https://git.24-music.de/api/v1/repos/Administrator/G-Earth/releases?limit=1"
$wc = New-Object System.Net.WebClient
$wc.Headers.Add("User-Agent", "Mozilla/5.0")
$release = ($wc.DownloadString($releaseApi) | ConvertFrom-Json)
$rarAsset = $release[0].assets | Where-Object { $_.name -like "*.rar" } | Select-Object -First 1
if ($rarAsset) {
$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
$winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
if (Test-Path $winrarPath) {
Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $gearthRar, "$([Environment]::GetFolderPath('Desktop'))\" -Wait
Write-Host " G-Earth installiert!" -ForegroundColor Green
# 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 {
Write-Host " FEHLER: WinRAR nicht gefunden" -ForegroundColor Red
# Falls die Dateien direkt im Ordner liegen
Move-Item -Path $gearthTemp -Destination "$desktopPath\G-Earth" -Force
}
Write-Host " G-Earth installiert!" -ForegroundColor Green
}
}
} else {
Write-Host " FEHLER: Kein .rar-Asset im Release gefunden" -ForegroundColor Red
}
} catch {
Write-Host " FEHLER beim Abrufen der Gitea-Release: $_" -ForegroundColor Red
}
}
# 5. VLC
Write-Host "[5/12] VLC..." -ForegroundColor Yellow
Write-Host ""
Write-Host "[5/$totalSteps] VLC..." -ForegroundColor Yellow
if (Test-Path "C:\Program Files\VideoLAN\VLC\vlc.exe") {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
@ -112,8 +224,9 @@ if (Test-Path "C:\Program Files\VideoLAN\VLC\vlc.exe") {
}
}
# 5. JAVA 8
Write-Host "[6/12] Java 8..." -ForegroundColor Yellow
# 6. JAVA 8
Write-Host ""
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)
if ($javaInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -127,8 +240,9 @@ if ($javaInstalled) {
}
}
# 6. .NET FRAMEWORK 4.8
Write-Host "[7/13] .NET Framework 4.8..." -ForegroundColor Yellow
# 7. .NET FRAMEWORK 4.8
Write-Host ""
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
if ($netInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -142,15 +256,16 @@ if ($netInstalled) {
}
}
# 7. .NET 6.0 DESKTOP RUNTIME
Write-Host "[8/13] .NET 6.0 Desktop Runtime..." -ForegroundColor Yellow
# 8. .NET 6.0 DESKTOP RUNTIME
Write-Host ""
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.*")
if ($net6Installed) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
$net6Url = "https://streamerware.de/windowsdesktop-runtime-6.0.36-win-x64.exe"
$net6Installer = "$tempDir\dotnet6-desktop.exe"
if (Download-File -Url $net6Url -Output $net6Installer) {
$net6Asset = Get-Gitea-Latest-Asset -Repo "dotnet-runtimes" -Filter "*6.0*"
if ($net6Asset -and (Download-File -Url $net6Asset.browser_download_url -Output $net6Installer)) {
Write-Host " Installiere .NET 6.0 Desktop Runtime (silent)..." -ForegroundColor Gray
Start-Process -FilePath $net6Installer -ArgumentList "/install", "/quiet", "/norestart" -Wait
Write-Host " .NET 6.0 Desktop Runtime installiert!" -ForegroundColor Green
@ -158,14 +273,15 @@ if ($net6Installed) {
}
# 9. .NET 8.0 DESKTOP RUNTIME
Write-Host "[9/16] .NET 8.0 Desktop Runtime..." -ForegroundColor Yellow
Write-Host ""
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.*")
if ($net8Installed) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
$net8Url = "https://streamerware.de/windowsdesktop-runtime-8.0.23-win-x64.exe"
$net8Installer = "$tempDir\dotnet8-desktop.exe"
if (Download-File -Url $net8Url -Output $net8Installer) {
$net8Asset = Get-Gitea-Latest-Asset -Repo "dotnet-runtimes" -Filter "*8.0*"
if ($net8Asset -and (Download-File -Url $net8Asset.browser_download_url -Output $net8Installer)) {
Write-Host " Installiere .NET 8.0 Desktop Runtime (silent)..." -ForegroundColor Gray
Start-Process -FilePath $net8Installer -ArgumentList "/install", "/quiet", "/norestart" -Wait
Write-Host " .NET 8.0 Desktop Runtime installiert!" -ForegroundColor Green
@ -173,7 +289,8 @@ if ($net8Installed) {
}
# 10. GOOGLE CHROME
Write-Host "[10/16] Google Chrome..." -ForegroundColor Yellow
Write-Host ""
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")
if ($chromeInstalled) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
@ -187,159 +304,184 @@ if ($chromeInstalled) {
}
}
# 10. HABBO LAUNCHER
Write-Host "[11/16] Habbo Launcher..." -ForegroundColor Yellow
$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")
if ($habboInstalled) {
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
}
}
# 11. HABBO LAUNCHER (von Gitea)
Install-Gitea-App -Name "Habbo Launcher" -Repo "Habbo-Launcher" `
-StepNum 11 `
-DetectPaths @("$env:LOCALAPPDATA\Programs\habbo-launcher\Habbo Launcher.exe", "C:\Program Files\Habbo Launcher\*") `
-ProcessName "Habbo Launcher"
# 8. JDOWNLOADER (von Website laden)
Write-Host "[12/16] JDownloader..." -ForegroundColor Yellow
$jdPath = "$env:LOCALAPPDATA\JDownloader 2.0"
$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 = @(
# 12. JDOWNLOADER
Write-Host ""
Write-Host "[12/$totalSteps] JDownloader..." -ForegroundColor Yellow
$jdDetectPaths = @(
"$env:LOCALAPPDATA\JDownloader 2.0",
"C:\Program Files\JDownloader",
"C:\Users\Administrator\AppData\Local\JDownloader 2.0"
)
$jdPath = $null
foreach ($p in $jdPaths) {
if (Test-Path $p) { $jdPath = $p; break }
foreach ($p in $jdDetectPaths) {
if (Test-Path "$p\JDownloader2.exe") { $jdPath = $p; break }
}
# Pruefen ob Backup bereits importiert wurde (cfg Ordner existiert)
if ($jdPath -and (Test-Path "$jdPath\cfg")) {
if ($jdPath) {
Write-Host " Bereits installiert - ueberspringe." -ForegroundColor Gray
} else {
# JDownloader Installer von Gitea holen
$jdAsset = Get-Gitea-Latest-Asset -Repo "JDownloader-Setup" -Filter "*Setup*.exe"
$jdInstaller = "$tempDir\JDownloader2Setup.exe"
if ($jdAsset -and (Download-File -Url $jdAsset.browser_download_url -Output $jdInstaller)) {
Write-Host " Installiere JDownloader (silent)..." -ForegroundColor Gray
# NICHT -Wait benutzen! Der JD-Installer (install4j) startet JDownloader nach
# der Installation und wartet bis JD geschlossen wird. -Wait wuerde das Script
# blockieren bis der User JDownloader manuell schliesst.
$jdProc = Start-Process -FilePath $jdInstaller -ArgumentList "-q" -PassThru
# 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
}
}
}
# JD2 BACKUP IMPORTIEREN
# Marker-Datei statt cfg/-Check: JDownloader erstellt cfg/ beim ersten Start mit
# Default-Dateien, was den alten Check sofort zum Ueberspringen gebracht hat
if ($jdPath) {
if (Test-Path "$jdPath\.backup-imported") {
Write-Host " JD2-Backup bereits importiert - ueberspringe." -ForegroundColor Gray
} elseif ($jdPath) {
} else {
Write-Host " Importiere JD2-Backup..." -ForegroundColor Cyan
Write-Host " Ziel: $jdPath" -ForegroundColor Gray
# JD2 Backup wird als separate Datei mitgeliefert (jdownloader-backup.zip)
# oder aus dem gleichen Verzeichnis wie das Script geladen
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$backupZip = Join-Path $scriptDir "jdownloader-backup.zip"
if (-not (Test-Path $backupZip)) {
$backupZip = "$tempDir\jd2backup.zip"
$backupUrl = "https://streamerware.de/jdownloader-backup.zip"
Download-File -Url $backupUrl -Output $backupZip | Out-Null
# 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 {
Write-Host " JDownloader-Ordner nicht gefunden - Backup uebersprungen" -ForegroundColor Yellow
}
# 6. FILE-UPLOADER + ORDNER
# 13. DESKTOP ORDNER + FILE-UPLOADER
Write-Host ""
Write-Host "[13/16] Desktop Ordner..." -ForegroundColor Yellow
$desktopPath = [Environment]::GetFolderPath("Desktop")
Write-Host "[13/$totalSteps] Desktop Ordner..." -ForegroundColor Yellow
# Ordner "Fertig" und "Unfertig" erstellen (nur wenn nicht vorhanden)
if (Test-Path "$desktopPath\Fertig") {
Write-Host " Ordner 'Fertig' bereits vorhanden." -ForegroundColor Gray
} else {
Write-Host " Erstelle Ordner 'Fertig'..." -ForegroundColor Gray
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
foreach ($folder in @("Downloader Fertig", "Downloader Unfertig", "Entpackt")) {
if (Test-Path "$desktopPath\$folder") {
Write-Host " Ordner '$folder' bereits vorhanden." -ForegroundColor Gray
} else {
Write-Host " Erstelle Ordner '$folder'..." -ForegroundColor Gray
New-Item -ItemType Directory -Force -Path "$desktopPath\$folder" | Out-Null
}
}
# File-Uploader vom Server laden (nur wenn nicht vorhanden)
if (Test-Path "$desktopPath\File-Uploader") {
Write-Host " File-Uploader bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else {
Write-Host " Lade File-Uploader vom Server..." -ForegroundColor Gray
$fileUploaderUrl = "https://streamerware.de/FileUploader.rar"
$uploaderRar = "$tempDir\FileUploader.rar"
if (Download-File -Url $fileUploaderUrl -Output $uploaderRar) {
Write-Host " Hole File-Uploader von Gitea..." -ForegroundColor Gray
try {
$winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
if (Test-Path $winrarPath) {
Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $uploaderRar, "$desktopPath\" -Wait
$fuAsset = Get-Gitea-Latest-Asset -Repo "File-Uploader" -Filter "*.rar"
} catch { $fuAsset = $null }
$uploaderRar = "$tempDir\FileUploader.rar"
if ($fuAsset -and (Download-File -Url $fuAsset.browser_download_url -Output $uploaderRar)) {
if (Unrar-File -RarPath $uploaderRar -DestPath $desktopPath) {
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
}
}
Write-Host " Desktop Ordner erstellt!" -ForegroundColor Green
# 13. SCRIPTE
# 14. SCRIPTE
Write-Host ""
Write-Host "[14/16] Scripte..." -ForegroundColor Yellow
Write-Host "[14/$totalSteps] Scripte..." -ForegroundColor Yellow
if (Test-Path "$desktopPath\Rename MKV AVI.py") {
Write-Host " Bereits vorhanden - ueberspringe." -ForegroundColor Gray
} else {
$scripteUrl = "https://streamerware.de/Scripte.rar"
try {
$scriptAsset = Get-Gitea-Latest-Asset -Repo "xabbo-scripts" -Filter "*.rar"
} catch { $scriptAsset = $null }
$scripteRar = "$tempDir\Scripte.rar"
if (Download-File -Url $scripteUrl -Output $scripteRar) {
if ($scriptAsset -and (Download-File -Url $scriptAsset.browser_download_url -Output $scripteRar)) {
Write-Host " Entpacke Scripte auf Desktop..." -ForegroundColor Gray
$winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
if (Test-Path $winrarPath) {
Start-Process -FilePath $winrarPath -ArgumentList "x", "-ibck", "-o+", $scripteRar, "$desktopPath\" -Wait
if (Unrar-File -RarPath $scripteRar -DestPath $desktopPath) {
Write-Host " Scripte installiert!" -ForegroundColor Green
} else {
Write-Host " FEHLER: WinRAR nicht gefunden" -ForegroundColor Red
}
}
}
# 14. TWITCH VOD MANAGER
Write-Host ""
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
}
}
# 15. TWITCH VOD MANAGER (von Gitea)
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"
# 12. WINDOWS EINSTELLUNGEN
Write-Host ""
Write-Host "[16/16] Windows Einstellungen..." -ForegroundColor Yellow
# 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"
# IE Enhanced Security Configuration deaktivieren (fuer Administratoren und Benutzer)
# 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 "[18/$totalSteps] Windows Einstellungen..." -ForegroundColor Yellow
# IE Enhanced Security Configuration deaktivieren
Write-Host " IE Enhanced Security deaktivieren..." -ForegroundColor Gray
$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}"
@ -371,6 +513,39 @@ 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 "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
# CLEANUP
@ -384,3 +559,4 @@ Write-Host " FERTIG! Alle Programme installiert." -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host ""
Write-Host "Druecke eine Taste zum Beenden..."
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null