Что нового

Запись в файл о выполнении скрипта.

MXM

Новичок
Сообщения
2
Репутация
1
Всем привет!
Предситуация:
Через GPO развернул RAdmin на рабочие станции, а также в корень С: скопировал папку с файлами (crack), в папке есть файл install.bat (кот. крякает RADmin). После выполнения этого bat-файла в корне папки, где установлен RAdmin (c:\Windows\System32\rserver30\) создаётся файл wsock32.dll.
Ситуация:
Необходимо создать скрипт и запускать его при авторизации пользователя (это через GPO), сам скрипт запускает bat-файл и делает запись в файл о своём выполнение/не выполнении: что у такого-то пользователя выполнена/не выполнена активация RAdmin. Показателем выполнения/не выполнения является файл wsock32.dll.
Логика скрипта на мой взгляд такая:
- считываем с AD имена пользователей и создаем log-файл в формате:
имя_пользователя, нет/да
- затем проверка существования файла wsock32.dll у пользователя
- если он есть, то делаем запись в файл:
имя_пользователя, да
- завершаем скрипт
- если его нет, то выполняем запуск bat-файла.

Мои успехи в скрипте, работает, но без записи в log-файл:
Код:
$user = 'Администратор'
$domain = 'name.local'
$password = '1234567'
;Имя log-файла
$LogFile = 'log.txt'
;Путь до log-файла
$path00 = 'D:\'
;Путь до bat-файла
$path01 = 'C:\RadminTS\install.bat'
;Путь до wsock32.dll файла
$path02 = @SystemDir & '\rserver30\wsock32.dll'

;Проверка наличия файла wsock32.dll в папке System32\rserver30
If FileExists ($path02) Then
;Проверка существования файла с помощью вывода уведомления на экран.
;После отладки данного скрипта закомментаровать
    MsgBox(4096, "", "Файл существует.")
;Если он существует, то сделать запись в log-файл и завершить работу скрипта

;Завершение работы скрипта
;Exit
Else
;Проверка существования файла с помощью вывода уведомления на экран.
;После отладки данного скрипта закомментаровать
;    MsgBox(4096, "", "Файл не существует.")

;Запустить bat-файл от имени Администратора домена
   RunAs($user, $domain, $password, 0, $path01)
EndIf
Заранее спасибо за помощь в разборе полёта! =)
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Код:
$user = 'Администратор'
$domain = 'name.local'
$password = '1234567'
;Имя log-файла
$LogFile = 'log.txt'
;Путь до log-файла
$path00 = 'D:\'
;Путь до bat-файла
$path01 = 'C:\RadminTS\install.bat'
;Путь до wsock32.dll файла
$path02 = @SystemDir & '\rserver30\wsock32.dll'

;Проверка наличия файла wsock32.dll в папке System32\rserver30
If NOT FileExists ($path02) Then
   ;Если он существует, то сделать запись в log-файл и завершить работу скрипта
   $hFile = FileOpen($path00 & $LogFile, 1)

   ; Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
   If $hFile = -1 Then
	   MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
	   Exit
   EndIf

   FileWriteLine($hFile, @ComputerName & "\" & @UserName & " - NOT FOUND!!!" & @CRLF)

   FileClose($hFile)

   ;Завершение работы скрипта
   ;Exit
Else
   ;Запустить bat-файл от имени Администратора домена
   RunAs($user, $domain, $password, 0, $path01)
EndIf
 
Автор
M

MXM

Новичок
Сообщения
2
Репутация
1
beliy, спасибо большое за помощь!
На твоём примере я сделал так как нужно, правда без импорта учетных записей из AD в log-файл, поэтому работает по такой методике:
- у пользователя при авторизации запускается скрипт;
- далее проверки:
а) если нет файла wsock32.dll, то запуск bat-файла, запись в log-файл имя_пк_имя_пользователя.txt о том, что файла wsock32.dll нет:
имя_пк\имя_пользователя - Нет
б) если есть файл wsock32.dll, то запись в log-файл:
имя_пк\имя_пользователя - Да

В итоге получаем, для каждого пользователя создаётся свой log-файл, в котором построчно делается запись: сначала пишется - НЕТ (если первоначальный запуск скрипта и последующее корректное завершение операций bat-файла), затем пишется - ДА (это при втором запуске скрипта). Если пользователь закроет окно (не корректное завершение операций bat-файла), то будет запись - НЕТ. Вообщем, работает. Единственное можно добавить дата-время, но это так - для контроля когда запускался скрипт... Еще раз спасибо. Конечный вариант скрипта:
Код:
$user = 'Администратор'
$domain = 'name.local'
$password = '1234567'
;Имя log-файла
$LogFile = @ComputerName & '_' & @UserName & '.txt'
;Путь до log-файла
$path00 = '\\cniim.local\shared\Отдел ИТ\Report_RAdminTS\'
;Путь до bat-файла
$path01 = 'C:\RadminTS\install.bat'
;Путь до wsock32.dll файла
$path02 = @SystemDir & '\rserver30\wsock32.dll'

;Проверка наличия файла wsock32.dll в папке System32\rserver30
If NOT FileExists ($path02) Then
   ;Проверка существования файла с помощью вывода уведомления на экран.
   ;После отладки данного скрипта закомментаровать
   ;MsgBox(4096, "", "Файл не существует.")
 
   ;Если он не существует, то сделать запись в log-файл и завершить работу скрипта
   $hFile = FileOpen($path00 & $LogFile, 1)

   ;Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
   If $hFile = -1 Then
       MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
       Exit
   EndIf

   FileWriteLine($hFile, @ComputerName & '\' & @UserName & ' - Нет' & @CRLF)

   FileClose($hFile)

   ;Запустить bat-файл от имени Администратора домена
   RunAs($user, $domain, $password, 0, $path01)

   ;Завершение работы скрипта
   ;Exit
Else
   ;Проверка существования файла с помощью вывода уведомления на экран.
   ;После отладки данного скрипта закомментаровать
   ;MsgBox(4096, "", "Файл существует.")

   ;Если он существует, то сделать запись в log-файл и завершить работу скрипта
   $hFile = FileOpen($path00 & $LogFile, 1)

   ;Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
   If $hFile = -1 Then
       MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
       Exit
   EndIf

   FileWriteLine($hFile, @ComputerName & '\' & @UserName & ' - Да' & @CRLF)

   FileClose($hFile)
EndIf
 
Верх