HomeApp RingCentral > Amministratore
Desktop e web

Disinstallazione delle app RingCentral utilizzando uno script PowerShell
su un sistema Windows | RingEX

Ottimizza la tua esperienza con RingCentral Video. Maggiori informazioni.
 
Nel tempo, gli ambienti degli utenti possono risultare disordinati a causa di più versioni dell'app RingCentral. I comandi di PowerShell consentono di rimuovere queste versioni precedenti. L'esecuzione di questo script come amministratore rimuove eventuali installazioni a livello di sistema dell'app RingCentral, dopodiché è possibile installare la versione corrente dell'app. Quando un amministratore esegue lo script su un computer con più utenti, RingCentral viene disinstallato per tutti.
 
Questo articolo mostra due script:

Scarica lo script PowerShell

Questo script pulisce le seguenti app in esecuzione su un sistema operativo Windows:
  • App RingCentral Meetings
  • Plug-in RingCentral Meetings Outlook
  • App RingCentral Classic
  • App RingCentral
  • RingCentral Phone

Note di utilizzo

Lo script deve essere eseguito dopo aver effettuato l'accesso come amministratore di sistema. Tutte le versioni precedenti dell'app RingCentral e tutte le scelte rapide verranno rimosse per tutti gli utenti. 
 
Durante l'esecuzione di questo script, RingEX non risponderà.

Avviso legale

Si prega di leggere la dichiarazione di non responsabilità prima di utilizzare lo script. Questo script è open-source e soggetto ai termini della licenza MIT. 
 
Questo script viene fornito come strumento per gli amministratori IT per rimuovere a livello di programma l'app RingCentral Classic precedente dai dispositivi degli utenti finali.
 
Consigliamo inoltre di testare prima questo script per accertarsi che consegua i risultati desiderati.
 
RingCentral non fornisce alcuna dichiarazione in merito al fatto che lo script contenga errori o bug. Eventuali bug o errori nello script possono produrre un risultato indesiderato. Inoltre, qualsiasi modifica o cambiamento involontario effettuato dall'utente potrebbe avere effetti indesiderati. Se si riscontrano problemi con lo script, è necessario interrompere immediatamente l'utilizzo e gestire manualmente la rimozione dell'applicazione RingCentral Classic. 
 
Ciascuno utilizza il software a proprio rischio e pericolo. Nella misura massima consentita dalla legge, RingCentral non sarà responsabile per perdite o danni di qualsiasi natura (diretti, indiretti, consequenziali o di altro tipo) causati dall'uso di questo script.

Disinstallazione delle versioni Windows delle app RingCentral

Script preliminare

Questo script preliminare deve essere eseguito prima di eseguire uno di quelli che seguono.
  • La prima riga garantisce che eventuali errori di PowerShell vengano acquisiti nel file di registro oltre a essere visualizzati nella finestra di PowerShell.
  • La seconda riga imposta la posizione del file di registro. Dovrebbe essere impostata in un'area esistente nel sistema locale dell'utente.
  • La terza riga imposta il formato di data/ora da utilizzare nel file di registro.
  • Lo script verifica quindi di essere in esecuzione come amministratore e si interrompe in caso contrario.
$ErrorActionPreference = "Stop"
$logfile = "C:\temp\$(gc env:computername)-remove-RCApps.log"
$dtFormat = 'dd-MMM-yyyy HH:mm:ss'
add-content $logfile -value "----------------------------------------------------------------------------------------------------"
add-content $logfile -value "$(Get-Date -Format $dtFormat) Attempting to remove RC apps"
$isAdmin = (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
add-content $logfile -value "$(Get-Date -Format $dtFormat) Running in Administrator context: $isAdmin"
if (!$isAdmin){
    add-content $logfile -value "$(Get-Date -Format $dtFormat) Script must be executed as an administrator: powershell.exe -noprofile -executionpolicy Bypass -file `"admin.ps1`""
    exit(-5)
 

Per interrompere eventuali applicazioni RingCentral in esecuzione

Questa parte dello script interrompe qualsiasi processo sul sistema informatico corrente per tutti gli utenti attualmente connessi. Le applicazioni RingCentral a cui ha accesso l'amministratore vengono rimosse.
get-process | where-object {$_.Company -like "*RingCentral*" -or $_.Path -like "*RingCentral*"} | stop-process -ErrorAction ignore -Force

Per interrompere le applicazioni RingCentral installate che l'amministratore può rimuovere

foreach ($app in (Get-WmiObject -Class Win32_Product | Where-Object{$_.Vendor -like "*RingCentral*"})) {
    add-content $logfile -value "$(Get-Date -Format $dtFormat) Attempting to uninstall $($app)"
    try {
        $app.Uninstall() | Out-Null 
    } catch {
        add-content $logfile -value $_

Per rimuovere eventuali chiavi di disinstallazione del sistema

Questa sezione dello script pulisce le chiavi di registro relative alla disinstallazione per rimuovere le voci per le applicazioni RingCentral. Se la sezione di disinstallazione include un programma di disinstallazione, lo script tenta di utilizzarlo prima di rimuovere la chiave di registro.
$paths = @("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 
           "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
foreach($path in $paths) {
    if (test-path($path)) {
        $list = Get-ItemProperty "$path\*" | Where-Object {$_.DisplayName -like "*RingCentral*"} | Select-Object -Property PSPath, UninstallString
        foreach($regkey in $list) {
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Examining Registry Key $($regkey.PSpath)"
            try {
                $cmd = $regkey.UninstallString
                if ($cmd -like "msiexec.exe*") {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Uninstall string is using msiexec.exe"
                    if ($cmd -notlike "*/X*") { 
                        add-content $logfile -value "$(Get-Date -Format $dtFormat)     no /X flag - this isn't for uninstalling"
                        $cmd = "" 
                    } #don't do anything if it's not an uninstall
                    elseif ($cmd -notlike "*/qn*") { 
                        add-content $logfile -value "$(Get-Date -Format $dtFormat)     adding /qn flag to try and uninstall quietly"
                        $cmd = "$cmd /qn" 
                    } #don't display UI
                }
                if ($cmd) {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     executing $($cmd)"
                    cmd.exe /c "$($cmd)"
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     done"
                }
            } catch {
                add-content $logfile -value $_
            }
        }
        $list = Get-ItemProperty "$path\*" | Where-Object {$_.DisplayName -like "*RingCentral*"} | Select-Object -Property PSPath
        foreach($regkey in $list) {
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Removing Registry Key $($regkey.PSpath)"
            try {
                remove-item $regkey.PSPath -recurse -force
            } catch {
                add-content $logfile -value $_
            }
        }
    } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }
}

Aggiungere scelta rapida a HKEY_USERS

Questa sezione dello script aggiunge una scelta rapida all'hive di registro HKEY_USERS e imposta quindi le variabili per le posizioni standard di Windows.
New-PSDrive -PSProvider registry -Root HKEY_USERS        -Name HKU  | Out-Null
if (test-path(${Env:ProgramFiles(x86)})) { $pf86 = ${Env:ProgramFiles(x86)} }  else { $pf86 = "C:\Program Files (x86)" }
add-content $logfile -value "$(Get-Date -Format $dtFormat) Program Files (x86) location: $($pf86)"
if (test-path(${Env:ProgramFiles}))      { $pf = ${Env:ProgramFiles} }         else { $pf = "C:\Program Files" }
add-content $logfile -value "$(Get-Date -Format $dtFormat) Program Files location: $($pf)"
if (test-path(${Env:ProgramData}))       { $pd = ${Env:ProgramData} }          else { $pd = "C:\ProgramData" }
add-content $logfile -value "$(Get-Date -Format $dtFormat) ProgramData location: $($pd)"
if (test-path(${Env:PUBLIC}))            { $pub = ${Env:PUBLIC} }              else { $pub = "C:\Users\Public" }
add-content $logfile -value "$(Get-Date -Format $dtFormat) Public profile location: $($pub)"
if (test-path(${Env:SystemRoot}))        { $win = ${Env:SystemRoot} }          else { $win = "C:\Windows" }
add-content $logfile -value "$(Get-Date -Format $dtFormat) Windows root location: $($win)"

Popolare le liste di elementi da rimuovere

In questa sezione, lo script consente di impostare il brand per consentire la rimozione di vari elementi con brand. Impostare una raccolta di elementi da rimuovere da HKEY_LOCAL_MACHINE e quindi rimuovere ciascuno di essi se esiste.
 
Per vedere il risultato di ogni test, eliminare il commento dall'istruzione ##else. 
$Brand = "RingCentral"  #RingCentral/TELUS/ATT/Avaya/BT/Rainbow/Unify
add-content $logfile -value "$(Get-Date -Format $dtFormat) Brand set to: $($Brand)"
$HKLM = [System.Collections.ArrayList]@()
$HKLM.add("HKLM:\SOFTWARE\$Brand") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\.rcrecord") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\.zoomrc") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\MIME\Database\Content Type\application/x-rcmtg-launcher") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RCLauncher") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentralMeetingsRecording") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\rcapp") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\rcmobile") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\rcsp") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\rcuk") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\rcvdt") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentral.callto") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentral.fax") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentral.rcmobile") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentral.rcsp") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentral.rcuk") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\RingCentral.tel") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Classes\zoomrc") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\IM Providers\RCIM") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\InternetPrinters") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\Microsoft\Office\Outlook\Addins\RingCentralForOutlook") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\RingCentralForOutlook") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\RingCentralInternetFax") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\RingCentralMeetings") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\$Brand") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\.rcrecord") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\.zoomrc") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\MIME\Database\Content Type\application/x-rcmtg-launcher") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RCLauncher") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentralMeetingsRecording") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\rcapp") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\rcmobile") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\rcsp") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\rcuk") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\rcvdt") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentral.callto") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentral.fax") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentral.rcmobile") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentral.rcsp") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentral.rcuk") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\RingCentral.tel") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Classes\zoomrc") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\IM Providers\RCIM") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\InternetPrinters") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\Microsoft\Office\Outlook\Addins\RingCentralForOutlook") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\RingCentralForOutlook") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\RingCentralInternetFax") | Out-Null
$HKLM.add("HKLM:\SOFTWARE\WOW6432Node\RingCentralMeetings") | Out-Null
foreach ($regkey in $HKLM) {
    try {
        if (test-path($regkey)) {
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Removing Registry Key $($regkey)"
            remove-item $regkey -recurse -force
        } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Registry Key $($regkey) not found" }
    } catch {
        add-content $logfile -value $_
    }
}

Impostare le cartelle da rimuovere

Questa parte dello script consente di impostare una raccolta di cartelle/file da eliminare a livello di computer. Vengono utilizzate le variabili impostate nella sezione Aggiunti scelta rapida a HKEY_Users dello script per le posizioni standard di Windows e il controllo delle posizioni a 64 e 32 bit.
 
Verificare se il percorso esiste e forzare in modo ricorrente la rimozione in caso affermativo.
 
È nuovamente possibile rimuovere il commento da ##else per controllare ogni rimozione.
$MachineFolders = [System.Collections.ArrayList]@()
$MachineFolders.add("$pd\Glip") | Out-Null
$MachineFolders.add("$pd\Microsoft\Windows\Start Menu\Programs\*RingCentral*") | Out-Null
$MachineFolders.add("$pf86\$Brand\SoftPhoneApp") | Out-Null
$MachineFolders.add("$pf86\Common Files\RingCentral") | Out-Null
$MachineFolders.add("$pf86\Glip") | Out-Null
$MachineFolders.add("$pf86\RingCentral Classic Installer") | Out-Null
$MachineFolders.add("$pf86\RingCentral Installer") | Out-Null
$MachineFolders.add("$pf86\RingCentralForOutlook") | Out-Null
$MachineFolders.add("$pf86\RingCentralMeetings") | Out-Null
$MachineFolders.add("$pf\$Brand\SoftPhoneApp") | Out-Null
$MachineFolders.add("$pf\Common Files\RingCentral") | Out-Null
$MachineFolders.add("$pf\Glip") | Out-Null
$MachineFolders.add("$pf\RingCentral Classic Installer") | Out-Null
$MachineFolders.add("$pf\RingCentral Installer") | Out-Null
$MachineFolders.add("$pf\RingCentralForOutlook") | Out-Null
$MachineFolders.add("$pf\RingCentralMeetings") | Out-Null
$MachineFolders.add("$pub\Desktop\RingCentral*.lnk") | Out-Null
$MachineFolders.add("$win\Prefetch\*GLIP*.pf") | Out-Null
$MachineFolders.add("$win\Prefetch\*RINGCENTRAL*.pf") | Out-Null
$MachineFolders.add("$win\Prefetch\*SOFTPHONE*.pf") | Out-Null
foreach ($item in $MachineFolders) {
    try {
        if (test-path($item)) {
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Removing $($item)"
            remove-item $item -recurse -force
        } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }
    } catch {
        add-content $logfile -value $_
    }
}

Riprodurre a ciclo continuo la chiave HKLM per rimuovere le voci RC

Questa parte dello script analizza i percorsi specificati, esaminando la proprietà e il valore per le citazioni di RingCentral ed eliminandoli se trova la stringa. Le regole del firewall vengono rimosse se sono state impostate da un programma di installazione di RingCentral.
$paths = @("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders",
           "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\UFH\ARP",
           "HKLM:\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules",
           "HKLM:\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules")
foreach($path in $paths) {
    if (test-path($path)) {
        add-content $logfile -value "$(Get-Date -Format $dtFormat) Checking registry path: $($path)"
        Get-Item -Path $path | Select-Object -ExpandProperty Property | % {
            $propValue = (Get-ItemProperty -Path "$path" -Name "$_")."$_"
            if (($_ -like "*RingCentral*") -or ($propValue -like "*RingCentral*")) {
                try {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Removing property: $($_) containing value: $($propValue)"
                    Remove-ItemProperty -path "$path" -Name $_
                } catch {
                    add-content $logfile -value $_
                }
            }
        }
    } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }
}

Creare una lista di elementi che devono essere rimossi per ogni profilo utente

In questa parte dello script si impostano le raccolte di chiavi utente da esaminare per ogni profilo. Usa HKEY_USERS e abbina con il SID dell'utente.
 
Le cartelle dell'utente cercheranno le posizioni nel registro quando si lavora sulla rimozione dei dettagli RingCentral per l'utente specificato.
$HKU = [System.Collections.ArrayList]@()
$HKU.add("HKU:\%SID%\SOFTWARE\$Brand") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\584acf4c-ebc3-56fa-9cfd-586227f098ba") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\Clients\Internet Call\RingCentral for Windows") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\IM Providers\RCIM") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\Microsoft\Internet Explorer\ProtocolExecute\zoomrc") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\Microsoft\Internet Explorer\Zoom") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts\rcapp_rcapp") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts\zoomrc_zoomrc") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\MozillaPlugins\@ringcentral.com/RingCentralMeetingsPlugin") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\RingCentral Softphone") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\$Brand") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Classes\MIME\Database\Content Type\application/x-rcmtg-launcher") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Classes\rcapp") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Classes\rcmobile") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Classes\rcvdt") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Classes\zoomrc") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\IM Providers\RCIM") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Clients\Internet Call\RingCentral for Windows") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\ProtocolExecute\zoomrc") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Zoom") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts\rcapp_rcapp") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts\zoomrc_zoomrc") | Out-Null
$HKU.add("HKU:\%SID%\SOFTWARE\WOW6432Node\RingCentral Softphone") | Out-Null
$HKU.add("HKU:\%SID%_classes\.rcrecord") | Out-Null
$HKU.add("HKU:\%SID%_classes\.zoomrc") | Out-Null
$HKU.add("HKU:\%SID%_classes\MIME\Database\Content Type\application/x-rcmtg-launcher") | Out-Null
$HKU.add("HKU:\%SID%_classes\RCLauncher") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentralMeetingsRecording") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentralMeetingsRecording") | Out-Null
$HKU.add("HKU:\%SID%_classes\rcapp") | Out-Null
$HKU.add("HKU:\%SID%_classes\rcmobile") | Out-Null
$HKU.add("HKU:\%SID%_classes\rcsp") | Out-Null
$HKU.add("HKU:\%SID%_classes\rcuk") | Out-Null
$HKU.add("HKU:\%SID%_classes\rcvdt") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentral.callto") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentral.fax") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentral.rcmobile") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentral.rcsp") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentral.rcuk") | Out-Null
$HKU.add("HKU:\%SID%_classes\RingCentral.tel") | Out-Null
$HKU.add("HKU:\%SID%_classes\zoomrc") | Out-Null
 
$UserFolders = [System.Collections.ArrayList]@()
$UserFolders.add("%desktop%\RingCentral Classic.lnk") | Out-Null
$UserFolders.add("%desktop%\RingCentral Meetings.lnk") | Out-Null
$UserFolders.add("%desktop%\RingCentral.lnk") | Out-Null
$UserFolders.add("%local%\$Brand") | Out-Null
$UserFolders.add("%local%\$Brand\SoftPhoneApp") | Out-Null
$UserFolders.add("%local%\Glip") | Out-Null
$UserFolders.add("%local%\Programs\RingCentral") | Out-Null
$UserFolders.add("%local%\RingCentral") | Out-Null
$UserFolders.add("%local%\RingCentral\RingCentral Classic") | Out-Null
$UserFolders.add("%local%\RingCentral\RingCentral") | Out-Null
$UserFolders.add("%local%\SquirrelTemp") | Out-Null
$UserFolders.add("%local%\Temp\Glip Crashes") | Out-Null
$UserFolders.add("%local%\ringcentral-updater") | Out-Null
$UserFolders.add("%roaming%\.rc-persist") | Out-Null
$UserFolders.add("%roaming%\Glip") | Out-Null
$UserFolders.add("%roaming%\JabraSDK") | Out-Null
$UserFolders.add("%roaming%\Microsoft\Windows\Start Menu\Programs\RingCentral Meetings") | Out-Null
$UserFolders.add("%roaming%\Microsoft\Windows\Start Menu\Programs\RingCentral") | Out-Null
$UserFolders.add("%roaming%\Microsoft\Windows\Start Menu\Programs\RingCentral*.lnk") | Out-Null
$UserFolders.add("%roaming%\Microsoft\Windows\Start Menu\Programs\RingCentral\RingCentral Classic.lnk") | Out-Null
$UserFolders.add("%roaming%\Microsoft\Windows\Start Menu\Programs\Startup\RingCentral*.lnk") | Out-Null
$UserFolders.add("%roaming%\RingCentral") | Out-Null
$UserFolders.add("%roaming%\RingCentralMeetings") | Out-Null
$UserFolders.add("%roaming%\RingCentral\logs") | Out-Null
$UserFolders.add("%roaming%\ZoomSDK") | Out-Null
$UserFolders.add("%roaming%\com.ringcentral.rcoutlook") | Out-Null

Per ogni profilo utente sul computer, rimuovere le chiavi di registro e le cartelle associate per ogni applicazione RingCentral

In questa parte dello script, vengono disinstallate manualmente le applicazioni RingCentral per ciascun profilo utente sul sistema.
 
Fare riferimento a una lista di utenti dal registro e verifica quali hive sono caricati e quali no, inclusi i profili di sistema poiché alcuni componenti potrebbero essere installati in essi. Il profilo predefinito viene aggiunto se sono state applicate impostazioni per gli utenti appena creati.
 
Se l'hive non è caricato (ovvero l'utente non è connesso), lo script carica i dettagli NTUSER.dat e UsrClass.dat dell'utente in modo che le chiavi di registro possano essere aggiornate.
 
Lo script trova anche le posizioni delle cartelle desktop, appdata e appdata locali dell'utente per poter rimuovere le cartelle create dalle installazioni EXE.
add-content $logfile -value "$(Get-Date -Format $dtFormat) Removing applications for all user profiles"
$ProfileList = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*' | Select-Object @{name="SID";expression={$_.PSChildName}}, @{name="UserProfile";expression={"$($_.ProfileImagePath)"}}, @{name="Username";expression={$_.ProfileImagePath -replace '^(.*[\\\/])', ''}}
$DefaultProfile = "" | Select-Object SID, UserProfile, Username
$DefaultProfile.SID = ".DEFAULT"
$DefaultProfile.UserProfile = "$pub\..\Default"
$DefaultProfile.UserName = "Default"
$ProfileList += $DefaultProfile
$LoadedHives = Get-ChildItem HKU:\ | Where-Object {$_.PSChildname -match $PatternSID} | Select-Object @{name="SID";expression={$_.PSChildName}}
$UnloadedHives = Compare-Object $ProfileList.SID $LoadedHives.SID | Select-Object @{name="SID";expression={$_.InputObject}}, UserHive, Username
foreach ($item in $ProfileList) {
    try {
        if ($item.SID -in $UnloadedHives.SID) {
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Loading profile $($item.username) - located at $($item.UserProfile)\ntuser.dat"
            reg load HKU\$($item.SID) "$($item.UserProfile)\ntuser.dat" | Out-Null
        } else { 
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Checking profile $($item.username)"
        }
        
        $folders = "HKU:\$($item.sid)\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
        $desktop = (Get-Item -Path $folders).GetValue("Desktop", "$($item.UserProfile)\Desktop", "DoNotExpandEnvironmentNames") -replace "%USERPROFILE%", $item.UserProfile
        add-content $logfile -value "$(Get-Date -Format $dtFormat)     User Desktop location: $($desktop)"
        $local = (Get-Item -Path $folders).GetValue("Local AppData", "$($item.UserProfile)\AppData\Local", "DoNotExpandEnvironmentNames") -replace "%USERPROFILE%", $item.UserProfile
        add-content $logfile -value "$(Get-Date -Format $dtFormat)     User Local AppData location: $($local)"
        $roaming = (Get-Item -Path $folders).GetValue("AppData", "$($item.UserProfile)\AppData\Roaming", "DoNotExpandEnvironmentNames") -replace "%USERPROFILE%", $item.UserProfile
        add-content $logfile -value "$(Get-Date -Format $dtFormat)     User AppData location: $($roaming)"
        if ($item.SID -in $UnloadedHives.SID) {
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Loading user classes for profile $($item.username) - located at $($local)\Microsoft\Windows\UsrClass.dat"
            reg load HKU\$($item.SID)_classes "$($local)\Microsoft\Windows\UsrClass.dat" | Out-Null
        }

Rimuovere chiavi di registro

Rimuovere le chiavi di registro e le cartelle specificate del file system. Eliminare il commento da ##else ove applicabile per vedere ogni controllo effettuato nel file di registro.
foreach ($regkey in $HKU) {
            try {
                $key = $regkey -replace "%SID%", $item.SID
                if (test-path($key)) {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Removing Registry Key $($key)"
                    remove-item $key -recurse -force
                } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat)     Registry Key $($key) not found" }
            } catch {
                add-content $logfile -value $_
            }
        }
        
        foreach ($path in $UserFolders) {
            $temp = (($path -replace "%roaming%", $roaming) -replace "%local%", $local) -replace "%desktop%", $desktop 
            try {
                if (test-path($temp)) {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Removing $($temp)"
                    remove-item $temp -recurse -force
                } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat)     Path $($temp) not found" }
            } catch {
                add-content $logfile -value $_
            }
        }

Rimuovere eventuali chiavi di disinstallazione utente

Rimuovere tutte le voci di disinstallazione in modo che i programmi non appaiano in Aggiungi/rimuovi programmi. Rimuovere anche dal programma di installazione le sezioni del registro per garantire che la reinstallazione non richieda all'utente di rimuovere/riparare il software.
     $paths = @("HKU:\$($item.sid)\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", "HKU:\$($item.sid)\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
        foreach($path in $paths) {
            if (test-path($path)) {
                $list = Get-ItemProperty "$path\*" | Where-Object {$_.DisplayName -like "*RingCentral*"} | Select-Object -Property PSPath
                foreach($regkey in $list) {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Removing Uninstall Registry Key $($regkey.PSPath)"
                    try {
                        remove-item $regkey.PSPath -recurse -force
                    } catch {
                        add-content $logfile -value $_
                    }
                }
            } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }
        }

Rimuovere eventuali chiavi di installazione dell'utente nell'hive dell'utente e nella parte dei dati utente del computer locale

Questa parte dello script controlla le chiavi di registro specificate, rimuovendo la proprietà se essa o il suo valore contiene RingCentral. Se l'utente non ha effettuato l'accesso, gli hive di registro caricati vengono scaricati.
        $paths = @("HKU:\$($item.sid)\SOFTWARE\WOW6432Node\Microsoft\Installer\Products", "HKU:\$($item.sid)\SOFTWARE\Microsoft\Installer\Products")
        foreach($path in $paths) {
            if (test-path($path)) {
                $list = Get-ItemProperty "$path\*" | Where-Object {$_.ProductName -like "*RingCentral*"} | Select-Object -Property PSPath
                foreach($regkey in $list) {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Removing Install Registry Key $($regkey.PSPath)"
                    try {
                        remove-item $regkey.PSPath -recurse -force
                    } catch {
                        add-content $logfile -value $_
                    }
                }
            } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }
        }
        $paths = @("HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Installer\UserData\$($item.sid)\Products", 
                   "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\$($item.sid)\Products")
        foreach($path in $paths) {
            if (test-path($path)) {
                $list = Get-ItemProperty "$path\*\*" | Where-Object {$_.Publisher -like "*RingCentral*"} | Select-Object -Property PSParentPath
                foreach($regkey in $list) {
                    add-content $logfile -value "$(Get-Date -Format $dtFormat)     Removing Install Registry Key $($regkey.PSParentPath)"
                    try {
                        remove-item $regkey.PSParentPath -recurse -force
                    } catch {
                        add-content $logfile -value $_
                    }
                }
            } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }

Riprodurre a ciclo continuo le chiavi e rimuovere eventuali voci RingCentral

$paths = @("HKU:\$($item.sid)_classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache", 
                   "HKU:\$($item.sid)\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FeatureUsage\AppBadgeUpdated", 
                   "HKU:\$($item.sid)\SOFTWARE\Microsoft\Windows\CurrentVersion\UFH\SHC")
        foreach($path in $paths) {
            if (test-path($path)) {
                add-content $logfile -value "$(Get-Date -Format $dtFormat)     Checking registry path: $($path)"
                Get-Item -Path $path | Select-Object -ExpandProperty Property | % {
                    $propValue = (Get-ItemProperty -Path "$path" -Name "$_")."$_"
                    if (($_ -like "*RingCentral*") -or ($propValue -like "*RingCentral*")) {
                        try {
                            add-content $logfile -value "$(Get-Date -Format $dtFormat)         Removing property: $($_) containing value: $($propValue)"
                            Remove-ItemProperty -path "$path" -Name $_
                        } catch {
                            add-content $logfile -value $_
                        }
                    }
                }
            } ##else { add-content $logfile -value "$(Get-Date -Format $dtFormat) Path $($item) not found" }
        }
        if ($item.SID -in $UnloadedHives.SID) {
            [gc]::Collect()
            add-content $logfile -value "$(Get-Date -Format $dtFormat) Unloading profile"
            reg unload HKU\$($item.SID) | Out-Null
            reg unload HKU\$($item.SID)_classes | Out-Null
        }
    } catch {
        add-content $logfile -value $_
    }
}

Reinstallare applicazioni

Per reinstallare le applicazioni, se desiderato, eliminare il commento (#) prima dell'esecuzione, incluso il commento del file di registro. Verificare che il percorso del file MSI sia corretto.  
 
Nota: i file EXE non devono essere distribuiti utilizzando questo script, poiché così facendo si installa l'applicazione per l'account amministratore, non per l'account utente.
add-content $logfile -value "$(Get-Date -Format $dtFormat) Installing required applications"
#add-content $logfile -value "$(Get-Date -Format $dtFormat)     Installing RingCentral MSI app quietly"
#cmd.exe /c 'MSIEXEC.EXE /i "RingCentral-x64.msi" /qn'
#add-content $logfile -value "$(Get-Date -Format $dtFormat)     Installing RingCentral Meetings MSI app quietly"
#cmd.exe /c 'MSIEXEC.EXE /i "RCMeetingsClientSetup.msi" /qn'
#add-content $logfile -value "$(Get-Date -Format $dtFormat)     Installing RingCentral Phone MSI app quietly"
#cmd.exe /c 'MSIEXEC.exe /i "RingCentral-Phone-21.1.0.msi" ALLUSERS=1 /qn'
add-content $logfile -value "$(Get-Date -Format $dtFormat) End of install script"

Disinstallazione solo dell'app RingCentral Classic

Nel tempo, gli ambienti degli utenti possono risultare disordinati a causa di più versioni dell'app RingCentral. I comandi di PowerShell consentono di rimuovere queste versioni precedenti. L'esecuzione di uno script come amministratore rimuove eventuali installazioni a livello di sistema dell'app RingCentral, dopodiché è possibile installare la versione corrente dell'app. Quando un amministratore esegue lo script su un computer con più utenti, RingCentral Classic viene disinstallato per tutti.

Note di utilizzo

Lo script deve essere eseguito dopo aver effettuato l'accesso come amministratore di sistema. Tutte le versioni precedenti di RingCentral Classic e tutte le scelte rapide verranno rimosse per tutti gli utenti. Inoltre, lo script ha un'opzione per rimuovere le directory che dovrebbero essere utilizzate solo quando è confermato che nessun utente sta memorizzando file in esse.

Per rimuovere la cartella utilizzata da RC Classic, rimuovere il carattere dalle quattro righe nello script che iniziano con -Force. Ci sono quattro righe in cui ciò si verifica. La seconda fa sì che lo script cerchi un'installazione a 32 bit su una macchina a 64 bit, la terza e la quarta riga rimuovono le restanti cartelle dei messaggi all'interno della directory AppData degli utenti.
 
Durante l'esecuzione di questo script, RingEX non risponderà.

Avviso legale

Si prega di leggere la dichiarazione di non responsabilità prima di utilizzare lo script. Questo script è open-source e soggetto ai termini della licenza MIT.                                       
 
Questo script viene fornito come strumento per gli amministratori IT per rimuovere a livello di programma l'app RingCentral Classic precedente dai dispositivi degli utenti finali.
                                            
Consigliamo inoltre di testare prima questo script per accertarsi che consegua i risultati desiderati.             
 
RingCentral non fornisce alcuna dichiarazione in merito al fatto che lo script contenga errori o bug.  Eventuali bug o errori nello script possono produrre un risultato indesiderato.  Inoltre, qualsiasi modifica o cambiamento involontario effettuato dall'utente potrebbe avere effetti indesiderati. Se si riscontrano problemi con lo script, è necessario interrompere immediatamente l'utilizzo e gestire manualmente la rimozione dell'applicazione RingCentral Classic.      
 
Ciascuno utilizza il software a proprio rischio e pericolo. Nella misura massima consentita dalla legge, RingCentral non sarà responsabile per perdite o danni di qualsiasi natura (diretti, indiretti, consequenziali o di altro tipo) causati dall'uso di questo script.

Interrompere eventuali applicazioni RingCentral in esecuzione

Questo codice tenta di arrestare le applicazioni se sono attualmente in esecuzione. Se non sono in esecuzione, lo script potrebbe produrre un errore generato dal tentativo di arrestare un processo che non esiste. Se ciò accade, ignorare l'errore.
 
Nota: i processi dell'app RingEX si arrestano anche durante l'esecuzione di questo script.
stop-process -ProcessName "RingCentral" -ErrorAction ignore
stop-process -ProcessName "RingCentral Classic" -ErrorAction ignore

Per disinstallare eventuali applicazioni RingCentral Classic MSI installate

Questa parte dello script utilizza Strumentazione gestione Windows (WMI) per verificare la presenza di prodotti installati il cui nome è RingCentral Classic. Per ogni occorrenza trovata, WMI chiama la routine di disinstallazione per quel prodotto. Un utente che abbia installato le applicazioni MSI dispone dell'autorizzazione per rimuoverle.
 
Qualsiasi output generato viene scartato.
 
La chiamata di Get-WmiObject può essere lenta, in genere richiede almeno 20-30 secondi per ottenere la lista. È probabile che l'esecuzione di Get-WmiObject su una macchina richieda almeno 20 secondi.
foreach ($app in (Get-WmiObject -Class Win32_Product | Where-Object{$_.Name -like "*RingCentral Classic*"})) {
$app.Uninstall() | Out-Null

Per rimuovere RingCentral Classic per ogni utente sul computer

RingCentral Classic può essere disinstallato per ogni profilo utente su una macchina utilizzando questo codice. La stringa di disinstallazione nel registro per RingCentralClassic consente a un amministratore di disinstallare l'applicazione per conto dell'utente.
$PatternSID = 'S-1-5-21-\d+-\d+\-\d+\-\d+$'
$ProfileList = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*' |
Where-Object {$_.PSChildName -match $PatternSID} |
Select  @{name="SID";expression={$_.PSChildName}}, @{name="ProfileImagePath";expression={$_.ProfileImagePath}},
@{name="UserHive";expression={"$($_.ProfileImagePath)\ntuser.dat"}},
@{name="Username";expression={$_.ProfileImagePath -replace '^(.*[\\\/])', ''}}
$LoadedHives = Get-ChildItem registry::HKEY_USERS | where-object {$_.PSChildname -match $PatternSID} |
Select @{name="SID";expression={$_.PSChildName}}
$UnloadedHives = Compare-Object $ProfileList.SID $LoadedHives.SID |
Select @{name="SID";expression={$_.InputObject}}, UserHive, Username
foreach ($item in $ProfileList) {
   if ($item.SID -in $UnloadedHives.SID) {
       reg load HKU\$($item.SID) $($item.UserHive) | Out-Null
   }

Caricare profili utente

Questa parte dello script carica a turno ogni profilo utente esistente sul computer corrente e controlla se è presente una sezione di disinstallazione per Glip. In caso affermativo, esegue la stringa di disinstallazione e rimuove l'elemento dal registro. Facoltativamente, può anche rimuovere la cartella Glip dal profilo utente. Per abilitare questa opzione, elimina il commento dalle due righe Remove-Item rimuovendo il carattere # all'inizio della riga. 
 
Una volta che un utente è stato controllato, l'hive del registro viene scaricato di nuovo.
  $glip = "registry::HKEY_USERS\$($item.SID)\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Glip"
   if (test-path($glip)) {
       $uninstall = Get-ItemProperty -Path $glip
       $cmd = $uninstall.QuietUninstallString
       if (!$cmd) {
           $cmd = $uninstall.UninstallString
       }
       if ($cmd) {
           Invoke-Expression "& $cmd"
           Start-Sleep -Seconds 10
           Remove-Item $glip -ErrorAction SilentlyContinue
           #Remove-Item -Force -ErrorAction SilentlyContinue "$(Split-Path $cmd.substring(1, $cmd.indexof('"', 1)))" -Recurse
       }
   }

Istruzioni facoltative

Le istruzioni in questa parte dello script sono facoltative. Consentono la rimozione delle varie directory nel profilo utente, se necessario. Per rimuovere la cartella e il suo contenuto, eliminare il commento dalla riga rimuovendo il simbolo # simbolo all'inizio della riga.
 
Se non si è certi di voler rimuovere queste cartelle, possono essere lasciate al loro posto. Questo è l'approccio più sicuro in quanto queste cartelle vengono lasciate indietro quando viene eseguito il programma di disinstallazione ufficiale. Tuttavia, per gli utenti che desiderano un nuovo inizio prima di procedere, queste sono le cartelle da eliminare.
 
Se queste cartelle vengono rimosse e viene quindi installata un'app RingCentral Classic, l'utente dovrà reimmettere i dettagli dell'indirizzo di emergenza.
   $glip = "registry::HKEY_USERS\$($item.SID)\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Glip"
   if (test-path($glip)) {
       $uninstall = Get-ItemProperty -Path $glip
       $cmd = $uninstall.QuietUninstallString
       if (!$cmd) {
           $cmd = $uninstall.UninstallString
       }
       if ($cmd) {
           Invoke-Expression "& $cmd"
           Start-Sleep -Seconds 10
           Remove-Item $glip -ErrorAction SilentlyContinue
           #Remove-Item -Force -ErrorAction SilentlyContinue "$(Split-Path $cmd.substring(1, $cmd.indexof('"', 1)))" -Recurse
       }
   }
   if ($item.SID -in $UnloadedHives.SID) {
       [gc]::Collect()
       reg unload HKU\$($item.SID) | Out-Null
   }
 
   $AppDataLocalGlipPath="$($item.ProfileImagePath)\AppData\Local\Glip"
   $AppDataRoamingGlipPath="$($item.ProfileImagePath)\AppData\Roaming\Glip"
   if (test-path $AppDataLocalGlipPath) {
       #Remove-Item -Force $AppDataLocalGlipPath -Recurse -ErrorAction SilentlyContinue
   }
   if (test-path $AppDataRoamingGlipPath) {
       #Remove-Item -Force $AppDataRoamingGlipPath -Recurse -ErrorAction SilentlyContinue
   }
}
© 1999-2022 RingCentral, Inc. Tutti i diritti riservati.
Thanks!
We've sent you a link, please check your phone!
Please allow a full minute between phone number submissions.
There was an issue with SMS sending. Please try again. If the issue persists, please contact support.