Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файла с рабочих столов по сети

Ответить
Настройки темы
CMD/BAT - [решено] Удаление файла с рабочих столов по сети

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток! Помогите с решением задачки.
Необходимо удалить файл (например, file.exe) с рабочих столов всех пользователей в сети домена.
Условия - профили пользователей могут находиться как на диске С так и на D и т.д. Для выполнения задачи необходимо применять psexec
Накатал примерный батник (выполняется из под админа в домене)
Код: Выделить весь код
@echo off
set listfile=computername.txt
rem computername.txt содержит имена компьютеров, например, pc-01, pc-02  и т.д.
for /f "tokens=1" %%i in (%listfile%) do (
   @start cmd /c psexec.exe \\%%i cmd /c del /q/f/a/s "C:\Users\file.exe"
   exit /b
)
exit /b
Но данный вариант работает, если профиль пользователя находится в конкретном заданном месте, например, в c:\users.
Пробую вариант с объявлением переменной %%a (`dir /B "%HomeDrive%\Users"`)
Код: Выделить весь код
@echo off
set listfile=computername.txt
for /f "tokens=1" %%i in (%listfile%) do (
   cmd /v /c for /f "usebackq" %%a in (`dir /B %HomeDrive%\Users`^) do 
   @start cmd /c psexec.exe \\%%i cmd /c del /q/f/a/s %HomeDrive%\Users\%%a\desktop\file.exe
   exit /b
)
exit /b
Но где то беда с синтаксисом - переменная %%a не объявляется...

Отправлено: 11:10, 22-03-2017

 

Ветеран


Сообщения: 547
Благодарности: 36

Профиль | Сайт | Отправить PM | Цитировать


Roman_Ko,

через логон скрипт не хочешь решить эту проблему?
там %userprofile% корректно покажет где надо удалять. ну или хотябы насобираешь пути профелей, а потом пройдешься по ним своим скриптом?

-------
консольный клиент telegram для Windows: www.elapser.info

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 22-03-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Опиум:
через логон скрипт не хочешь решить эту проблему? »
Да это собственно говоря и не проблема, это задача, и именно с применением psexec.
А так - да, можно, например так
Код: Выделить весь код
On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
sUserDir = WshShell.ExpandEnvironmentStrings("%USERPROFILE%")
file = "\desktop\file.exe"
FSO.DeleteFile (sUserDir) & (file), True

Отправлено: 13:35, 22-03-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Roman_Ko:
А так - да, можно, например так »
Roman_Ko, так, да не так. Не On Error Resume Next, не ExpandEnvironmentStrings("%USERPROFILE%") и не "\desktop\…", а либо тот же WshShell, либо Shell:
Код: Выделить весь код
WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")
WScript.Echo WScript.CreateObject("Shell.Application").NameSpace("shell:Desktop").self.Path

Отправлено: 14:34, 22-03-2017 | #4


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё отлично, хорошо, спасибо, я ценю Вашу помощь. Но уважаемые форумчане, Вы пытаетесь помочь решить задачу немного не тем способом, которым было запланировано решить задачу изначально.
Давайте отмотаем немного назад
Подскажите где синтаксическая ошибка в батнике?
Код: Выделить весь код
@echo off
set listfile=computername.txt
for /f "tokens=1" %%i in (%listfile%) do (
   cmd /v /c for /f "usebackq" %%a in (`dir /B %HomeDrive%\Users`^) do 
   @start cmd /c psexec.exe \\%%i cmd /c del /q/f/a/s %HomeDrive%\Users\%%a\desktop\file.exe
   exit /b
)
exit /b

Отправлено: 14:56, 22-03-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Ошибка не в «батнике», а в том, что Ваш psexec.exe выполняется не в контексте пользователя, сидящего за удалённой машиной. И — ничего, что %HomeDrive% берётся с той машины, где исполняется пакетный файл, а? Ничего, что на удалённой машине вообще может быть не Vista+? Какой смысл в переборе каталога Users на локальной машине? В общем, у Вас тут сборная непонятная солянка.

Чем Вам так не нравится тот же logon-скрипт?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 22-03-2017 | #6


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Чем Вам так не нравится тот же logon-скрипт? »
Ничего против не имею.
Задача решается разными способами. Но в данном случае интересен вариант через psexec. Интересен потому, что если его "допилить", то удаление нужного файла из нужного места на удаленной машине (машина на win, домен) возможно по одному вашему клику, т.е. оперативное удаление.
Цитата Iska:
Какой смысл в переборе каталога Users на локальной машине? »
смысл - выявить все локальные профили на удаленном ПК. Зачем это нужно? - Т.к. неизвестно под каким профилем работает на данный момент пользователь.
Но, выявив все локальные профили, можно выполнить команду на удаление в каждом профиле интересующего нас файла, если таков найдется конечно.
Цитата Iska:
Ваш psexec.exe выполняется не в контексте пользователя, сидящего за удалённой машиной. И — ничего, что %HomeDrive% берётся с той машины, где исполняется пакетный файл, а? »
Вот, первый комментарий по делу, спасибо. А ведь действительно, Вы правы. Буду думать.

Отправлено: 16:24, 22-03-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Roman_Ko:
то удаление нужного файла из нужного места на удаленной машине (машина на win, домен) возможно по одному вашему клику, т.е. оперативное удаление. »
Или не доступно — например, в данный момент машина выключена. Логон-скрипт же гарантированно выполнится, когда бы машина не была включена.

Цитата Roman_Ko:
смысл - выявить все локальные профили на удаленном ПК. »
Вот только в коде Вы выявляете все каталоги в %HomeDrive%\Users на локальной машине, а не на удалённой. Про что и речь.

Исходя из заявленного Вами:
Цитата Roman_Ko:
Но, выявив все локальные профили, можно выполнить команду на удаление в каждом профиле интересующего нас файла, если таков найдется конечно. »
Код: Выделить весь код
psexec.exe \\%%i cmd.exe /c del /a /s /f /q c:\Users\file.exe
— не надо искать и перебирать профили. Просто удаляйте. Особенно c .exe.

Отправлено: 16:38, 22-03-2017 | #8


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Вот только в коде Вы выявляете все каталоги в %HomeDrive%\Users на локальной машине, а не на удалённой. Про что и речь. »
Да да, это я уже понял из предыдущего Вашего сообщения. Спасибо
Цитата Iska:
psexec.exe \\%%i cmd.exe /c del /a /s /f /q c:\Users\file.exe
— не надо искать и перебирать профили. Просто удаляйте. Особенно c .exe. »
А если профиль в другом месте? например, на диске D? Поэтому и допиливаю вариант с перебором профилей.

Отправлено: 16:53, 22-03-2017 | #9


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вопрос решён благодаря наводящим вопросам от Iska
Вот рабочий вариант
Код: Выделить весь код
@echo off 
set listfile=computername.txt
for /f "tokens=1" %%i in (%listfile%) do (
   @start cmd /c "psexec.exe \\%%i cmd /c "for /f "tokens=1" ^%%a in ('dir /B "%HomeDrive%\Users"'^) do^
   del /q/f/a/s "%HomeDrive%\Users\%%a\desktop\file.exe""
   exit /b
)   
exit /b
Ещё раз спасибо.

Отправлено: 18:03, 22-03-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файла с рабочих столов по сети

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Лицензирование удаленных рабочих столов avp26rus Windows Server 2008/2008 R2 11 15-05-2014 23:29
RDP/Citrix/Term - [решено] Как осуществить переключение рабочих столов по одному IP адресу но с разными портами Gameframe Сетевые технологии 7 28-06-2012 14:03
Службы - Служба удаленных рабочих столов. DavyJohnes Microsoft Windows 7 0 02-08-2011 12:29
Интерфейс - Несколько рабочих столов [Windows 7] byStep Программное обеспечение Windows 7 05-04-2011 19:55
несколько рабочих столов perchinka Хочу все знать 7 04-04-2007 01:40




 
Переход