- Копирование файла на рабочий стол пользователя
- Удаление сервиса
- Добавление учетной записи в группу администраторов компьютера
- Сжатие папки и отправка архива по почте
- Удаление устаревших временных файлов
- Получение пользователей, групп и компьютеров из 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
