Форум » Руководства » Tip: Скрипт поиска и удаления расшаренных ресурсов » Ответить

Tip: Скрипт поиска и удаления расшаренных ресурсов

Zeeon: Tip: Скрипт поиска и удаления расшаренных ресурсов Скрипт разработан для поиска и удаления расшаренных ресурсов, исключая системные. Во время работы скрипта создается файл с расширением .log - в котором и есть нужная информация. Скрипт обрабатывает только пингующиеся хосты, остальные пропускает. Скрипт работает с применением технологии WMI, поэтому может обрабатывать только Windows машины c WMI (2000, 2003, ХР). Не Windows машины, или машины к которым не может быть получен доступ (не входящие в домен, или за Firewall'ом) пропускаются c записью ошибки в файл с расширением .Err. Скрипт может работать со списком исключений - это файл должен называться ShareExcludeHostList.txt и содержать ip адрес или имя компьютера, записанные построчно. Причём имя компьютера не должно содержать доменных суффиксов, иначе сравнение имен не пройдёт и имя не будет считаться исключенным. Регистр имен хостов значения не имеет. В конце скрипта производится вызов внешней утилиты "Blat.exe" http://www.n-admin.com/n5-2294.html - она отправляет сформированный лог на почту админу сети. Если будете что-либо менять не забудьте поменять почтовые адреса и имя сервера в строке отправки предупреждения на на мыло. Содержимое VBScript: ' ' Подпрограмма поиска и удаления расшаренных ресурсов компьютера Sub FindDelete_Share(strComputer) On Error Resume Next ' Продолжение работы скрипта при возникновении ошибки Write_Flag_Share = False ' Флаг записи в лог инфорамции о шарах хоста Err.Clear Set colLocalGroups = objWMIService.ExecQuery("Select * From Win32_Group Where SID = 'S-1-5-32-544'") If Err.Number <> 0 Then ErrorLogFile.WriteLine("Ошибка получения информации о локальных группах для хоста " & strComputer & " Ошибка: " & Err.Number & " Описание: " & Err.description) ' Если ошибка запись в лог ошибок For Each LocalGroup in colLocalGroups HostName = LocalGroup.Domain ' Присвоение имени хоста Next If In_ExcludeList(LCase(HostName)) Then Exit Sub ' Если хост находится в списке исключений, то пропускаем его Text_for_Write = Time & " " & Date & vbTab & "Имя компьютера: " & HostName & vbTab & vbTab & "IP: " & strComputer & Chr(10) ' Запись имени компьютера Text_for_Write_share = "Расшаренные пользователькие ресурсы:" & Chr(10) ' Запись заголовка раздела Err.Clear Set colShares = objWMIService.ExecQuery("Select * from Win32_Share") ' Получение списка всех расшаренных ресурсов If Err.Number <> 0 Then ErrorLogFile.WriteLine("Ошибка получения списка расшаренных ресурсов для хоста " & strComputer & " Ошибка: " & Err.Number & " Описание: " & Err.description) ' Если ошибка запись в лог ошибок For Each ShareItem in colShares ' Перебор списка локальных шар If (ShareItem.Type = 0 And ShareItem.Name <> "print$") Then ' Если шара не системная и не принтер DeleteShareText = "- удалена" Err.Clear ShareItem.Delete() ' Удаление текушей шары If Err.Number <> 0 Then ' Если ошибка, запись в лог ошибок ErrorLogFile.WriteLine("Ошибка удаления шары " & ShareItem.Name & " Ошибка: " & Err.Number & " Описание: " & Err.description) ' Если ошибка запись в лог ошибок DeleteShareText = "- не удалена" End If Text_for_Write_share = Text_for_Write_share & "Имя шары: " & ShareItem.Name & vbTab & vbTab & "Путь: " & ShareItem.Path & vbTab & vbTab & DeleteShareText & Chr(10) Write_Flag_Share = True ' Установка флага записи в лог информации о шарах End If Next ' Следующий элемент списка шар If Write_Flag_Share Then LogFile.WriteLine(Text_for_Write & Text_for_Write_share) ' Запись в лог если найдены шары End Sub ' Конец подпрограммы Function HostPinging(Host_IP) ' Функция проверки пинга на хост On Error Resume Next ' Продолжение работы скрипта при возникновении ошибки HostPinging = True ' Возвращает ПРАВДУ, если пингуется Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & Host_IP & "'") For Each objStatus in objPing If ( IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 ) Then HostPinging = False ' Возвращает ЛОЖЬ, если не пингуется Next End Function Function In_ExcludeList(Host_Adress) ' Функция поиска хоста в списке исключений On Error Resume Next ' Продолжение работы скрипта при возникновении ошибки In_ExcludeList = False For Each ExcludeHost In arrExcludeHostList If ExcludeHost = Host_Adress Then In_ExcludeList = True Exit For End If Next End Function On Error Resume Next ' Продолжение работы скрипта при возникновении ошибки Set wshShell = WScript.CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") ' Создание объекта работы с файлами strLogFileName = Replace(WScript.ScriptName, ".vbs", "") & "_" & Replace(Date, ".", "") & ".log" Set LogFile = objFSO.OpenTextFile(strLogFileName, 8, True) ' Открытие нового лог файла для добавления Set ErrorLogFile = objFSO.OpenTextFile(Replace(WScript.ScriptName, ".vbs", "") & "_" & Replace(Date, ".", "") & ".err", 8, True) ' Открытие нового лог файла для добавления If objFSO.FileExists("ShareExcludeHostList.txt") Then ' Если существует файл со списком исключений, то Set ExcludeFile = objFSO.OpenTextFile("ShareExcludeHostList.txt", 1)' Открытие файла со списком исключенных хостов m = 0 Dim arrExcludeHostList() ' Обявление массива со списком исключений Do Until ExcludeFile.AtEndOfStream ' Перебор всех строк файла исключений Redim Preserve arrExcludeHostList(m) arrExcludeHostList(m) = LCase(ExcludeFile.ReadLine) ' Присвоение строк элементам масива m = m + 1 Loop ExcludeFile.Close ' Закрыть файл End If For j = 100 to 108 ' Подсети с 100 по 108 For i = 1 to 254 ' Хосты с 1 по 254 HostIPAdress = "192.168." & j & "." & i ' Формирование IP Хоста If ( Not In_ExcludeList(HostIPAdress) And HostPinging(HostIPAdress) ) Then ' Если хост пингуется и не находится в списке исключений, то связываемся с ним через WMI Err.Clear Set objWMIService = GetObject("winmgmts:\\" & HostIPAdress & "\root\cimv2") ' Связывание с WMI хоста If Err.Number <> 0 Then ' Если ошибка, запись ошибки в лог и обработка следующего хоста ErrorLogFile.WriteLine("Ошибка связи c WMI для хоста " & HostIPAdress & vbTab & "Описание: " & Err.description) Else ' Иначе поиск админов и шар Call FindDelete_Share(HostIPAdress) End If End If Next ' Следующий хост в подсети Next ' Следующая подсеть LogFile.Close ' Закрыть лог файл ErrorLogFile.Close ' Закрыть лог файл Set objLogFile = objFSO.GetFile(strLogFileName) If objLogFile.Size > 0 Then wshShell.Run "blat.exe "&strLogFileName&" -to LanMailAlert@my_domain.ru -f LanGuard@my_domain.ru -server mailsrv.my_domain.lan -subject "&Chr(34)&"LAN Shares changes"&Chr(34)&" -charset "&Chr(34)&"Windows-1251"&Chr(34),0,True objLogFile.Delete WScript.Quit 0 ' Завершение работы скрипта Вы можете скачать этот скрипт в текстовом формате, только не забудьте переименовать файл, что бы у него было расширение VBS. http://www.n-admin.com/images/stories/Scripts/DelOldFiles1.vbs.txt

Ответов - 0



полная версия страницы