Что нового

Удаление данных под user с правами Администратора

Mark 1

Чайник
Сообщения
6
Репутация
0
Версия AutoIt:
v3.3.12.0
Описание:
Добрый день всем, прошу помочь, цель такая - запустить bat под учетной записью user c правами админа, без запроса пароля а по окончанию удалял сам себя. Это необходимо для запуска на рабочих станциях что бы очищать данные
Сам bat содержит в себе:
Код:
@echo off
cd C:\Users
set doc="*.doc"
set docx="*.docx"
set png="*.png"
set bmp="*.bmp"
set jpg="*.jpg"
set jpeg="*.jpeg"
set jpe="*.jpe"
set jfif="*.jfif"
set gif="*.gif"
set tif="*.tif"
set png="*.png"
set pdf="*.pdf"
set xlsx="*.xlsx"
set xls="*.xls"
del /s %doc%
del /s %docx%
del /s %png%
del /s %bmp%
del /s %jpg%
del /s %jpeg%
del /s %jpe%
del /s %jfif%
del /s %gif%
del /s %tif%
del /s %png%
del /s %pdf%
del /s %xlsx%
del /s %xls%
Цель его что бы удалял из определенной директории типы всех файлов.

Примечания:
вот что попробовал...использовал другой bat что бы не удалил мои доки, но что то у меня не получилось
Код:
$sUserName = "Администратор"
$sPassword = "12345"
$siDir='"C:\Users\gipokrat\Desktop\hello.bat"'
RunAs($sUserName,@ComputerName,$sPassword, 0, $cmdFile, $siDir)

Hello.bat содержит
Код:
echo "Hello World!"
pause
Если можно это реализовать через bat то как.
Пожалуйста если можно поподробнее я еще молод и только учусь быть матерым
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
(подробнее), а обычный код соответственно в тег [code]
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

joiner

Модератор
Локальный модератор
Сообщения
3 014
Репутация
502
а зачем командная строка?
Код:
FileDelete

чем не устраивает?
найти все файлы по маске в нужной папке и удалить. и все
 
Автор
M

Mark 1

Чайник
Сообщения
6
Репутация
0
если удалить файлы можно здесь, то и наверное батник смысла запускать нет ?

Возможно ли что бы данная программа запускалась с прописанными правами админа и уже шло удаление и выводило только сообщение о статусе - выполнено или не выполнено.

Сказать честно у меня мини прога даже не сработала
Код:
FileDelete ("C:\123\*.doc")
if FileDelete=1 Then
   MsgBox (64, "Очистка", "Выполнена успешно" [,timeout = 10])
FileDelete=0 Then
   MsgBox (64, "Очистка", "Пошло что то не так..." [,timeout = 10])
 EndIf
 

ildar

Осваивающий
Сообщения
244
Репутация
28
А с этим
Код:
#RequireAdmin
 

CrazyDoc

Чайник
Сообщения
75
Репутация
2
ildar сказал(а):
А с этим
Код:
#RequireAdmin
Это запрос на права администратора. Наверное так:
Код:
RunAs
+
Код:
FileDelete ("C:\123\*.doc")
if FileDelete=1 Then
   MsgBox (64, "Очистка", "Выполнена успешно",10)
Else
   MsgBox (64, "Очистка", "Пошло что то не так...",10)
 EndIf
 
Автор
M

Mark 1

Чайник
Сообщения
6
Репутация
0
ildar сказал(а):
А с этим
Код:
#RequireAdmin
Мне же нужно из под любого пользователя запускать программу а Админскими правами (а у администратора пароль)

а возможно например удаление всех .doc .gif и jpg и тп удаление файлов из каталога и c:\user и последующих папок включая скрытые.
И еще вопрос можно ли освободить папку от всего. Например мне нужно очистить кэш у программы по адресу C:\Users\user\AppData\LocalLow\Sun\Java\Deployment\cache ... желательно не удаляя саму папку

при данном коде срабатывает второе окно всегда. даже если удаляет
Код:
FileDelete ("C:\123\*.doc")
if FileDelete=1 Then
   MsgBox (64, "Очистка", "Выполнена успешно",10)
Else
   MsgBox (64, "Очистка", "Пошло что то не так...",10)
 EndIf
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
Код:
if FileDelete("C:\123\*.doc")=1 Then
   MsgBox (64, "Очистка", "Выполнена успешно",10)
Else
   MsgBox (64, "Очистка", "Пошло что то не так...",10)
 EndIf
 
Автор
M

Mark 1

Чайник
Сообщения
6
Репутация
0
inververs сказал(а):
Код:
if FileDelete("C:\123\*.doc")=1 Then
   MsgBox (64, "Очистка", "Выполнена успешно",10)
Else
   MsgBox (64, "Очистка", "Пошло что то не так...",10)
 EndIf
Спасибо большое
как сделать что бы чистил под папки ?
можно ли перечислить все типы файлов через запятую ?
как верно запустить с админскими правами ?
Всем большое спасибо :-[
 
Автор
M

Mark 1

Чайник
Сообщения
6
Репутация
0
Вот что получилось за 3 дня
Результат: Скрипт создает файл *.bat записывает туда информацию и после запускает его под админом (на предприятии пароль для лок. админа один везде), созданный файл удаляет все файлы по расширению в заданной папке и записывает результат в файл в корне диска С
Далее сам себя удаляет... Сделаны сообщения для пользователя и блокировка (в ранних версиях это было актуально теперь же очень сомнительно )...делал впервые прошу сильно не пинать, если кто может что то дополнить буду благодарен. Спасибо

Код:
#include <File.au3>
$File = FileOpen(@ScriptDir & '\clear.bat', 2)
$Code = "@echo off" & @CRLF & _
"@chcp 1251" & @CRLF & _
"echo Start %date% %time%>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.jpg>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.jpeg>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.pdf>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.doc>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.docx>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.png>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.bmp>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.jfif>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.gif>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.tif>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.xls>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.xlsx>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.msg>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.txt>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.temp>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.rtf>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.docm>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.rtf>>c:\report.txt" & @CRLF & _
"@del /f /s /q C:\Users\*.xlsm>>c:\report.txt" & @CRLF & _
"echo stop %time%>>C:report.txt"
$User = "Администратор"
$Pass = "piu-piu-piuuu"
$cmdFile = (@ScriptDir & '\clear.bat')
FileWrite($File, $Code)
FileClose($File)
RunAs($User,@ComputerName,$Pass, 0, $cmdFile)
if WinWaitClose("C:\Windows\system32\cmd.exe") Then
BlockInput(1)
MsgBox (64, "Очистка", "Началась очистка...",1)
BlockInput(0)
Else
MsgBox (64, "Очистка", "Пошло что то не так...сообщите Администратору",5)
EndIf
 if WinWaitClose("C:\Windows\system32\cmd.exe") Then
 MsgBox (64, "Очистка", "Готово",2)
 endif
Func _ScriptDestroy()
    $sTemp = _TempFile(@TempDir, '~', '.bat')
    $sPath = FileGetShortName(@ScriptFullPath)
    $hFile = FileOpen($sTemp, 2)
    FileWriteLine($hFile, '@echo off')
    FileWriteLine($hFile, ':loop')
    FileWriteLine($hFile, 'del ' & $sPath)
    FileWriteLine($hFile, 'if exist ' & $sPath & ' goto loop')
    FileWriteLine($hFile, 'del ' & $sTemp)
    FileClose($hFile)
    Run($sTemp, '', @SW_HIDE)
 EndFunc
  MsgBox (32, "Завершение", "Подождите...", 3)
  FileDelete (@ScriptDir & '\clear.bat')
  _ScriptDestroy()


Добавлено:
Сообщение автоматически объединено:

В идеале было бы сделать что бы Добавлялся локальный пользователь с именем "Администратор" и сделать его администратором и присвоить пароль и уже потом выполнять всю программу. Мб кто подскажет как верно это реализовать а то на большей части машин есть данный пользователь а на малой части он отсутствует
 

joiner

Модератор
Локальный модератор
Сообщения
3 014
Репутация
502
тут бат не нужен. есть функции поиска файлов по маске и потом удаление. это будет логичнее, если использовать Autoit. а так это как костыль. зачем пароль админа? разве при удалении вручную нужно каждый раз вводить логин и пароль?
Mark 1 [?]
Цель его что бы удалял из определенной директории типы всех файлов.
не все файлы указаны. есть еще .exe .msi и так далее.
для поиска всех файлов (и в подпапках) функция
Код:
_FileListToArrayRec

либо другая любая пользовательская функция, примеров на форуме масса
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
joiner
посмотри на раздел, это стол заказов.
 
Автор
M

Mark 1

Чайник
Сообщения
6
Репутация
0
так было сделано для того что бы запуск проходил под любым пользователем а на одной рабочей станции их может быть 10 (и у них нет прав админа) а если запускать exe из под пользователя он не даст доступ к папкам других пользователей, а к ним доступ необходим.

А если по теме как-то можно создавать\добавлять пользователей и наделять их админскими правами в win7 через bat или autoit ?

И еще 1 вопросик ... есть 10 user и у них есть папка которую мне нужно очистить а пути все разные но есть общая структура
C:\Users\mtrifanov\AppData\LocalLow\Sun\Java\Deployment\cache
C:\Users\ntoporov\AppData\LocalLow\Sun\Java\Deployment\cache
C:\Users\ebercov\AppData\LocalLow\Sun\Java\Deployment\cache
C:\Users\......\AppData\LocalLow\Sun\Java\Deployment\cache

как можно описать конечную папку
 

joiner

Модератор
Локальный модератор
Сообщения
3 014
Репутация
502
inververs [?]
посмотри на раздел, это стол заказов.
OffTopic:
неужели?


Код:
#include <File.au3>
;получаем список пользователей
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select Name,SID From Win32_UserAccount")
;очищаем у каждого пользователя нужную папку
For $objItem In $colItems
	$aFile = _FileListToArrayRec('C:\Users\' & $objItem.Name & '\AppData\LocalLow\Sun\Java\Deployment\cache', '*', 1, 1, 0, 2);ищем файлы во всех подпапках если они есть
	$GetCount = UBound($aFile)
	If $GetCount Then
		For $i = 0 To $GetCount - 1
			FileDelete($aFile[$i])
		Next
	EndIf
Next

идея такова. компилируешь этот код,
потом пишешь отдельный скрипт
Код:
FileInstall('del.exe',@TempDir & '\del.exe',1)
RunAs(' параметры запуска: логин пароль и тд')

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

для общего удаления
Код:
$aFile = _FileListToArrayRec('C:\Users', '*.bmp;*.exe', 1, 1, 0, 2)
For $i = 0 To UBound($aFile) - 1
	FileDelete($aFile[$i])
Next

удалит все файлы с указанным расширением в папках пользователей
 
Верх