Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление Opera из неизвестного текущего профиля (http://forum.oszone.net/showthread.php?t=352524)

Garold 05-12-2022 18:05 2998081

Удаление Opera из неизвестного текущего профиля
 
Добрый день.
На ПК установлена Opera, не известно из какого профиля.
Подскажите пожалуйста как перебрать все профили, чтобы отработал скрипт удаления в том профиле из какого был установлен браузер? на примере IvanovII. Командная строка удаления выглядит так:
C:\Users\IvanovII\AppData\Local\Programs\Opera\Launcher.exe" /uninstall /silent

Написал CMD:
: Удаление процесса Opera

taskkill /F /IM opera.exe

cd "C:\Users\"

for /f %%d in ('dir /B *') do (
set Profile=%%d
)

%Profile%\AppData\Local\Programs\Opera\Launcher.exe /uninstall /silent


Происходит следующее выполнение:

C:\Windows\System32>cd "C:\Users\"

C:\Users>for /F %d in ('dir /B *') do (set Profile=%d )

C:\Users>(set Profile=auditor )

C:\Users>(set Profile=gendir )

C:\Users>(set Profile=IvanovII )

C:\Users>(set Profile=Public )

C:\Users>(set Profile=User )

C:\Users>User\AppData\Local\Programs\Opera\Launcher.exe /uninstall /silent
Системе не удается найти указанный путь.

C:\Users>pause
Для продолжения нажмите любую клавишу . . .

Где допущена ошибка?

NickM 05-12-2022 18:26 2998084

Если Вам требуется просто сформировать строку удаления, то можно попробовать вот таким способом:
Код:

@echo off
SetLocal EnableExtensions

For /F "Tokens=2*" %%I In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /V ProfilesDirectory') Do Set Profiles=%%J
Call Set Profiles=%Profiles%

For /F "Delims=" %%I In ('Dir /B /AD-S-H "%Profiles%" ^| FindStr /V /B /I /C:"All Users" /C:"Public"') Do (
  echo."%Profiles%\%%I\AppData\Local\Programs\Opera\Launcher.exe" /uninstall /silent
)


Garold 05-12-2022 18:40 2998086

А возможно, чтобы скрипт перебрал все пути, ну и там, где присутствует Launcher.exe, подставился путь и произошло удаление?

NickM 05-12-2022 19:01 2998087

Можете добавить проверку:
Код:

IF EXIST
Только Вам следует понимать, что анинсталлер отработает от того пользователя, от которого будет запущён сценарий, и это будет не одно и то же, как запустить его от того пользователя, у которого установлено приложение.

DJ Mogarych 05-12-2022 21:09 2998096

Powershell v5:
Код:

#Requires -RunAsAdministrator

dir (get-item $env:USERPROFILE).Parent.FullName -directory |% {
    if (test-path ($p = $_.FullName + "\AppData\Local\Programs\Opera\Launcher.exe")) {
        & $p /uninstall /silent
    }
}


Garold 06-12-2022 08:40 2998116

Спасибо большое.
А это реализуемо через cmd?

Подскажите еще пожалуйста, как скопировать папку в %appdata% во все профили, за исключением системных?

DJ Mogarych 06-12-2022 08:43 2998117

Наверняка реализуемо, но зачем?
Если у вас есть домен, всеми этими задачами лучше заниматься через групповые политики.

Garold 06-12-2022 08:51 2998118

Стоит задача через cmd, отсюда и такие танцы.
И копирование должно по требованию осуществляться, а не при заходе в систему.

NickM 06-12-2022 10:00 2998123

Цитата:

Цитата Garold
А это реализуемо через cmd? »

Смотрим код для сценария выше;

Цитата:

Цитата Garold
как скопировать папку в %appdata% во все профили, за исключением системных? »

Смотрим код для сценария выше;

Или Вам нужно вот прямо готовое решение?
Где нажал и всё чики-чики?

Garold 06-12-2022 10:42 2998128

Ребята, большое спасибо за помощь!
С копированием разобрался.

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
xcopy /q/s/y/r/h "\\share\TEST\*" "%userprofile%\..\%%a\AppData\Roaming\TEST\"
)



Помогите пожалуйста, не могу разобраться, где допустил ошибку:

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
"%~dp0Settings\RAR.exe" x -u -y "%~dp0Settings\Skript.rar" "%userprofile%\..\%%a\AppData\Roaming\Local\"
)

Все это дело распаковывается:
В профиль, из которого запущен батник:

c:\users\IvanovII\auditor
c:\users\IvanovII\gendir
c:\users\IvanovII\Public
c:\users\IvanovII\User
c:\users\IvanovII\IvanovII

И как еще исключить Public?

NickM 06-12-2022 11:07 2998131

Цитата:

Цитата Garold
И как еще исключить Public? »

Прочтите чуть более внимательней сообщение с указанным Мною кодом возможного сценария.

Garold 06-12-2022 11:47 2998135

Цитата:

Цитата NickM
Прочтите чуть более внимательней сообщение с указанным Мною кодом возможного сценария. »

Прочитал внимательно. Исключил.

Не могу понять, где ошибка: почему все распаковывается в текущий профиль, создавая папки профилей, а при том же сценарии, копируется в папки профилей.

NickM 06-12-2022 11:49 2998136

Цитата:

Цитата Garold
Не могу понять, где ошибка »

Приведите код полученного Вами сценария, при этом оформите его соответствующим тэгом.

Garold 06-12-2022 12:12 2998137

Цитата:

Цитата NickM
Приведите код полученного Вами сценария, при этом оформите его соответствующим тэгом. »

В папке Settings лежит архив ну и соответственно архиватор. Сценарий отрабатывает, но распаковывает в профиль УЗ, из которой был запущен сценарий, создавая папки профилей.

Код:

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users" /C:"Public"') do (
  "%~dp0Settings\RAR.exe" x -u -y "%~dp0Settings\Yandex.rar" "%userprofile%\..\%%a\AppData\Roaming\Local\"
)
pause


UPD: Поправил путь куда извлекать на: "c:\users\\..\%%a\AppData\Local\"
и все получилось.

Коллеги, большое спасибо!


Время: 17:03.

Время: 17:03.
© OSzone.net 2001-