- Копирование файла на рабочий стол пользователя
- Удаление сервиса
- Добавление учетной записи в группу администраторов компьютера
- Сжатие папки и отправка архива по почте
- Удаление устаревших временных файлов
- Получение пользователей, групп и компьютеров из Active Directory
- Замена слова во всех файлах директории
- Выполнение команды на удаленном компьютере
- Вычисление подсети по 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
Назначение сценария - добавить учетную запись в группу локальных администраторов компьютера.
Использование сценария: скрипт нужно запускать из командной строки, передевая ему в качестве параметра учетную запись, которую нужно внести в администраторы.
' === 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.
Использование сценария: в теле скрипта указать контейнеры, где хранятся объекты учетных записей пользователей, компьютеров и групп (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). После завершения работы команды задача уничтожается.
' === 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-адрес, маска сети и адрес подсети.
' === 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