Задать вопрос
@Stone7pro

Как удалить все версии приложения VinteoDesktop на всех рабочих станциях предприятия, и установить последнюю версию?

Описание задачи:
Сейчас набирает популярность корпоративный мессенджер VinteoDesktop. Разворачивался на предприятии через System Center Configuration Manager, а так же силами Тех. поддержки.

Необходимо удалить все предыдущие версии приложения VinteoDesktop, которые устанавливались через SCCM, а так же вручную, и установить последнюю версию 4.15.2 в профиль текущего пользователя.
Ситуация осложняется тем, что устаревших версий очень много, причем даже в рамках одной машины, зачастую. Какие то экземпляры стоят в профиле пользователя, а какие то в Program Files.
К тому же имя папок установки для разных пакетов различается (msi и exe).
  • Вопрос задан
  • 132 просмотра
Подписаться 1 Средний 4 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillfactory
    DevOps-инженер
    6 месяцев
    Далее
  • Нетология
    Python-разработчик с нуля
    6 месяцев
    Далее
Решения вопроса 1
@Stone7pro Автор вопроса
Долго бился, как обновить приложение VinteoDesktop на всём предприятии. В итоге - решил!
Для распространения решения использовал SCCM.
Текст Удалятора не поместился в решении (получается более 10 тыс. символов). Разместил в комментариях.

АЛГОРИТМ РЕШЕНИЯ:
spoiler

- Запускается проверка наличия приложение VinteoDesktop в текущем пользователе.
	- Если приложение имеет версию 4.15.2 или выше - Установлено. 
		- Проверка проходит по версии файла VinteoDesktop.exe в текущем профиле.

	- Если приложения нет или оно ниже версии 4.15.2, то:
		- Запустить проверку наличия приложения-зависимости "Удалятор", которое должно быть установлено перед VinteoDesktop 4.15.2:
			- Если на компьютере есть файл C:\TEMP\VinteoRemover.log - Установлено, тогда:
				- Вывести предупреждение пользователю о том, что:
					- текущее приложение VinteoDesktop будет закрыто в течении 2 часов или как только будет нажата кнопка "ОК".
					- Закрыть приложение VinteoDesktop
				- Установить VinteoDesktop 4.15.2 в текущий профиль пользователя.
			- Eсли на компьютере нет файла C:\TEMP\VinteoRemover.log:
				- Вывести предупреждение пользователю о том, что:
					- Приложение VinteoDesktop будет закрыто в течении 4 часов или как только будет нажата кнопка "ОК"
					- Таймер обратного отсчета 14000 секунд (4 часа)
					- Закрыть приложение VinteoDesktop.
					- Создать файл C:\TEMP\Vinteo_MSG.log, как признак корректной установки приложения SCCM.
				- Запустить приложение "Удалятор":
					- Удалить все версии VinteoDesktop в:
						- Program Files
						- Program Files (x86)
						- профилях всех пользователей
					- создать  на компьютере файл C:\TEMP\VinteoRemover.log
				- Запустить установку VinteoDesktop 4.15.2 в профиле текущего пользователя:
					- Вывести предупреждение пользователю о том, что:
						- текущее приложение VinteoDesktop будет закрыто в течении 2 часов или как только будет нажата кнопка "ОК".
					- Закрыть приложение VinteoDesktop
					- Установить VinteoDesktop 4.15.2 в текущий профиль пользователя.

В итоге, для установки через SCCM, требуется:
	- Приложение "VinteoDesktop 4.15.2"
		- содержит исполняемый файл и bat-файл с необходимыми командами.
		- установка проходит через bat обёртку т.к.:
			- необходимо вывести предупреждение пользователю о том, что текущее приложение будет закрыто. Работает без таймера, но в в тексте сообщения указывается время запуска уведомления. 
			- без bat обёртки установка через SCCM в режиме "для пользователя" - зависает. Но если у пользователя есть админские права, то установка проходит корректно. 
	- Приложение "Удалятор"
		- Зависимость с приложением "VinteoDesktop 4.15.2"
			- выполняется перед установкой "VinteoDesktop 4.15.2"
		- содержит скрипт PowerShell, который закрывает текущее приложение VinteoDesktop  и удаляет все его версии из PFiles+Pfiles(x86)+профилей всех пользователей.
		- выполняется в режиме "для системы".
		- Файл VinteoRemover.log
			- используется, как признак корректной работы приложения "Удалятор".
	- Приложение "Уведомление"
		- Зависимость с приложением "Удалятор".
			- выполняется перед установкой приложения "Удалятор".
		- содержит скрипт PowerShell, который выводит сообщение в текущий сеанс пользователя, с обратным отсчетом и кнопкой ОК (что бы не ждать).
			- таймер 14000 сек (4 часа).
		- устанавливается в режиме "для пользователя".
		- Признаком установки является наличие файла C:\TEMP\Vinteo_MSG.log



- ТЕКСТ BAT ФАЙЛА ДЛЯ УСТАНОВКИ Приложение "VinteoDesktop 4.15.2", С УВЕДОМЛЕНИЕМ ПОЛЬЗОВАТЕЛЯ И ЗАКРЫТИЕМ ПРИЛОЖЕНИЯ.
spoiler

rem версия 1.2
rem Уведомление отображает время, в которое было выведено.
rem
REM РАБОЧАЯ ВЕРСИЯ ДЛЯ BAT ФАЙЛА, с таймером
rem Уведомление пользователю перед закрытием приложения
rem Таймер есть.

@echo off
chcp 65001 >nul

rem Фиксируем текущее время (убираем лишние пробелы)
set "NOWTIME=%time:~0,8%"

rem Показываем уведомление с указанием времени
powershell -Command "$wshell = New-Object -ComObject Wscript.Shell; $wshell.Popup('[' + '%NOWTIME%' + '] Будет закрыт VinteoDesktop и установлено обновление.' + [Environment]::NewLine + 'Для продолжения нажмите кнопку или процесс продолжится автоматически через 1 час', 15, 'Обновление VinteoDesktop', 64 + 0);"

rem Закрытие процесса
taskkill /f /im "VinteoDesktop.exe"

rem Установка
"vinteo-desktop-4.15.2-x64.exe" /S /CURRENTUSER



ТЕКСТ СКРИПТА ДЛЯ УВЕДОМЛЕНИЯ ПОЛЬЗОВАТЕЛЯ, С ТАЙМЕРОМ, ПЕРЕД УДАЛЕНИЕМ ВСЕХ ВЕРСИЙ ВИНТЕО
spoiler

<#
.SYNOPSIS
    Скрипт уведомления пользователя о удалении VinteoDesktop
.VERSION
    1.1
.DESCRIPTION
    Выводит окно с сообщением и таймером обратного отсчета.
Пользователь может нажать "ОК" или дождаться окончания таймера.
В конце создает папку C:\TEMP\ и файл Vinteo_MSG.log
#>

# Версия скрипта
$ScriptVersion = "1.1"

# Время таймера в секундах (используем script: для доступа из событий)
$script:Countdown = 14000

# Текст сообщения
$MessageText = "ВНИМАНИЕ! Все версии VinteoDesktop будут удалены и установлена актуальная версия.`nНажмите ОК или дождитесь окончания таймера."

# Заголовок окна
$WindowTitle = "Обновление VinteoDesktop"

# Создаем окно уведомления с таймером
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$form.Text = $WindowTitle
$form.Size = New-Object System.Drawing.Size(400,150)
$form.StartPosition = "CenterScreen"
# Текстовая метка
$label = New-Object System.Windows.Forms.Label
$label.Text = "$MessageText`nОкно закроется через $script:Countdown секунд."
$label.Size = New-Object System.Drawing.Size(380,60)
$label.Location = New-Object System.Drawing.Point(10,20)
$form.Controls.Add($label)
# Кнопка OK
$okButton = New-Object System.Windows.Forms.Button
$okButton.Text = "OK"
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Location = New-Object System.Drawing.Point(150,80)
$okButton.Add_Click({ $form.Close() })
$form.Controls.Add($okButton)
# Таймер обратного отсчета
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 1000
$timer.Add_Tick({
    $script:Countdown--
    if ($script:Countdown -le 0) {
        $timer.Stop()
        $form.Close()
    } else {
        $label.Text = "$MessageText`nОкно закроется через $script:Countdown секунд."
    }
})
$timer.Start()
# Показать окно
$form.Topmost = $true
$form.Add_Shown({$form.Activate()})
[void]$form.ShowDialog()
# === Проверка и создание папки + лог ===
$LogPath = "C:\TEMP"
$LogFile = Join-Path $LogPath "Vinteo_MSG.log"
if (-not (Test-Path $LogPath)) {
    New-Item -ItemType Directory -Path $LogPath -Force | Out-Null
}
"$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Скрипт уведомления завершён (версия $ScriptVersion)" | Out-File -FilePath $LogFile -Encoding UTF8 -Append

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы