Site icon TheWindowsUpdate.com

Deploy Teams media optimization with Intune Proactive Remediation to Windows 365

This post has been republished via RSS; it originally appeared at: Device Management in Microsoft articles.

The Microsoft Windows 365 provides all the benefits of Windows, without any of the traditional hardware limitations. It is the most optimized Microsoft 365 powered compute experience delivered from Azure and managed by Microsoft. It is Microsoft’s best expression of Windows and M365 and is always secure and up to date.

Teams media optimization package includes Remote Desktop WebRTC Redirector Service and latest Microsoft Visual C++ Redistributable. With media optimization for Microsoft Teams, Windows 365 can handle audio and video locally for Teams and meetings. Windows 365 can have all the benefits of the modern media stack including HW video decoding with the high-performance peer-to-peer streaming facilitated by media optimization WebRTC. This feature effectively solves some user meeting issues like sound echo which they can encounter during Teams meeting without media optimization. It also provided the same audio and video experience as users who are using physical PCs.

Teams media optimization package has been integrated into the latest Windows 365 OS with integrated office apps. Users may not see audio or video issues initially when they join meetings with Teams if they are using office apps integrated version Windows 365. The below process is still helpful for remediation if Teams functionality is broken in the office apps integrated version. Additionally, if the users didn’t purchase office apps integrated Windows 365 version and they want to install office apps later, the below process is also helpful for them to deploy Teams media optimization package from scratch.

 

Prerequisites

Before you can use media optimization in Windows 365, the below prerequisites need to be prepared:

Deploy Teams media optimization with Intune Proactive Remediation

Navigate to the Intune portal https://endpoint.microsoft.com -> Reports -> Endpoint Analytics -> Proactive Remediations. Proactive remediations are script packages that can detect and fix common support issues on the user’s device. It also can be used to deploy customized Powershell scripts to the user device.

In Teams media optimization deployment, if users have Teams installed in ($env:ProgramData)\$env:USERNAME\Microsoft\Teams or in ($env:LOCALAPPDATA)\Microsoft\Teams, we need to uninstall it at first before we install media optimization. Teams media optimization only will be working under the scenario when media optimization is installed before the user profile Teams installation.

 

Detection Script 

#===========================================================================

# Script Name:     detectMedia.ps1

# Description:     Detect if Team media optimization has been installed and if it is installed, make sure it is

#                  installed after user profile Teams installation. if it is not installed or installed after

#                  user profile Teams installation, we need to remove Teams at first before installing media optimization.

#==========================================================================

$TeamsMediaFile = "C:\Program Files\Remote Desktop WebRTC Redirector\MsRdcWebRTCSvc.exe"

$TeamsMediaPath = "C:\Program Files\Remote Desktop WebRTC Redirector"

$TeamMediaFileExist = Test-Path -Path $TeamsMediaFile

$folders = Get-ChildItem -Path C:\users -Directory -force -ErrorAction SilentlyContinue |select fullname,name

$totalFolders = $folders.Count + $folders.Count

if($TeamMediaFileExist -eq $true )

{

    foreach($eachfolder in $folders)

    {

        $TeamsPath = $eachfolder.Fullname + "\AppData\Local\Microsoft\Teams"

        $TeamsUpdateExePath = $TeamsPath + "\Update.exe"

        $TeamsUpdateExist = Test-Path -Path $TeamsUpdateExePath

        $TeamsPathExist = Test-Path -Path $TeamsPath

         if ( $TeamsUpdateExist -eq $True )

        {

            $TeamsCreationTime = get-date ( (get-item -path $TeamsPath).LastWriteTime)

            $TeamsMediaCreationTime = get-date ( (get-item -path $TeamsMediaPath).CreationTime)

            if( $TeamsMediaCreationTime -lt $TeamsCreationTime)

            {

                $totalFolders = $totalFolders -1

            }

          }

        elseif( $TeamsPathExist -eq $false)

        {

           $totalFolders = $totalFolders -1

        } 

        $TeamsUserPath = "C:\ProgramData\" + $eachfolder.name + "\Microsoft\Teams"

        $TeamsUserUpdateExePath = $TeamsUserPath + "\Update.exe"

        $TeamsUserUpdateExist = Test-Path -Path $TeamsUserUpdateExePath

        $TeamsUserPathExist = Test-Path -Path $TeamsUserPath    

        if ( $TeamsUserUpdateExist -eq $True )

        {

            $TeamsCreationTime = get-date ( (get-item -path $TeamsUserPath).LastWriteTime)

            $TeamsMediaCreationTime = get-date ( (get-item -path $TeamsMediaPath).CreationTime)

            if( $TeamsMediaCreationTime -lt $TeamsCreationTime)

            {

                $totalFolders = $totalFolders -1

            }

        }

        elseif($TeamsUserPathExist -eq $false)

        {

            $totalFolders = $totalFolders - 1

        } 

    }

    $TeamsReg = "HKCU:\Software\Microsoft\Office\Teams"

#if this registry key is existing, it will block user profile Teams installation by Teams machine-wide installer.

    $TeamRegExist = test-path -path $TeamsReg

    if($TeamRegExist -eq $True)

    {

         $PreventInstallStateKey = Get-Item -Path $TeamsReg

         $preventInstall = $PreventInstallStateKey.GetValue("PreventInstallationFromMsi")

       }

    else { $preventInstall = $null}

 if(($totalFolders -eq 0) -and ($preventInstall -eq $null))     { write-host "Compliant"  exit 0}

else {

write-host “Not Compliant”

exit 1

}

}

else {

  write-host “Not Compliant”

  exit 1

}

 

Remediation Script 

#=========================================================================== 

# Script Name:     UninstallTeams_InstallMediaOptimization.ps1 

# Description:     Uninstall user profile Teams and Install Teams media #optimizatio. 

#========================================================================== 

 $folders = Get-ChildItem -Path C:\users -Directory -force -ErrorAction SilentlyContinue |select fullname,name 

 $TeamsReg = "HKCU:\Software\Microsoft\Office\Teams" 

 $TeamRegExist = test-path -path $TeamsReg 

 try 

{ 

    foreach($eachfolder in $folders) 

    { 

        $TeamsPath = $eachfolder.Fullname + "\AppData\Local\Microsoft\Teams" 

        $TeamsUpdateExePath = $TeamsPath + "\Update.exe" 

        $TeamsUserPath = "C:\ProgramData\" + $eachfolder.name + "\Microsoft\Teams" 

        $TeamsUserUpdateExePath = $TeamsUserPath + "\Update.exe" 

         if (Test-Path -Path $TeamsUpdateExePath)  

        { 

            Write-Host "Uninstalling Teams process" 

             # Uninstall Teams from user profile  

            $proc = Start-Process -FilePath $TeamsUpdateExePath -ArgumentList "-uninstall -s" -PassThru 

            $proc.WaitForExit() 

        } 

        if (Test-Path -Path $TeamsPath) { 

            Write-Host "Deleting Teams directory" 

            Remove-Item –Path $TeamsPath -Recurse 

        } 

         if (Test-Path -Path $TeamsUserUpdateExePath)  

        { 

            Write-Host "Uninstalling Teams process in ProgramData folder" 

             # Uninstall Teams from programdata folder 

            $proc = Start-Process -FilePath $TeamsUserUpdateExePath -ArgumentList "-uninstall -s" -PassThru 

            $proc.WaitForExit() 

        } 

        if (Test-Path -Path $TeamsUserPath) { 

            Write-Host "Deleting Teams directory" 

            Remove-Item –Path $TeamsUserPath -Recurse 

        } 

     } 

    # if this Teams preventinstallationFromMsi is existing, remove it to make user profile Teams installation  

    # be triggered by Teams machine-wide installer 

    if($TeamRegExist -eq $True) 

    { 

         $PreventInstallStateKey = Get-Item -Path $TeamsReg 

         $preventInstall = $PreventInstallStateKey.GetValue("PreventInstallationFromMsi")  

         if ($preventInstall -ne $null) 

         { 

            Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Office\Teams" -Name "PreventInstallationFromMsi" 

         }  

    } 

    #Install Teams media optimization 

    #Create a directory to save download files 

    $tempCreated = $false 

    if (!(Test-Path C:\temp)) { 

        New-Item -Path C:\ -ItemType Directory -Name temp 

         $tempCreated = $true 

    } 

     # Add registry Key 

    reg add "HKLM\SOFTWARE\Microsoft\Teams" /v IsWVDEnvironment /t REG_DWORD /d 1 /f /reg:64 

     #Download C++ Runtime 

    invoke-WebRequest -Uri https://aka.ms/vs/16/release/vc_redist.x64.exe -OutFile "C:\temp\vc_redist.x64.exe" 

     #Download WebRTC 

    invoke-WebRequest -Uri https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4AQBt -OutFile "C:\temp\MsRdcWebRTCSvc_HostSetup_1.0.2006.11001_x64.msi" 

     #Install C++ runtime 

   Start-Process "C:\temp\vc_redist.x64.exe" -ArgumentList @('/q', '/norestart') -NoNewWindow -Wait -PassThru 

     #Install MSRDCWEBTRCSVC 

    Start-Process msiexec.exe -ArgumentList '/i C:\temp\MsRdcWebRTCSvc_HostSetup_1.0.2006.11001_x64.msi /q /n' -Wait  

 

    if ($tempCreated) { 

        #Remove temp folder 

        Remove-Item -Path C:\temp\ -Recurse 

    } 

    else { 

        #Remove downloaded C++ Runtime file 

        Remove-Item -Path C:\temp\vc_redist.x64.exe 

         #Remove downloaded WebRTC file 

        Remove-Item -Path C:\temp\MsRdcWebRTCSvc_HostSetup_1.0.2006.11001_x64.msi 

    } 

         Write-host "Media Optimization Installed" 

        exit 0 

 } 

 catch 

 { 

        Write-Error -ErrorRecord $_ 

        exit /b 1 

 } 

  

Verify and test the media optimization 

  

 

 

 

Troubleshooting 

If users don’t see media optimization as in the above screenshots or Teams doesn’t automatically start after users log in Windows 365: 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Teams\ 

Name: IsWVDEnvironment 
Type: REG_DWORD 
Value: 1 

 

Note: This script/function is provided AS IS without warranty of any kind. Author(s) disclaim all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample scripts and documentation remains with you. In no event shall author(s) be held liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the script or documentation.

 

Exit mobile version