Initial commit
This commit is contained in:
187
scripts/powershell/install-remaining-apps.ps1
Normal file
187
scripts/powershell/install-remaining-apps.ps1
Normal file
@@ -0,0 +1,187 @@
|
||||
[Console]::OutputEncoding = [Text.Encoding]::UTF8
|
||||
$ErrorActionPreference = 'Continue'
|
||||
|
||||
Write-Host "[*] Installing remaining applications with Windows Defender bypass"
|
||||
Write-Host "Apps: AnyDesk, LINE, Adobe Reader"
|
||||
Write-Host ""
|
||||
|
||||
# Check if running as administrator
|
||||
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
||||
if (-not $isAdmin) {
|
||||
Write-Host "[!] ERROR: This script must be run as Administrator"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$downloadFolder = "$env:TEMP\DirectAppInstalls"
|
||||
New-Item -ItemType Directory -Force -Path $downloadFolder | Out-Null
|
||||
|
||||
# Function to temporarily disable Windows Defender
|
||||
function Disable-WindowsDefender {
|
||||
Write-Host "[*] Temporarily disabling Windows Defender real-time protection..."
|
||||
try {
|
||||
Set-MpPreference -DisableRealtimeMonitoring $true
|
||||
Write-Host " [OK] Windows Defender real-time protection disabled"
|
||||
return $true
|
||||
} catch {
|
||||
Write-Host " [!] Failed to disable Windows Defender: $($_.Exception.Message)"
|
||||
Write-Host " Continuing with installation anyway..."
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Function to re-enable Windows Defender
|
||||
function Enable-WindowsDefender {
|
||||
Write-Host "[*] Re-enabling Windows Defender real-time protection..."
|
||||
try {
|
||||
Set-MpPreference -DisableRealtimeMonitoring $false
|
||||
Write-Host " [OK] Windows Defender real-time protection re-enabled"
|
||||
} catch {
|
||||
Write-Host " [!] Failed to re-enable Windows Defender: $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to install application
|
||||
function Install-DirectApp {
|
||||
param(
|
||||
[string]$Name,
|
||||
[string]$Url,
|
||||
[string]$FileName,
|
||||
[string]$InstallArgs,
|
||||
[int]$TimeoutMinutes = 5
|
||||
)
|
||||
|
||||
Write-Host "Installing $Name..."
|
||||
Write-Host " URL: $Url"
|
||||
|
||||
$downloadPath = Join-Path $downloadFolder $FileName
|
||||
$success = $false
|
||||
|
||||
try {
|
||||
# Download
|
||||
Write-Host " Downloading..."
|
||||
Invoke-WebRequest -Uri $Url -OutFile $downloadPath -UseBasicParsing -TimeoutSec 120
|
||||
|
||||
if (Test-Path $downloadPath) {
|
||||
$fileSize = (Get-Item $downloadPath).Length / 1MB
|
||||
Write-Host " Downloaded: $([math]::Round($fileSize, 2)) MB"
|
||||
|
||||
# Install
|
||||
Write-Host " Installing with args: $InstallArgs"
|
||||
|
||||
if ($FileName.EndsWith(".msi")) {
|
||||
$process = Start-Process -FilePath "msiexec" -ArgumentList "/i", $downloadPath, $InstallArgs -Wait -PassThru
|
||||
} else {
|
||||
$argList = $InstallArgs.Split(' ') + $downloadPath
|
||||
$process = Start-Process -FilePath $downloadPath -ArgumentList $InstallArgs -Wait -PassThru -WindowStyle Hidden
|
||||
}
|
||||
|
||||
Write-Host " Process exit code: $($process.ExitCode)"
|
||||
|
||||
if ($process.ExitCode -eq 0 -or $process.ExitCode -eq 3010) {
|
||||
Write-Host " [OK] $Name installation completed successfully"
|
||||
$success = $true
|
||||
} else {
|
||||
Write-Host " [!] $Name installation may have failed (exit code: $($process.ExitCode))"
|
||||
# Some installers return non-zero codes even on success, so we'll verify later
|
||||
}
|
||||
|
||||
} else {
|
||||
Write-Host " [!] Download failed - file not found"
|
||||
}
|
||||
|
||||
} catch {
|
||||
Write-Host " [ERROR] $Name installation failed: $($_.Exception.Message)"
|
||||
} finally {
|
||||
# Clean up download
|
||||
if (Test-Path $downloadPath) {
|
||||
Remove-Item $downloadPath -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
|
||||
return $success
|
||||
}
|
||||
|
||||
# Applications to install
|
||||
$apps = @(
|
||||
@{
|
||||
Name = "AnyDesk"
|
||||
Url = "https://download.anydesk.com/AnyDesk.msi"
|
||||
FileName = "AnyDesk.msi"
|
||||
InstallArgs = "/quiet /norestart"
|
||||
},
|
||||
@{
|
||||
Name = "LINE"
|
||||
Url = "https://desktop.line-scdn.net/win/new/LineInst.exe"
|
||||
FileName = "LineInst.exe"
|
||||
InstallArgs = "/S"
|
||||
},
|
||||
@{
|
||||
Name = "Adobe Reader"
|
||||
Url = "https://ardownload2.adobe.com/pub/adobe/reader/win/AcrobatDC/2300820555/AcroRdrDC2300820555_en_US.exe"
|
||||
FileName = "AdobeReader.exe"
|
||||
InstallArgs = "/sAll /rs /msi EULA_ACCEPT=YES"
|
||||
}
|
||||
)
|
||||
|
||||
Write-Host "=== Starting Installation Process ==="
|
||||
Write-Host ""
|
||||
|
||||
# Disable Windows Defender
|
||||
$defenderDisabled = Disable-WindowsDefender
|
||||
|
||||
$installedCount = 0
|
||||
$totalApps = $apps.Count
|
||||
|
||||
try {
|
||||
foreach ($app in $apps) {
|
||||
Write-Host "[$($installedCount + 1)/$totalApps] $($app.Name)"
|
||||
|
||||
if (Install-DirectApp -Name $app.Name -Url $app.Url -FileName $app.FileName -InstallArgs $app.InstallArgs) {
|
||||
$installedCount++
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Start-Sleep -Seconds 3
|
||||
}
|
||||
|
||||
} finally {
|
||||
# Always re-enable Windows Defender
|
||||
if ($defenderDisabled) {
|
||||
Enable-WindowsDefender
|
||||
}
|
||||
}
|
||||
|
||||
# Clean up download folder
|
||||
Remove-Item $downloadFolder -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host "=== Installation Summary ==="
|
||||
Write-Host "Successfully installed: $installedCount / $totalApps applications"
|
||||
Write-Host ""
|
||||
|
||||
# Final verification
|
||||
Write-Host "=== Verification ==="
|
||||
|
||||
$verificationPaths = @(
|
||||
@{Name="AnyDesk"; Paths=@("C:\Program Files (x86)\AnyDesk\AnyDesk.exe", "C:\Program Files\AnyDesk\AnyDesk.exe")},
|
||||
@{Name="LINE"; Paths=@("C:\Users\$env:USERNAME\AppData\Local\LINE\bin\LineLauncher.exe", "C:\Program Files\LINE\bin\LineLauncher.exe")},
|
||||
@{Name="Adobe Reader"; Paths=@("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe", "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe")}
|
||||
)
|
||||
|
||||
foreach ($check in $verificationPaths) {
|
||||
$found = $false
|
||||
foreach ($path in $check.Paths) {
|
||||
if (Test-Path $path) {
|
||||
Write-Host "[OK] $($check.Name) - Found at $path"
|
||||
$found = $true
|
||||
break
|
||||
}
|
||||
}
|
||||
if (-not $found) {
|
||||
Write-Host "[!] $($check.Name) - Not found (may need restart or manual verification)"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Installation completed!"
|
||||
Write-Host "Note: Some applications may require restart to appear in Start Menu"
|
||||
Write-Host "Windows Defender real-time protection has been restored"
|
||||
Reference in New Issue
Block a user