CmdLets/Master/Add-AntivirusExclusions.ps1
|
Function Add-AntivirusExclusions { <# .SYNOPSIS Adds Windows Defender antivirus exclusions for Omnissa Horizon Agent, Dynamic Environment Manager, App Volumes, and FSLogix components. .DESCRIPTION The Add-AntivirusExclusions function automates the configuration of Windows Defender exclusions required for Virtual Desktop Infrastructure (VDI) environments. It validates the presence of known executables and system paths related to Omnissa Horizon, App Volumes (CloudVolumes), and FSLogix profile containers, then registers them with Windows Defender using Add-MpPreference. .PARAMETER FSLogixPaths An optional array of directory paths (such as network shares hosting user profiles) to include when generating recursive VHD/VHDX file and lock file exclusions for FSLogix. .EXAMPLE Add-AntivirusExclusions Description: Runs the function to scan for and apply default exclusions for Omnissa Horizon and App Volumes components. .EXAMPLE Add-AntivirusExclusions -FSLogixPaths "\\fs01\profiles", "\\fs02\redirectedfolders" Description: Runs the function including specific FSLogix profile storage repository paths for VHD and VHDX exclusion rules. .NOTES Prerequisites: - Requires administrative privileges to modify Windows Defender preferences. - Requires the 'Defender' PowerShell module. .LINK https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/ #> [CmdletBinding()] param( [Parameter(Mandatory=$False)] $FSLogixPaths ) Import-Module Defender $Exclusions = @() $Paths = @( "C:\Program Files (x86)\Common Files\Omnissa\DeviceRedirectionCommon\ftnlping.exe", "C:\Program Files (x86)\Common Files\Omnissa\USB\\omnissa-usbarbitrator64.exe", "C:\Program Files\Common Files\Omnissa\DeviceRedirectionCommon\ftnlping.exe", "C:\Program Files\Common Files\Omnissa\DeviceRedirectionCommon\ftnlsv.exe", "C:\Program Files\Common Files\Omnissa\ScannerRedirection\diagutil32.exe", "C:\Program Files\Common Files\Omnissa\ScannerRedirection\diagutil64.exe", "C:\Program Files\Common Files\Omnissa\ScannerRedirection\ftscansvchv.exe", "C:\Program Files\Common Files\Omnissa\ScannerRedirection\scanmd.exe", "C:\Program Files\Common Files\Omnissa\ScannerRedirection\scanner.exe", "C:\Program Files\Common Files\Omnissa\SerialPortRedirection\Agent\hznsprrdctl.exe", "C:\Program Files\Common Files\Omnissa\SerialPortRedirection\Agent\hznsprrdp.exe", "C:\Program Files\Common Files\Omnissa\SerialPortRedirection\Agent\hznsprrdpsrv.exe", "C:\Program Files\Common Files\Omnissa\SerialPortRedirection\Agent\hznsprrdpUI.exe", "C:\Program Files\Common Files\Omnissa\Teradici PCoIP Server\x64\\pcoip_server_win32.exe", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\bin\\SecurityGateway.exe", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\bin\\tsdrvdisvc.dll", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\bin\\ws_scripthost.exe", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\bin\\wsnm.exe", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\bin\\wsnm_jms.exe", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\Blast\\VMBlastS.exe", "C:\Program Files\Omnissa\Horizon Agents\Horizon Agent\Blast\\VMBlastW.exe", "C:\Program Files\Omnissa\Horizon\Agent\VMBlastS.exe", "C:\Program Files\Omnissa\Horizon\Agent\VMBlastW.exe", "C:\Program Files\Omnissa\Horizon\Agent\bin\tsdrvdisvc.dll", "C:\Program Files\Omnissa\Horizon\Agent\bin\ws_scripthost.exe", "C:\Program Files\Omnissa\Horizon\Agent\bin\wsnm_jms.exe", "C:\Program Files\Omnissa\Horizon\Agent\bin\wssm.exe", "C:\Program Files\Omnissa\Horizon\Agent\bin\UrlRedirection\\horizon-url-filtering-plugin.dll", "C:\Program Files\Omnissa\Horizon\Agent\bin\UrlRedirection\\horizon-url-filtering-plugin-x64.dll", "C:\Program Files\Omnissa\Horizon\Agent\bin\UrlRedirection\\horizon-url-protocol-intercept.dll", "C:\Program Files\Omnissa\Horizon\Agent\bin\UrlRedirection\\horizon-url-protocol-launch-helper.exe", "C:\Program Files\Omnissa\Horizon\Agent\bin\UrlRedirection\x64\\horizon-url-protocol-intercept.dll", "C:\Program Files\Omnissa\Horizon\Agent\DCT\hzdct.exe", "C:\Program Files\Omnissa\Horizon\Agent\DCT\ws_diag.exe", "C:\Program Files\Omnissa\Horizon\Instant Clone Agent\omnissa-ic-ga.exe", "C:\Program Files\Immidio\Flex Profiles\FlexEngine.exe", "C:\Program Files\Immidio\Flex Profiles\FlexService.exe", "C:\Program Files\Immidio\Flex Profiles\Flex+ Self-Support.exe" ) ForEach ($Path in $Paths) { Write-Verbose "Testing: $Path" $File = Get-Item $Path -ErrorAction SilentlyContinue if ($File) { Write-Verbose "`tAdding to Exclusions" $Exclusions += @{ ExclusionProcess = $File.FullName } } } If (Test-Path "C:\Program Files (x86)\CloudVolumes\Agent\svservice.exe") { Write-Verbose "Adding CloudVolumes Exclusions" $Exclusions = $Exclusions + @( @{ ExclusionPath = "C:\Program Files (x86)\CloudVolumes\Agent\svservice.exe" }, @{ ExclusionPath = "C:\Program Files\Omnissa\AppVolumes\svservice.exe" }, @{ ExclusionPath = "C:\Program Files\Omnissa\AppVolumes\Agent\svservice.exe" }, @{ ExclusionPath = "C:\SnapVolumesTemp\svservice.exe" }, @{ ExclusionPath = "C:\SVROOT\svservice.exe" }, @{ ExclusionPath = "C:\{00000000-0000-0000-0000-000000000000}\SVROOT\svservice.exe" } ) } If ($FSLogixPaths) { Write-Verbose "Adding FSLogix Exclusions" $Exclusions = $Exclusions + @( @{ ExclusionPath = "%TEMP%\*\*.VHD" }, @{ ExclusionPath = "%TEMP%\*\*.VHDX" }, @{ ExclusionPath = "%Windir%\TEMP\*\*.VHD" }, @{ ExclusionPath = "%Windir%\TEMP\*\*.VHDX" }, @{ ExclusionPath = "%ProgramFiles%\FSLogix\Apps\frxdrv.sys" }, @{ ExclusionPath = "%ProgramFiles%\FSLogix\Apps\frxdrvvt.sys" }, @{ ExclusionPath = "%ProgramFiles%\FSLogix\Apps\frxccd.sys" }, @{ ExclusionPath = "%ProgramFiles%\FSLogix\Apps\frxccd.exe" }, @{ ExclusionProcess = "%ProgramFiles%\FSLogix\Apps\frxccds.exe" }, @{ ExclusionProcess = "%ProgramFiles%\FSLogix\Apps\frxsvc.exe" } ) $FSLogixPaths | ForEach-Object { $Exclusions = $Exclusions + @( @{ ExclusionPath = (Join-Path $_ "*\*.VHD") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHD.lock") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHD.meta") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHD.metadata") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHDX") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHDX.lock") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHDX.meta") }, @{ ExclusionPath = (Join-Path $_ "*\*.VHDX.metadata") } ) } } $Exclusions | ForEach-Object { Write-Host "Adding Exclusion: $($_.Values)" Add-MpPreference @_ } } |