Что нового

[Сеть, интернет] Отчет с компьютера пользователя

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
Здравствуйте господа.
Суть вопроса:
На компьютерах пользователей в автозагрузке, лежит файл LC.exe он проверяет наличие файла RC.exe на сервере и если он есть выполняет его.
В файле RC.exe прописываю разные задачи (сбор отчета, установка программ).
В случае сбора отчетов, при перезагрузке создается строка в файле отчета \\server\Report_programm\(тут папка на каждый день месяца "@DAY @MON @YEAR")\Report.txt.
Вопрос:
Подскажите идейку как сделать, что бы строка создавалась только один раз в день, а не при каждой перезагрузке.

Пример одного из отчетов:
Код:
;~ Проверка установки пакета программ

; Запускаем скрипт с админскими правами
#requireadmin

#include <GUIConstants.au3>
#include <file.au3>

;~ Проверка IP
$IP = @IPAddress1

;~ Проверка имени пользователя
$UserName = @UserName

;~ Проверка имени Компьютера
$ComputerName = @ComputerName


;~ Проверка Касперский
$pKaspx86 = FileExists ("c:\Program Files (x86)\Kaspersky Lab\Kaspersky Endpoint Security 10 for Windows\")
$pKasp = FileExists ("c:\Program Files\Kaspersky Lab\Kaspersky Endpoint Security 10 for Windows\")
If  $pKasp Or $pKaspx86 = 1 Then
	$Kasper = ("ДА")
Else
	$Kasper = ("НЕТ")
EndIf

;~ Проверка КриптоПро
$pKript = FileExists ("c:\Program Files\Crypto Pro\")
$pKriptx86 = FileExists ("c:\Program Files (x86)\Crypto Pro\")
If  $pKript Or $pKriptx86 = 1 Then
	$Kript = ("ДА")
Else
	$Kript = ("НЕТ")
EndIf

;~ Проверка VipNet
$pVip = FileExists ("c:\Program Files\InfoTeCS\ViPNet Client\")
$pVipx86 = FileExists ("c:\Program Files (x86)\InfoTeCS\ViPNet Client\")
If  $pVip Or $pVipx86 = 1 Then
	$Vip  = ("ДА")
Else
	$Vip = ("НЕТ")
EndIf

;~ Открытие файла отчета
$oFile = FileOpen ( 'x:\Report_programm\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\Report.txt' , 9)

;~  Проверka, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $oFile = -1 Then
    Exit
EndIf
;~ запись в файл
FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & @TAB & 'Касперский ' & $Kasper & @TAB & 'VipNet ' & $Vip & @TAB & 'КриптоПРО ' & $Kript & @CRLF)
;~ закрытие файла
FileClose($oFile)

;~ Открытие файла состояния файла RC
$run_File = FileOpen ( @ScriptDir & "\Run_commands.txt" , 10)

;~  Проверka, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $oFile = -1 Then
    Exit
EndIf
FileWrite($run_File, "Текущее состояние файла - Проверка установки пакета программ" & @CRLF)
FileClose($run_File)
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Вместо название файла "Report.txt" использовать "<имя компьютера>.txt".
Дальше проверять наличие данного файла. Соответственно, если есть такой файл - не выполнять отчет.

Код:
...
$PathFile = 'x:\Report_programm\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\' & $ComputerName & '.txt'

If Not FileExists($PathFile) Then
	;~ Открытие файла отчета
	$oFile = FileOpen ( $PathFile , 9)
	;~  Проверka, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
	If $oFile = -1 Then
		Exit
	EndIf
	;~ запись в файл
	FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & @TAB & 'Касперский ' & $Kasper & @TAB & 'VipNet ' & $Vip & @TAB & 'КриптоПРО ' & $Kript & @CRLF)
	;~ закрытие файла
	FileClose($oFile)
EndIf
...
 
Автор
ZeVSalt

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
Вместо название файла "Report.txt" использовать "<имя компьютера>.txt".

так не пойдет, компов около 500, удобнее что бы отчет был в одном файле, я его потом в вышестоящую организацию передаю
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Еще вариант - искать текст в файле:

Код:
...
$oFile = FileOpen ( 'x:\Report_programm\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\Report.txt' , 9)

If $oFile = -1 Then
    Exit
EndIf

$i = 0
$fSIS = False
While 1
    $i += 1
    $sTemp = FileReadLine($oFile, $i)
    If @error = -1 Then ExitLoop
    If StringInStr($sTemp, $ComputerName) Then
		$fSIS = True
        ExitLoop
    EndIf
WEnd

If ($fSIS = False) Then
	FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & @TAB & 'Касперский ' & $Kasper & @TAB & 'VipNet ' & $Vip & @TAB & 'КриптоПРО ' & $Kript & @CRLF)
EndIf

FileClose($hFileOpen)
...


PS: за ошибки извиняюсь - я уже давно не программировал в AutoIt
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
ZeVSalt
Можно просто сохранять на локальной машине в реестре или в файле дату последнего запуска скрипта.
 
A

Alofa

Гость
По моему логичней использовать конструкцию INI-файлов.
Код:
[<Дата>]
<Имя компьютера> = "Отчет..."
А перед тем, как что-либо записывать в него, делать проверку.
 
Автор
ZeVSalt

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
так работает, но как то не гламурненько ;D
более интересного решения ни у кого нет?

Код:
...
$Report_File = FileOpen ( 'c:\Program Files\Repotr_User\Report.txt', 0)

;~ запись в файл
$Read_File = FileRead($Report_File)
If $Read_File = @MDAY Then
   FileClose($Report_File)
   Exit
;~ закрытие файла

Else

;~ Открытие файла отчета
$oFile = FileOpen ( 'x:\Report_programm\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\Report.txt' , 9)

;~  Проверka, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $oFile = -1 Then
    Exit
EndIf
;~ запись в файл
FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & @TAB & 'Касперский ' & $Kasper & @TAB & 'VipNet ' & $Vip & @TAB & 'КриптоПРО ' & $Kript & @CRLF)
;~ закрытие файла
FileClose($oFile)

;~ Открытие файла отчета
$Data_File = FileOpen ( 'c:\Program Files\Repotr_User\Report.txt' , 10)

;~ запись в файл
FileWrite($Data_File, @MDAY)
;~ закрытие файла
FileClose($Data_File)


;~ Открытие файла состояния файла RC
$run_File = FileOpen ( @ScriptDir & "\Run_commands.txt" , 10)

;~  Проверka, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $oFile = -1 Then
    Exit
EndIf
FileWrite($run_File, "Текущее состояние файла - Проверка установки пакета программ" & @CRLF)
FileClose($run_File)
EndIf
Exit
 
A

Alofa

Гость
Еще вариант: удалить из автозагрузки "LC.exe" и прописать ее в диспетчере Задач Планировщике Заданий.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
В таком виде у Вас условие не выполнится
Код:
$run_File = FileOpen ( @ScriptDir & "\Run_commands.txt" , 10)

;~  Проверka, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $oFile = -1 Then
    Exit
EndIf

Скорее всего опечатка получилась - открываете файл "$run_File", а проверяете открыт ли файл "$oFile", который закрыли чуть ранее.
 
Автор
ZeVSalt

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
Скорее всего опечатка получилась - открываете файл "$run_File", а проверяете открыт ли файл "$oFile", который закрыли чуть ранее.
спасибо за подсказку, просмотрел, исправлю.

Еще вариант: удалить из автозагрузки "LC.exe" и прописать ее в диспетчере Задач.

Подскажите как?
 
A

Alofa

Гость
OffTopic:
ZeVSalt, прошу прощения, теперь уже я опечатался. Исправил Ответ #7.



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

Код:
#requireadmin

$IP = @IPAddress1
$UserName = @UserName
$ComputerName = @ComputerName
$pKaspx86 = FileExists ("c:\Program Files (x86)\Kaspersky Lab\Kaspersky Endpoint Security 10 for Windows\")
$pKasp = FileExists ("c:\Program Files\Kaspersky Lab\Kaspersky Endpoint Security 10 for Windows\")
$Kasper = ($pKasp Or $pKaspx86) ? 'ДА' : 'НЕТ'

$pKript = FileExists ("c:\Program Files\Crypto Pro\")
$pKriptx86 = FileExists ("c:\Program Files (x86)\Crypto Pro\")
$Kript = ($pKript Or $pKriptx86) ? 'ДА' : 'НЕТ'

$pVip = FileExists ("c:\Program Files\InfoTeCS\ViPNet Client\")
$pVipx86 = FileExists ("c:\Program Files (x86)\InfoTeCS\ViPNet Client\")
$Vip  = ($pVip Or $pVipx86) ? 'ДА' : 'НЕТ'

; Открытие файла отчета
Local $oFile = 'x:\Report_programm\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\Report.txt'
$sFileRead = FileRead($oFile) ; Так мы косвенно проверяем наличие файла
Switch @error
	Case 0 ; Если файл прочитан, то ищем в данных $UserName + $ComputerName
		If Not StringInStr($sFileRead, @TAB & $UserName & @TAB & $ComputerName & @TAB, 1) Then ContinueCase
	Case Else ; Если файл не прочитан, то создаем и пишем в файл
		FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & @TAB & 'Касперский ' & $Kasper & @TAB & 'VipNet ' & $Vip & @TAB & 'КриптоПРО ' & $Kript & @CRLF)
EndSwitch

; Открытие файла состояния файла RC
$run_File = FileOpen ( @ScriptDir & "\Run_commands.txt" , 10)
If $run_File = -1 Then Exit
FileWrite($run_File, "Текущее состояние файла - Проверка установки пакета программ" & @CRLF)
FileClose($run_File)
 
Автор
ZeVSalt

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
сделал так:
Код:
; ФАЙЛ LC.EXE
#requireadmin


#include <GUIConstants.au3>
#include <file.au3>

;~ Проверка IP
$IP = @IPAddress1

;~ Проверка имени пользователя
$UserName = @UserName

;~ Проверка имени Компьютера
$ComputerName = @ComputerName

DriveMapGet ("R")
If @error = 1 Then

DriveMapAdd("R:", "\\ххх.ххх.ххх.ххх\$REPORT",0)

If @error Then
   ;~ Открытие файла отчета
   $oFile = FileOpen ( 's:\Отчеты\User_commands\report\ERROR\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\ERROR.txt' , 9)

   ;~ запись в файл
   FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & '  Ошибка - Диск R не подключен' & @CRLF)
   ;~ закрытие файла
   FileClose($oFile)
   Exit

Else


$pRC = FileExists ("R:\RC.exe")

If  $pRC = 1 Then
	Run ("R:\RC.exe")
 Else

	DriveMapDel ('R:')
Exit
EndIf

EndIf
Else
   	DriveMapDel ('R:')
EndIf
Exit


Код:
;~ ФАЙЛ RC.EXE
; 
#requireadmin

#include <GUIConstants.au3>
#include <file.au3>

;~ Проверка IP
$IP = @IPAddress1

;~ Проверка имени пользователя
$UserName = @UserName

;~ Проверка имени Компьютера
$ComputerName = @ComputerName



$oFile = FileOpen ( 'R:\SETUP.txt', 0)
$RFile = FileRead($oFile)
If $RFile = "нет" Then
   FileClose($oFile)
   DriveMapDel ('R:')

   Exit
Else
   FileClose($oFile)

   Run ("R:\Programm\" & $RFile)
EndIf
Exit


Код:
;~ ФАЙЛ СБОРА ОТЧЕТОВ

; 
#requireadmin

#include <GUIConstants.au3>
#include <file.au3>

;~ Проверка IP
$IP = @IPAddress1

;~ Проверка имени пользователя
$UserName = @UserName

;~ Проверка имени Компьютера
$ComputerName = @ComputerName

;~ ПРОВЕРКА УСТАНОВКИ ПРОГРАММ----------------------------------------------------------------------------------------------------------------------


;~ Проверка КриптоПро
$pKript = FileExists ("c:\Program Files\Crypto Pro\")
$pKriptx86 = FileExists ("c:\Program Files (x86)\Crypto Pro\")
If  $pKript Or $pKriptx86 = 1 Then
    $Kript = ("ДА")
Else
    $Kript = ("НЕТ")
EndIf

;~ Проверка VipNet
$pVip = FileExists ("c:\Program Files\InfoTeCS\ViPNet Client\")
$pVipx86 = FileExists ("c:\Program Files (x86)\InfoTeCS\ViPNet Client\")
If  $pVip Or $pVipx86 = 1 Then
    $Vip  = ("ДА")
Else
    $Vip = ("НЕТ")
EndIf


;~ Проверка СУДИС
$RegRead = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SudisLogon", "DisplayVersion")
If   $RegRead = "2.2.2.0" Then
	$SUDIS = ("ДА")
Else
	$SUDIS = ("НЕТ")
 EndIf

;~ Проверка Касперский
 $RegRead = RegRead ("HKEY_CLASSES_ROOT\Installer\Products\F3DD3189E82A89B4CAED213ABAC1244E", "ProductName")
If   $RegRead = "Kaspersky Endpoint Security 10 для Windows" Then
	$Kasper = ("ДА")
Else
	$Kasper = ("НЕТ")
 EndIf

;~  Проверка Агент администрирования Касперский
 $RegRead = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\E7D2C1DEA7C58D846A79751D0C08BA7A", "ProductName")
If   $RegRead = "Агент администрирования Kaspersky Security Center" Then
	$NetAgent = ("ДА")
Else
	$NetAgent = ("НЕТ")
 EndIf


;~ СОЗДАНИЕ ОТЧЕТА--------------------------------------------------------------------------------------------------------------------

$Report_File = FileOpen ( 'c:\Program Files\Repotr_User\Report.txt', 0)

;~ запись в файл
$Read_File = FileRead($Report_File)
If $Read_File = @MDAY Then
   FileClose($Report_File)
   DriveMapDel ('R:')
   Exit

Else

;~ Открытие файла отчета
$oFile = FileOpen ( 'R:\REPORT\Проверка установки\' & @MDAY & ' ' & @MON & ' ' & @YEAR & '\Report.txt' , 9)

;~ запись в файл
FileWrite($oFile, $IP & @TAB & $UserName & @TAB & $ComputerName & @TAB & $Kasper & "/" & $NetAgent & @TAB & $Vip & @TAB & $Kript & @TAB & $SUDIS & @CRLF)
;~ закрытие файла
FileClose($oFile)

;~ Открытие файла отчета
$Data_File = FileOpen ( 'c:\Program Files\Repotr_User\Report.txt' , 10)

;~ запись в файл
FileWrite($Data_File, @MDAY)
;~ закрытие файла
FileClose($Data_File)

DriveMapDel ('R:')

EndIf
Exit
 
Верх