RU | EN | UA

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

Версия для печати Отправить на e-mail
Tag it:
Digg
Technorati
YahooMyWeb
Delicious
blogmarks
Четверг, 20 Апрель 2006 | (10487)

Tips n Tricks | Трюки Админа | Руководство администратора сетиПосле побликации на сайте двух материалов о VB скриптах , Удаляем файлы через vbScript - и Version 1 и Version 2 , я получил письмо с интересными VB Скриптами (VB Scripts). Вот, что написал сам автор о своём скрипте:

Скрипт разработан для поиска и удаления расшаренных ресурсов, исключая системные.
Во время работы скрипта создается файл с расширением .log - в котором и есть нужная информация.
Скрипт обрабатывает только пингующиеся хосты, остальные пропускает.
 

Скрипт работает с применением технологии WMI, поэтому может обрабатывать только Windows машины c WMI (2000, 2003, ХР). Не Windows машины, или машины к которым не может быть получен доступ (не входящие в домен, или за Firewall'ом) пропускаются c записью ошибки в файл с расширением .Err. Скрипт может работать со списком исключений - это файл должен называться ShareExcludeHostList.txt и содержать ip адрес или имя компьютера, записанные построчно. Причём имя компьютера не должно содержать доменных суффиксов, иначе сравнение имен не пройдёт и имя не будет считаться исключенным. Регистр имен хостов значения не имеет. В конце скрипта производится вызов внешней утилиты "Blat.exe" - она отправляет сформированный лог на почту админу сети.

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


Содержимое 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.

Скачать

 

Комментарии

  1. Цитировать #7 Gigru
    2006-04-2822:48:48 А проверка If зачем перед приклеплением стоит ? Или там не все символы видны ?
  2. Цитировать #6 Gigru
    2006-04-2822:45:40 Спасибо, буду знать.
    Всегда есть чему поучиться у знающих людей.
  3. Цитировать #5 Skryaga
    2006-04-2810:03:29 Приветик!
    Найди или у тебя наверняка есть "The Portable Script Center" от Microsofta. В нем есть скрипт оправки сообщения "Send Email without Installing the SMTP Service" если ты имел ввиду те параметры, то это настройка локального smtp сервера.
    А вложене делается так:
    If sEmailAttachment "" Then
    objEmail.AddAttachment=sEmailAttachment
    End If
  4. Цитировать #4 Gigru
    2006-04-2806:56:28 И как вложение сделать по методу CDO.Message ?
  5. Цитировать #3 Gigru
    2006-04-2806:54:34 Посмотрел я этот метод "CDO.Message" и не очень понял, а зачем там упоминается http ссылка на микрософт ? Он случайно не через Инет отправлять будет ?
  6. Цитировать #2 Skryaga
    2006-04-2612:44:53 С таким же успехом можно не использовать дополнительную утилиту для отправки письма с вложением, а использовать для отправки встроенные средства "CDO.Message". Тоже неплохо отрабатывает.
  7. Цитировать #1 Vadia
    2006-04-2108:46:25 Спасибо, очень грамотный скрипт! Хорошо использовать, як, скелет для для многих операций. Например для замены пароля локальных админов или отключения firewall на XP.

Добавить комментарий

Жирный Курсив Подчеркнутый Ссылка Цитата


Автотранслитерация: выключена

Защитный код

Powered by jComments
Created by Pelican Design Studio - Web 2 You / Hosting by TheystemAdministrator.com / Tech. Support ITStuff.ca - Tips and Tricks for IT Stuff / Фин. Спонсор WEX
Templates by Pelican Web Studio Templates by Pelican Web Design Studio