Примеры скриптов для администрирования

Содержание

  1. Копирование файла на рабочий стол пользователя
  2. Удаление сервиса
  3. Добавление учетной записи в группу администраторов компьютера
  4. Сжатие папки и отправка архива по почте
  5. Удаление устаревших временных файлов
  6. Получение пользователей, групп и компьютеров из Active Directory
  7. Замена слова во всех файлах директории
  8. Выполнение команды на удаленном компьютере
  9. Вычисление подсети по IP-адресу и маске

Копирование файла на рабочий стол пользователя

Назначение сценария - скопировать на рабочий стол всех пользователей организации файл. Скрипт выполняется при загрузке компьютера через Logon Script (через доменную политику) или с помощью System Management Server (он же System Center Configuration Manager).

Использование скрипта: в папку со скриптом скопировать файл, который нужно распространить среди пользователей, в теле сценария заменитьMySite.urlна имя скопированного файла.

' === Script Information Header ===
' Script Name: CopyFile.vbs
' Date:        18.10.09
' Author:      Виталий Бочкарев
' Description: Скрипт копирования файла на рабочий стол пользователя

' === Initialization Block ===
Option Explicit
Dim sAllUsersProfile
Dim oShell, oFSO

' === Script Main Logic ===
' Создание объекта оболочки
Set oShell = CreateObject("WScript.Shell")
' Создание объекта файловой системы
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Получение пути к общему профилю
sAllUsersProfile = oShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%")
' Проверка существования файла
If oFSO.FileExists(sAllUsersProfile & "\Desktop\MySite.url") = False Then
    ' Копирование файла из рабочей директории на рабочий стол пользователя
    Call oFSO.CopyFile(oShell.CurrentDirectory & "\MySite.url",_
      sAllUsersProfile & "\Desktop\", True)
End If

Удаление сервиса

Назначение сценария - удалить сервис из системы.

Использование сценария: в строкеsServiceName = "ExampleService"заменитьExampleServiceна имя удаляемого сервиса.

' === Script Information Header ===
' Script Name: DeleteService.vbs
' Date:        18.10.09
' Author:      Виталий Бочкарев
' Description: Скрипт удаления сервиса

' === Initialization Block ===
Option Explicit
On Error Resume Next
Dim sComputer, sServiceName
Dim oShell, oFSO, oWMIService, colListOfServices, oService

' ==== Script Main Logic ====
' Создание объекта оболочки
Set oShell = CreateObject("WScript.Shell")
' Создание объекта файловой системы
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Имя компьютера, где надо удалить сервис
sComputer = "."
' Имя сервиса для удаления
sServiceName = "ExampleService"
' Подключение к WMI компьютера
Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2")
' Получение коллекции сервисов
Set colListOfServices = oWMIService.ExecQuery ("SELECT * FROM Win32_BaseService " _
  & "WHERE Name LIKE '" & sServiceName & " '")
' Удаление сервисов, попавших в выборку
For Each oService in colListOfServices
    oService.StopService()
    WScript.Sleep 5000
    oService.Delete()
    WScript.Sleep 3000
Next

Добавление учетной записи в группу администраторов компьютера

Назначение сценария - добавить учетную запись в группу локальных администраторов компьютера.

Использование сценария: скрипт нужно запускать из командной строки, передевая ему в качестве параметра учетную запись, которую нужно внести в администраторы.

Примечание. Сценарий работает только на англоязычной версии Windows, для русскоязычных версий, возможно, потребуется изменение тела сценария (написать имя группы администраторов на русском языке).
' === Script Information Header ===
' Script Name: AddToAdmins.vbs
' Date:        18.10.09
' Author:      Виталий Бочкарев
' Description: Скрипт добавления учетной записи в группу администраторов компьютера

' === Initialization Block ===
Option Explicit
On Error Resume Next
Dim sComputer, mArg, mAccount, mFlag, mGroup, CurrentUser
Dim oShell, oFSO, oWMIService, colListOfServices, oService

' ==== Script Main Logic ====
' Получение аргументов командной строки
Set mArg = Wscript.Arguments
If mArg.count = 1 Then
    mAccount = mArg(0)
Else
    Wscript.Echo "Использование:" & vbCrLf & _
        "  AddAccountToAdmins.vbs Account" & vbCrLf & _
        vbCrLf & _
        "Пример:" & vbCrLf & _
        "  AddAccountToAdmins.vbs ""DOMAIN\ACCOUNT""" & vbCrLf & _
        "  добавляет указанную учетную записть в группу локальных администраторов компьютера"
    Wscript.Quit
End If
' Имя компьютера, где надо удалить сервис
sComputer = "."
' Флаг наличия учетной записи в группе администраторов
mFlag = False
' Подготовка учетной записи к добавлению в группу администраторов
mAccount = Replace(mAccount,"\","/")
mAccount = "WinNT://" & mAccount
' Подключение к группе администраторов компьютера
Set mGroup = GetObject("WinNT://" & sComputer & "/Administrators,group")
' Проверка наличия учетной записи в группе администраторов
For Each CurrentUser in mGroup.Members
    If CurrentUser.ADsPath = mAccount Then mFlag = True
Next
' Добавление учетной записи в группу администраторов компьютера
If mFlag = False then mGroup.Add(mAccount)

Сжатие папки и отправка архива по почте

Назначение сценария - отправить администратору архив файлов журнала.

Использование сценария: скопировать в папку скрипта архиватор 7z, в теле сценария указать папку для сжатия (mFolderToCompress), адрес отправителя (mFrom), адрес получателя (mTo), тему сообщения (mSubject), текст сообщения (mTextBody), почтовый сервер (mSMTPServer), SMTP порт почтового сервера (mSMTPport).

' === Script Information Header ===
' Script Name: SendArchive.vbs
' Date:        19.10.09
' Author:      Виталий Бочкарев
' Description: Скрипт сжатия папки и отправки архива по почте

' === Initialization Block ===
Option Explicit
On Error Resume Next
Dim mWorkDir, mCommand
Dim oShell, oFSO, oEmail
Const mFolderToCompress = "C:\Test Folder\*"
Const mArhiveName = "Attachment.zip"
Const mFrom = "script@domain.com"
Const mTo = "user@domain.com"
Const mSubject = "Letter Subject"
Const mTextBody = "Look the attachment."
Const mSMTPServer = "mail.domain.com"
Const mSMTPport = 25

' ==== Script Main Logic ====
' Создание объекта оболочки
Set oShell = CreateObject("WScript.Shell")
' Создание объекта файловой системы
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Создание объекта почтового сообщения
Set oEmail = CreateObject("CDO.Message")
' Получение рабочей директории скрипта
mWorkDir = Left(WScript.ScriptFullName,Len(WScript.ScriptFullName)-Len(WScript.ScriptName))
' Составление команды для упаковки указанной директории
mCommand = """" & mWorkDir & "7z.exe""" & " a -y " & """" & mWorkDir & mArhiveName _
  & """ """ & mFolderToCompress & """"
' Упаковка директории
Call oShell.Run(mCommand, 0, True)
' Составление почтового сообщения
oEmail.From = mFrom
oEmail.To = mTo
oEmail.Subject = mSubject
oEmail.Textbody = mTextBody
' Прикрепление архива к сообщению
Call oEmail.AddAttachment(mWorkDir & mArhiveName)
' Настройка почтового канала
oEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/" & _
  "cdo/configuration/sendusing") = 2
oEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/" & _
  "cdo/configuration/smtpserver") = mSMTPServer
oEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/" & _
  "cdo/configuration/smtpserverport") = mSMTPport
oEmail.Configuration.Fields.Update
' Отправка сообщения
oEmail.Send
WScript.Sleep 300
' Удаление архива
Call oFSO.DeleteFile(mWorkDir & mArhiveName, True)

Удаление устаревших временных файлов

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

Использование сценария: в теле скрипта указать время в днях, после которого файл считается устаревшим (PurgeTime), профили-исключения, которые не нужно обрабатывать (aExceptions), и папку-карантин антивируса (sQuarantine), после работы сценария во временной папке Windows будет создан файл-отчет.

' === Script Information Header ===
' Script Name: PurgeTemp.vbs
' Date:        18.10.09
' Author:      Виталий Бочкарев
' Description: Скрипт удаления устаревших временных файлов

' === Initialization Block ===
Option Explicit
On Error Resume Next
Dim aExceptions(3)
Dim sProgramFiles, sWinDir, sWinTempFolder, sDocuments, sLogFileName, sQuarantine
Dim bFlag, sException
Dim oShell, oFSO, oLogFile, oDocuments, colProfiles, oProfile
Const PurgeTime = 14

' ==== Script Main Logic ====
' Создание объекта оболочки
Set oShell = CreateObject("WScript.Shell")
' Создание объекта файловой системы
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Исключения - профили пользователей, которые не должны обрабатываться
aExceptions(0) = "Default User"
aExceptions(1) = "LocalService"
aExceptions(2) = "NetworkService"
aExceptions(3) = "All Users"
' Определение путей служебных папок
sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%")
sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%")
sWinTempFolder = sWinDir & "\Temp"
sDocuments = "C:\Documents and Settings"
' Создание фурнала работы сценария
sLogFileName = sWinTempFolder & "\PurgeTemp_" & Date
sLogFileName = Replace(sLogFileName, ".", "_")
sLogFileName = Replace(sLogFileName, "/", "_")
Set oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true)
oLogFile.WriteLine "========== Start purging =========="
' Очистка временной папки Windows
oLogFile.WriteLine vbCrLf & "========== Windows Temporary folder =========="
PurgeFolder(sWinTempFolder)
' Очистка временной папки профиля пользователя и файлов Интернет
oLogFile.WriteLine vbCrLf & _ 
  "========== Users Temporary folder and Users Temporary Internet Files =========="
Set oDocuments = oFSO.GetFolder(sDocuments)
Set colProfiles = oDocuments.SubFolders
For Each oProfile In colProfiles
    bFlag = false
    For Each sException in aExceptions
        if InStr(oProfile.Path,sException) > 0 then
        bFlag = true
            exit for
        end if
    Next
    If bFlag = False Then
        PurgeFolder(oProfile.Path & "\Local Settings\Temp")
        PurgeFolder(oProfile.Path & "\Local Settings\Temporary Internet Files")
    End If
Next
' Очистка карантина NOD32
oLogFile.WriteLine vbCrLf & "========== NOD32 Quarantine =========="
sQuarantine = sProgramFiles & "\Eset\Infected"
PurgeFolder(sQuarantine)
' Закрытие файла журнала
oLogFile.WriteLine vbCrLf & "========== Stop purging =========="
oLogFile.Close

' === Functions and Procedures ===
' Процедура PurgeFolder - удаление старых файлов
Sub PurgeFolder(sFolderPath)
    Dim oFolder, colFiles, oFile, colSubFolders, oSubFolder
    ' Создание объекта Folder
    Set oFolder = oFSO.GetFolder(sFolderPath)
    ' Получение коллекции файлов
    Set colFiles = oFolder.Files
    ' Обработка каждого файла из коллекции
    For each oFile in colFiles
        ' Проверка, является ли файл устаревшим
        If (Date-oFile.DateLastModified) > PurgeTime and (Date-oFile.DateCreated) > _ 
          PurgeTime Then
            ' Запись сообщения в журнал сценария
            oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated
            ' Удаление устаревшего файла
            oFSO.DeleteFile oFile.Path, True
            ' Проверка на наличие ошибок
            if err.Number <> 0 then
                ' Запись сообщения об ошибке в журнал сценария
                oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _
                  & " " & Err.Description
                ' Очистка ошибки
                Err.Clear
            end if
            ' Пауза в 20 милисекунд
            WScript.Sleep 20
        End if
    Next
    ' Получение коллекции подпапок
    Set colSubFolders = oFolder.SubFolders
    ' Обработка каждой подпапки
    For Each oSubFolder In colSubFolders
        ' Рекурсивный вызов процедуры удаления старых файлов - подпрограмма вызывает
        ' сама себя
        PurgeFolder(oSubFolder.Path)
        ' Проверка размера папки
        If oSubFolder.Size = 0 Then
            ' Запись сообщения в журнал сценария
            oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated
            ' Удаление пустой папки
            oFSO.DeleteFolder oSubFolder.Path
            ' Проверка на наличие ошибок
            If err.Number <> 0 then
                ' Запись сообщения об ошибке в журнал сценария
                oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _
                  & " " & Err.Description
                ' Очистка ошибки
                Err.Clear
            End if
        End if
    Next
End Sub

Получение пользователей, групп и компьютеров из Active Directory

Назначение сценария - получить выгрузку пользователей, компьютеров и групп из Active Directory.

Использование сценария: в теле скрипта указать контейнеры, где хранятся объекты учетных записей пользователей, компьютеров и групп (oADCommand.CommandText), после работы сценария будут созданы три файла с выгруженной информацией, которые удобно читать в Excell.

' === Script Information Header ===
' Script Name: GetADObjects.vbs
' Date:        19.10.09
' Author:      Виталий Бочкарев
' Description: Скрипт получения пользователей, групп и компьютеров из Active Directory
' === Initialization Block ===

Const ADS_UF_ACCOUNTDISABLE             = &H00000002
Const ADS_GROUP_TYPE_GLOBAL_GROUP       = &H2
Const ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP = &H4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP    = &H8
Const ADS_GROUP_TYPE_SECURITY_ENABLED   = &H80000000
 
Dim aTemp()
' === Script Main Logic ===

mWorkDir = Left(WScript.ScriptFullName,Len(WScript.ScriptFullName)-Len(WScript.ScriptName))

' Создание объекта оболочки
Set oShell = CreateObject("WScript.Shell")
' Создание объекта файловой системы
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Создание объекта соединения с Active Directory
Set oADConection = CreateObject("ADODB.Connection")
' Создание объекта команд запроса к Active Directory
Set oADCommand = CreateObject("ADODB.Command")
' Открытие соединения с Active Directory
oADConection.Provider = "ADsDSOObject"
oADConection.Open
oADCommand.ActiveConnection = oADConection
' Составление команды для получения пользователей
oADCommand.CommandText = "<LDAP://CN=Users,DC=domain,DC=com>;" & _
  "(objectClass=user);samAccountName,userPrincipalName,displayName," & _
  "name,sn,GivenName,MiddleName,initials,company,department,title," & _
  "telephoneNumber,otherTelephone,facsimileTelephoneNumber," & _
  "otherFacsimileTelephoneNumber,mail,mailNickname,info," & _
  "physicalDeliveryOfficeName,roomNumber,memberOf,ScriptPath," & _
  "HomeDirectory,HomeDrive,ProfilePath;SubTree"
' Выполнение команды получения пользователей
Set oUsers = oADCommand.Execute()
iCounter = 0
ReDim aTemp(0)
' Обработка полученных данных
Do Until oUsers.EOF
    ReDim Preserve aTemp(iCounter)
    aTemp(iCounter) = oUsers("samAccountName") & vbTab _
      & oUsers("userPrincipalName") & vbTab _
      & oUsers("displayName") & vbTab _
      & oUsers("name") & vbTab _
      & oUsers("sn") & vbTab _
      & oUsers("GivenName") & vbTab _
      & oUsers("MiddleName") & vbTab _
      & oUsers("initials") & vbTab _
      & oUsers("company") & vbTab _
      & oUsers("department") & vbTab _
      & oUsers("title") & vbTab _
      & oUsers("telephoneNumber") & vbTab _
      & oUsers("facsimileTelephoneNumber") & vbTab _
      & oUsers("otherFacsimileTelephoneNumber") & vbTab _
      & oUsers("mail") & vbTab _
      & oUsers("mailNickname") & vbTab _
      & oUsers("info") & vbTab _
      & oUsers("physicalDeliveryOfficeName") & vbTab _
      & oUsers("roomNumber") & vbTab _
      & oUsers("ScriptPath") & vbTab _
      & oUsers("HomeDirectory") & vbTab _
      & oUsers("HomeDrive") & vbTab _
      & oUsers("ProfilePath") & vbCrLf
    oUsers.MoveNext
    iCounter = iCounter + 1
Loop
' Сортировка массива пользователей
Call SortArray(aTemp)
' Составление выходного файла
mUsers ="samAccountName" & vbTab & _
  "userPrincipalName" & vbTab & _
  "displayName" & vbTab & _
  "name" & vbTab & _
  "sn" & vbTab & _
  "GivenName" & vbTab & _
  "MiddleName" & vbTab & _
  "initials" & vbTab & _
  "company" & vbTab & _
  "department" & vbTab & _
  "title" & vbTab & _
  "telephoneNumber" & vbTab & _
  "facsimileTelephoneNumber" & vbTab & _
  "otherFacsimileTelephoneNumber" & vbTab & _
  "mail" & vbTab & _
  "mailNickname" & vbTab & _
  "info" & vbTab & _
  "physicalDeliveryOfficeName" & vbTab & _
  "roomNumber" & vbTab & _
  "ScriptPath" & vbTab & _
  "HomeDirectory" & vbTab & _
  "HomeDrive" & vbTab & _
  "ProfilePath" & vbCrLf
For iCounter = 0 To UBound(aTemp)
    mUsers = mUsers & aTemp(iCounter)
Next
' Составление команды для получения компьютеров
oADCommand.CommandText = "<LDAP://CN=Computers,DC=domain,DC=com>;" & _
  "(objectClass=Computer);name,operatingSystem,useraccountcontrol;SubTree"
' Выполнение команды получения компьютеров
Set oComputers = oADCommand.Execute()
iCounter = 0
ReDim aTemp(0)
' Обработка полученных данных
Do Until oComputers.EOF
    ReDim Preserve aTemp(iCounter)
    aTemp(iCounter) = oComputers("name") & vbTab _
      & oComputers("operatingSystem") & vbTab
    If Hex(oComputers("UserAccountControl")) and ADS_UF_ACCOUNTDISABLE then
      aTemp(iCounter) = aTemp(iCounter) & "Disabled" & vbCrLf
    Else
        aTemp(iCounter) = aTemp(iCounter) & "Enabled" & vbCrLf
    End If
    oComputers.MoveNext
    iCounter = iCounter + 1
Loop
' Сортировка массива компьютеров
Call SortArray(aTemp)
' Составление выходного файла
mComputers = "Name" & vbTab & _
  "Operating System" & vbTab & _
  "Status" & vbCrLf
For iCounter = 0 To UBound(aTemp)
    mComputers = mComputers & aTemp(iCounter)
Next
' Составление команды для получения групп
oADCommand.CommandText = "<LDAP://CN=Users,DC=domain,DC=com>;" & _
  "(objectClass=group);name,member,memberOf;SubTree"
' Выполнение команды получения групп
Set oGroups = oADCommand.Execute()
iCounter = 0
ReDim aTemp(0)
' Обработка полученных данных
Do until oGroups.EOF
    ReDim Preserve aTemp(iCounter)
    aTemp(iCounter) = aTemp(iCounter) & oGroups("name") & vbCrLf
    aTemp(iCounter) = aTemp(iCounter) & vbTab & "Members:" & vbCrLf
    aMembers = oGroups("member")
    If Not IsNull(aMembers) Then
        For iMember = 0 To UBound(aMembers)
            aTemp(iCounter) = aTemp(iCounter) & vbTab & vbTab & Mid(aMembers(iMember), _
              4,InStr(aMembers(iMember),",")-4) & vbCrLf
        Next
    End if
    aTemp(iCounter) = aTemp(iCounter) & vbTab & "Member of:" & vbCrLf
    aMembers = oGroups("memberOf")
    If Not IsNull(aMembers) Then
        For iMember = 0 To UBound(aMembers)
            aTemp(iCounter) = aTemp(iCounter) & vbTab & vbTab & Mid(aMembers(iMember), _
              4,InStr(aMembers(iMember),",")-4) & vbCrLf
        Next
    End if
    aTemp(iCounter) = aTemp(iCounter) & vbCrLf
    oGroups.MoveNext
    iCounter = iCounter + 1
Loop
' Сортировка массива групп
Call SortArray(aTemp)
' Составление выходного файла
For iCounter = 0 To UBound(aTemp)
    mGroups = mGroups & aTemp(iCounter)
Next
' Запись результатов в файлы
Set oOutFile1 = oFSO.CreateTextFile(mWorkDir & "\" & "Users.txt",1)
Set oOutFile2 = oFSO.CreateTextFile(mWorkDir & "\" & "Computers.txt",1)
Set oOutFile3 = oFSO.CreateTextFile(mWorkDir & "\" & "Groups.txt",1)
oOutFile1.Write mUsers
oOutFile2.Write mComputers
oOutFile3.Write mGroups
oOutFile1.Close
oOutFile2.Close
oOutFile3.Close

' === Functions and Procedures ===
' Процедура сортировки массива
Sub SortArray(byref arrNames)
    For i = (UBound(arrNames) - 1) to 0 Step -1
        For j= 0 to i
            If UCase(arrNames(j)) > UCase(arrNames(j+1)) Then
                strHolder = arrNames(j+1)
                arrNames(j+1) = arrNames(j)
                arrNames(j) = strHolder
            End If
        Next
    Next
End Sub

Замена слова во всех файлах директории

Назначение сценария - заменить слова в тексте всех htm- и html-файлов, находящихся в указанной директории.

Использование сценария: в теле скрипта указать путь к папке, где хранятся файлы для обработки (sFolder), слово, которое нужно найти, (sFindText) и слово, на которое нужно сделать замену, (sReplaceText). После работы сценария во всех файлах htm и html указанное слово будет заменено на требуемое.

' === Script Information Header ===
' Script Name: TextReplacement.vbs
' Date:        24.02.10
' Author:      Виталий Бочкарев
' Description: Скрипт замены слова во всех файлах директории
' === Initialization Block ===

Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8

Const TristateUseDefault = -2
Const TristateTrue       = -1
Const TristateFalse      =  0
 
Const sFolder      = "\\Server\Resource\Folder"
Const sFindText    = "Server01"
Const sReplaceText = "Server02"

Dim ChangeCounter

' === Script Main Logic ===
' Создание объекта оболочки
Set oShell = CreateObject("WScript.Shell")
' Создание объекта файловой системы
Set oFSO = CreateObject("Scripting.Filesystemobject")
' Вызов процедуры замены слов
Call TextReplacement(sFolder, sFindText, sReplaceText)
' Вывод на экран количества обработанных файлов
WScript.Echo vbCrLf & ChangeCounter & " files were checked"

' === Functions and Procedures ===

' Процедура замены слов
Sub TextReplacement(FolderPath, FindText, ReplaceText)
    ' Подключение к директории
    Set oFolder = oFSO.GetFolder(FolderPath)
    ' Получение файлов директории
    Set colFiles = oFolder.Files
    ' Обработка каждого файла директории
    For Each oFile In colFiles
        ' Фильтрация только HTM и HTML файлов
        If LCase(Right(oFile.Name,3))="htm" Or LCase(Right(oFile.Name,4))="html" Then
            ' Считывание содержимого очередного файла
            Set oFileContent = oFile.OpenAsTextStream(ForReading, TristateUseDefault)
            sText = oFileContent.ReadAll
            oFileContent.Close
            ' Замена содержимого очередного файла
            sText = Replace(sText, FindText, ReplaceText)
            ' Перезапись очередного файла
            Set oNewFile = oFSO.CreateTextFile(oFile.Path)
            oNewFile.Write(sText)
            oNewFile.Close
            ' Увеличение счетчика проверенных файлов
            ChangeCounter = ChangeCounter + 1
        End If
    Next
    ' Получение подпапок директории
    Set colSubFolders = oFolder.SubFolders
    For Each oSubFolder In colSubFolders
        ' Рекурсивный вызов процедуры замены слов
        Call TextReplacement(oSubFolder.Path, FindText, ReplaceText)
    Next
End Sub

Выполнение команды на удаленном компьютере

Назначение сценария - поставить на удаленном компьютере задачу на выполнение указанной команды через 3 минуты от текущего времени.

Использование сценария: в теле скрипта указать имя компьютера, на котором нужно запустить команду, (sComputer), команду или файл скрипта для выполнения (sCommand) и тип взаимодействия с пользователем (bInteract). После работы сценария на указанном компьютере будет создана задача на запуск требуемого файла (задача отображается в планировщике задач Windows). После завершения работы команды задача уничтожается.

Примечание. Файл, указанный в команде, должен быть доступен для запуска с удаленного компьютера или присутствовать на самом компьютере, в противном случае пользователь увидит окно с ошибкой выполнения задачи, если тип взаимодействия с пользователем указан какTrue- показывать на экране.
' === Script Information Header ===
' Script Name: SetTask.vbs
' Date:        24.02.10
' Author:      Виталий Бочкарев
' Description: Скрипт выполнения команды на удаленном компьютере в определенное время

' === Initialization Block ===

Const sComputer = "CompName"
Const sCommand  = "notepad.exe"
Const bInteract = True

' === Script Main Logic ===

'Создание объекта для работы с оболочкой
Set oShell = CreateObject("WScript.Shell")
'Создание объекта для работы с файловой системой
Set oFSO = CreateObject("Scripting.FileSystemObject")
' Вызов функции постановки задачи
WScript.Echo SetTask(sComputer, sCommand, bInteract)

' === Functions and Procedures ===

' Функция постановки задачи
Function SetTask(Computer, Command, Interact)
    ' Подключение к WMI текущего компьютера
    Set oWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
    ' Запрос временной зоны текущего компьютера
    Set oColTime = oWMIService.ExecQuery("Select * from Win32_TimeZone")
    ' Вычисление смещения на летнее время
    For Each oTime In oColTime
        If Month(Date) > 4 And Month(Date) ' Составление часового пояса: OOO
    Select Case Len(cStr(Abs(iLocalBias)))
        Case "0"
            SetTask = "Error! No information about the time settings."
            WScript.Quit
        Case "1"
            sLocalBias = "00" & cStr(Abs(iLocalBias))
        Case "2"
            sLocalBias = "0" & cStr(Abs(iLocalBias))
        Case Else
            sLocalBias = cStr(Abs(iLocalBias))
    End select
    ' Выбор знака часового пояса (+-)OOO
    If iLocalBias >= 0 then
        sOOO = "+" & sLocalBias
    Else
        sOOO = "-" & sLocalBias
    End if
    ' Задание времени запуска команды (через 3 минуты от текущего времени)
    If Len(cStr((Minute(Time) + 3))) = 1 then
        sMM = "0" & cStr(Minute(Time) + 3)
    Else
        sMM = cStr(Minute(Time) + 3)
    End if
    If Len(cStr(Hour(Time))) = 1 then
        sHH = "0" & cStr(Hour(Time))
    Else
        sHH = cStr(Hour(Time))
    End if
    ' Создание времени запуска задания в формате YYYYMMDDHHMMSS.MMMMMM(+-)OOO"
    sStartTime = "********" & sHH & sMM & "00.000000" & sOOO
    ' Подключение к WMI удаленного компьютера
    Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2")
    ' Создание объекта планировщика
    Set oJob = oWMIService.Get("Win32_ScheduledJob")
    ' Установка задания на выполнение команды
    errJobCreated = oJob.Create (sCommand, sStartTime, False , , , Interact, JobID)
    ' Проверка результата установки задания
    If errJobCreated = 0 then
        SetTask = "The job was successfully set on " & sComputer & " at " & sStartTime
    Else
        SetTask = "Error! The job has not been set."
    End if
End Function

Вычисление подсети по IP-адресу и маске

Назначение сценария - вычислить подсеть по IP-адресу и маске.

Использование скрипта: запусить скрипт. В результате работы сценария, на экране появится сообщение со следующими параметрами: имя сетевого интерфейса, IP-адрес, маска сети и адрес подсети.

Примечание. Также можно передать нужные значения IP-адреса и маски сети для вычисления подсети в качестве аргументов к скрипту.
' === Script Information Header ===
' Script Name: GetSubnet.vbs
' Date:        24.02.10
' Author:      Виталий Бочкарев
' Description: Скрипт вычисления подсети по IP-адресу и маске

' === Initialization Block ===
Dim sResult

' === Script Main Logic ===
' Получение аргументов командной строки
Set Arguments = Wscript.Arguments
' Проверка наличия аргументов командной строки
If Wscript.Arguments.Count=2 Then
    ' Высисление маски подсети по указанным аргументам
    sResult = sResult & GetSubnet(Arguments(0), Arguments(1))
Else
    ' Получение настроек сетевых карт
    Set oLocator = CreateObject("WbemScripting.SWbemLocator")
    Set oWbemServices = oLocator.ConnectServer( , "root\cimv2")
    Set oAdapters = oWbemServices.ExecQuery("Select * FROM Win32_NetworkAdapterConfiguration")
    ' Вычисление маски подсети для каждой сетевой карты
    For Each oAdapter in oAdapters
        If Not IsNull(oAdapter.IPAddress) Then
            sResult = sResult & "Network adapter: " & vbCrLf _
              & vbTab & oAdapter.Description & vbCrLf
            sResult = sResult & GetSubnet(oAdapter.IPAddress(0), oAdapter.IPSubnet(0)) & vbCrLf
        End If
    Next
    sResult = sResult & "You can also specify an address and Subnet mask as parameters to " _
      & "this script. For example:" & vbCrLf _
      & vbTab & "GetSubnet.vbs 192.168.1.2 255.255.255.255"
End If
' Вывод результата на экран
WScript.Echo sResult

' === Functions and Procedures ===

' Функция вычисления подсети
Function GetSubnet(Address, Subnet)
    Dim sResult
    If Address = "0.0.0.0" Then
        sResult = sResult & "No network" & vbCrLf
    Else
        sResult = sResult & "IP address:  " & vbCrLf _
          & vbTab & Address & vbCrLf
        sResult = sResult & "Subnet mask: " & vbCrLf _
          & vbTab & Subnet & vbCrLf
        Dim AddressBytes(4)
        Dim SubnetMaskBytes(4)
        i = 0
        Period = 1
        While Period <> Len(address) + 2
            PrevPeriod = Period
            Period = InStr(Period + 1, Address, ".") + 1
            If Period = 1 Then Period = Len(Address) + 2
            AddressByte = Mid(Address, PrevPeriod, Period - PrevPeriod - 1)
            AddressBytes(i) = AddressByte
            i = i + 1
        Wend
        i = 0
        Period = 1
        While Period <> Len (Subnet) + 2
            PrevPeriod = Period
            Period = InStr(Period + 1, Subnet, "." ) + 1
            If Period = 1 Then Period = Len(Subnet) + 2
            SubnetMaskByte = Mid(Subnet, PrevPeriod, Period - PrevPeriod - 1)
            SubnetMaskBytes(i) = SubnetMaskByte
            i = i + 1
        Wend
        Subnet = ""
        For i = 0 to 3
            Subnet = Subnet & (AddressBytes(i) And SubnetMaskBytes(i)) & "."
        Next
        Subnet = Left(Subnet, len(Subnet) - 1)
        sResult = sResult & "Subnet: " & vbCrLf _
          & vbTab & Subnet & vbCrLf
    End If
    GetSubnet = sResult
End Function
Виталий Бочкарев

Внешние ссылки

Секция внешних ссылок, то есть ссылок на другие сайты, к которым данный ресурс не имеет никакого отношения. Данные ссылки размещены для удобства пользователей и не означают, что владелец сайта SysEngineering.ru одобряет содержание сайтов, приведенных ниже. Кроме этого, владелец сайта SysEngineering.ru не несет никакой ответственности за доступность этих ресурсов и за их контент.

zip.png Средства для создания скриптов

 

Вверх