<# .SYNOPSIS Adds JRiver Media Center folders & processes to Windows Defender exclusions .DESCRIPTION powershell -ExecutionPolicy Bypass -File .\jriver-exclusions.ps1 #> function Add-ItemExclusion { param( [string]$Item, [ValidateSet('Path','Process')]$Type ) try { if ($Type -eq 'Path') { Add-MpPreference -ExclusionPath $Item -ErrorAction Stop } else { Add-MpPreference -ExclusionProcess $Item -ErrorAction Stop } Write-Host "Added ${Type}: ${Item}" } catch { Write-Warning "Skipped/failed ${Type}: ${Item} - $_" } } Write-Host "Configuring JRiver Media Center (folders via wildcards, processes version 30–50)" # Folder exclusions (wildcards cover all files inside) $folders = @( 'C:\Program Files\J River', 'C:\Program Files\J River\Media Center *', "$Env:APPDATA\J River", "$Env:APPDATA\J River\Media Center *" ) # Process exclusions (explicit versions 30–50) $processes = @() for ($v = 30; $v -le 50; $v++) { $processes += "MC$v.exe" $processes += "Media Center $v.exe" } # Add static processes that are version-independent $processes += @('JRService.exe','JRWorker.exe','JRWeb.exe') # Add exclusions Write-Host "=== Adding folder exclusions ===" $folders | ForEach-Object { Add-ItemExclusion -Item $_ -Type Path } Write-Host "=== Adding process exclusions ===" $processes | Sort-Object -Unique | ForEach-Object { Add-ItemExclusion -Item $_ -Type Process } # Validation step $pref = Get-MpPreference Write-Host '' Write-Host "=== Current Defender exclusions ===" Write-Host "Paths:" $pref.ExclusionPath | ForEach-Object { Write-Host " $_" } Write-Host '' Write-Host "Processes:" $pref.ExclusionProcess | ForEach-Object { Write-Host " $_" } Write-Host '' Write-Host "=== Validation complete ==="