Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 3

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

DeisGood



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

'Скрипт очистки DHCP сервера, от андроид и прочих устройства
'Протестирован на ОС: Windows 2008R2
'Автор скрипта: blackrodger@yandex.ru icq:310296194
 
'Скрипт производит очистку методом выгрузки клиентов заданной области DHCP в файл,  
' выборкой и последующим удалением, с использованием команд:
' netsh dhcp server scope ID_SCOPE show clients 1
' netsh dhcp server scope ID_SCOPE delete lease IP_Clients
 
'========================================================================================================================='
'                                 БЛОК НАСТРОЕК. РЕДАКТИРУЕТСЯ АДМИНИСТРАТОРОМ ПОД МЕСТНЫЕ УСЛОВИЯ                          '
'========================================================================================================================='
'======================================= Блок входных параметров: Файловая система.======================================='
AllScp = "192.168.0.0"        'задаем область(области) dhcp для очистки. При наличии нескольких областей указывать через
                            'запятую, например "192.168.0.0,10.103.4.0,....,10.202.245.000"
DevMask = "android,galaxy,honor,ipad,iphone,miphone,redmi"    'маска(маски) поиска в именах устройств DHCP подлежащие  
                            'удалению. Перечисляем через запятую, например "android,galaxy,.....,ipad"
LogFileName = "\Logs\ClearDhcp.log"    'задаем имя файла лога(путь), если оставить пустым файл лога создается  
                            'в папке запуска скрипта с именем %ИмяСкрипта%.log
'============================================ Блок параметров работы скрипта. ============================================'
DebugLog = 0        'уровень лога
                    '0 - облегченный лог, 1 - полный лог со всеми выполняемыми действиями,
LogFile = 1         '0 - выполнямые действия записываются в лог-файл, лог файл пересоздается по новой
                    '1 - выполнямые действия записываются в лог-файл, добавлением в существующий файл лога
                    '2 - лог файл не создается
'========================================================================================================================='
'                     ***** КОНЕЦ БЛОКА НАСТРОЕК!!!  ***** Дальше ничего править не нужно!!!!! *****                      '
'========================================================================================================================='
 
Dim Flog
Dim FolderScript
Dim Fvygr
Dim ScrName
Dim KolScp
Dim KolMask
Dim KolRec
 
'On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNet = CreateObject("WScript.Network")
 
'Блок 0. Опрос параметров необходимых для работы скрипта.
'Определяем папку запуска и имя файла скрипта
Set FileScripts = objFSO.GetFile(Wscript.ScriptFullName)
FolderScript = objFSO.GetParentFolderName(FileScripts)
ScrName = WScript.ScriptName
Set FileScripts = Nothing
 
'Подготовка файла лога
ScrFlNm = "\" & Left(ScrName,Len(ScrName) - 3) & "log"
ObrFlNm = StrSh(LogFileName)
'определяем имя файла лога
If ObrFlNm = 0 OR StrSh(LogFileName) = 4 Then Flog = FolderScript & ScrFlNm
If ObrFlNm = 1 Then Flog = LogFileName & ScrFlNm
If ObrFlNm = 2 Then Flog = LogFileName
If ObrFlNm = 3 Then Flog = FolderScript & "\" & LogFileName
Flog = Replace(Flog,"\\","\")
'создаем/начинаем запись в файл лога
If objFSO.FileExists(Flog) and LogFile = 0 Then objFSO.DeleteFile(Flog)
If Logfile < 2 Then
    If Not objFSO.FileExists(Flog) Then
        Set lf = objFSO.CreateTextFile(Flog, True)
        lf.WriteLine("Файл лога очистки DHCP. Создан " & Cdate(Now) & VbLf)
        lf.Close
    End If
    Set lf = objFSO.OpenTextFile(Flog, 8)
    lf.WriteLine ("Запуск процедуры очистки. " & Cdate(Now))
    If StrSh(LogFileName) = 4 Then lf.WriteLine("Ошибка в параметре имени файла лога (LogFileName)." & VbLf)
    lf.Close
End If
 
'Производим проверку корректности указанных областей и маски поиска, определяем количество заданных параметров.
KolScp = StrFnd(AllScp,0,0,0) 'получим количество заданных областей
KolMask = StrFnd(DevMask,1,0,0) 'получим количество заданных элементов маски
RecLog "Задано " & KolScp & " областей для очистки, количество фильтров: " & KolMask & "." , 0
 
'Блок 1. Выгрузка, обработка и очистка по заданным маскам.
WrkDhcp 0 'выгружаем области
WrkDhcp 1 'производим очистку по заданным маскам.
GoodBye
 
'=============================================================================
'Функции
'=============================================================================
'Функция обработки параметра пути файла лога:  
'определяет что прописанно в переменной, создает требуемую структуру каталогов если не было
'передаваемые параметры:
'St - строка для обработки
'Возвращает: 0-путь не указан, 1-указано имя диска, 2-указан полный путь с именем файла
    '3-указано только имя файла, 4-ошибка в параметре, используется стандартное имя.
Function StrSh(St)
    LogFileName = Trim(Replace(St,"/","\"))
    If St = "" Then  
        StrSh = 0
    Else
        If Mid(St,2,1) = ":" Then StrSh = 1 'ищем имя диска
        If Len(St)>4 And Mid(Right(St,4),1,1) = "." And StrSh = 1 Then StrSh = 2 'ищем полный путь  
        If Len(St)>4 And Mid(Right(St,4),1,1) = "." And Not StrSh = 2 Then StrSh = 3 'ищем имя файла    
        If StrSh = "" Then StrSh = 4 'переменная записана с ошибкой, используем как пустую
        If StrSh = 1 And Not objFSO.FolderExists(St) Then objFSO.CreateFolder(St) 'создаем папку если нет
        If StrSh = 2 Or StrSh = 3 Then
            FlNm = Left(St,InStrRev(St,"\"))
            If Not Mid(St,2,1) = ":" Then FlNm = Replace(FolderScript & "\" & FlNm,"\\","\")
            If Not objFSO.FolderExists(FlNm) Then objFSO.CreateFolder(FlNm)
        End If
    End If
End Function
 
'Функция обработки параметров области (AllScp) или маски поиска(DevMask):  
'поэлементный разбор строк параметров областей или маски поиска
'передаваемые параметры:
'St - строка для обработки
'TipPar - тип параметра: 0-области, 1-маски
'TipFind - тип поиска, возможные значения:
'            0-определение общего количества элементов в параметре
'            1-запрос определённого элемента с заданым номером (NumF)
'NumF - номер элемента
'Возвращает в зависимости от TipFind количество элементов, либо заданный элемент из списка,  
'либо прерывает выполнение скрипта если в одном из указанных диапазонов будет обнаружена ошибка
Function StrFnd(St,TipPar,TipFind,NumF)
    arrStrFind = Split(St, ",")
    RazMass = UBound(arrStrFind)
    If Not (KolScp > 0 And KolMask > 0) Then  
        If TipPar = 0 Then StrQ = "области" Else StrQ = "маски"
        If RazMass = -1 Then 'если параметр пустой завершаем работу
            msb = "Неверно указан параметр " & StrQ & ". Дальнейшее выполнение скрипта невозможно."
            RecLog msb, 0
            GoodBye
        End If
        'проверяем корректность указанных областей
        If TipPar = 0 Then
            On Error Resume Next
            For i=0 To RazMass
                ElObl = Split(arrStrFind(i), ".")
                RazEl = UBound(ElObl)
                msb = "Неверно указана область ''" & arrStrFind(i) & "''. Дальнейшее выполнение скрипта невозможно."
                If RazEl = 3 Then
                    For y=0 To RazEl
                        If Not ElObl(y)<= 255 Or Not ElObl(3) = 0 Or Err.Number <> 0 Then
                            RecLog msb, 0
                            GoodBye
                        End If
                    Next
                Else
                    RecLog msb, 0
                    GoodBye
                End If
            Next
            On Error Goto 0
        End If
    End If
    If TipFind = 0 Then StrFnd = RazMass + 1 Else StrFnd = Trim(arrStrFind(Numf))
End Function
'=============================================================================
'Процедуры
'=============================================================================
'Процедура закрытия скрипта с сохранением файла лога (если задано)
Sub GoodBye ()
    RecLog "Все операции завершены. Скрипт закрывается. " & Cdate(Now) & VbLf, 0
    Set objShell = Nothing
    Set objFSO = Nothing
    Set objNet = Nothing
    WScript.Quit
End Sub
 
'Процедура записи в файл лога
'передаваемые параметры:
'msb - текст сообщения
'dl - приоритетность отображения в логе
Sub RecLog (msb,dl)
    If Logfile < 2 And dl <= DebugLog Then
        Set lf = objFSO.OpenTextFile(Flog, 8)
        lf.WriteLine (msb)
        lf.Close    
    End If
End Sub
 
'Процедура выгрузки/удаления по маске списка арендованых адресов Dhcp:  
'передаваемые параметры:
'TipWrk - параметры работы с файлом выгрузки:
'    0-выгрузка области в файл,  
'    1-поиск и удаление по маске,
Sub WrkDhcp(TipWrk)
    For i=0 To KolScp - 1
        TekObl = StrFnd(AllScp,0,1,i)
        If Not objFSO.FolderExists(FolderScript & "\Scope") Then objFSO.CreateFolder(FolderScript & "\Scope")
        FileScope = FolderScript & "\Scope\Scope" & Replace(TekObl,".","") & ".csv"
        If TipWrk = 0 Then 'выгружаем область в файл
            If objFSO.FileExists(FileScope) Then objFSO.DeleteFile(FileScope)
            objShell.Run "cmd /c netsh dhcp server scope " & TekObl & " show clients 1 >" & FileScope, 0, true
            RecLog "Выгружена область: " & TekObl & " в файл " & FileScope & "." , 0
        ElseIf TipWrk = 1 Then 'производим поиск и удаление по маске
            KolRec = 0 ' обнулим счётчик удаленных записей для текущей области
            Set FlWrk = objFSO.OpenTextFile(FileScope, 1)
            Do Until FlWrk.AtEndOfStream 'обрабатываем выгруженные записи
                TekStr = FlWrk.ReadLine
                For y=0 To KolMask - 1
                    TekMask = StrFnd(DevMask,1,1,y)
                    Fn = InStr(1,TekStr,TekMask,1)
                    If Fn > 0 Then
                        ClrIp = Trim(Left(TekStr,(InStr(TekStr," "))))
                        objShell.Run "cmd /c netsh dhcp server scope " & TekObl & " delete lease " & ClrIp, 0, true
                        RecLog "Удален IP " & ClrIp & ". Запись DHCP: " & TekStr , 1  
                        KolRec = KolRec + 1
                    End If
                Next
            Loop
            FlWrk.Close
            Set FlWrk = Nothing
            RecLog "Согласно заданых масок в области " & TekObl & " удалено " & KolRec & " записей." , 0
        End If
    Next
End Sub

Всего записей: 161 | Зарегистр. 18-11-2005 | Отправлено: 09:00 16-04-2018
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 3


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru