Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование "удобняшек" на VBScript

Автор: ViSiToR
Дата сообщения: 08.04.2008 12:06
loplop777

Цитата:
запрет запуска игры косынка

Единственное что приходит в голову, это закрытие процесса при его появлении, не красиво, но другие методы мне не известны (хотя наверняка они есть):


Код: Proc_Name = "sol.exe"

Set oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Set oMonitoredProc = oWMIService.ExecNotificationQuery("select * from __instancecreationevent " _
    & " within 1 where TargetInstance isa 'Win32_Process'")

Do While True
    Set oLatestProcess = oMonitoredProc.NextEvent
    
    If oLatestProcess.TargetInstance.Name = Proc_Name Then oLatestProcess.TargetInstance.Terminate
Loop
Автор: loplop777
Дата сообщения: 09.04.2008 08:28
Большое спасибо ViSiToR!во время входа в систему прописывать в файл:время входа, дата входа,веремя и дата выхода!Вот именно про время и дату я ниче не знаю а мне надо сделать отет по этому!если знаешь помоги!Сразу спасибо!
Автор: Sun Ray
Дата сообщения: 14.04.2008 14:56
VBS: download file


Подскажите как можно с сана скачать файлик? Там предварительно нужно региться, простые довлоадменеджеры тоже не справляются, решил это дело сделать скриптом, вроде этого...

Код: strFileURL = "http://cds.sun.com/file.iso/"
strHDLocation = "C:\file.iso"
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()
If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary
objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0 'Set the stream position to the start
Set objFSO = Createobject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing
objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if
Set objXMLHTTP = Nothing
Автор: igor_andreev
Дата сообщения: 14.04.2008 16:53
Sun Ray

Цитата:
решил это дело сделать скриптом

vbs-ом качать большие бинарные файлы - не самая лучшая идея

Цитата:
простые довлоадменеджеры тоже не справляются

Консольные wget или curl тебе подойдут? Я интереса ради зарегился на sun.com, получил длиннющую ссылку на скачивание исошника и запустил батник из двух строчек

Код:
REM сохранил печеньки в файл wget-cookie.txt
wget -O - --no-check-certificate --keep-session-cookies --save-cookies wget-cookie.txt --post-data "IDToken1=USERNAME&IDToken2=PASSWORD" "https://portal.sun.com/amserver/UI/Login?org=self_registered_users&goto=/portal/dt&gotoOnFail=/portal/dt?error=true"

REM и отдал ссылку wget-у
wget -O sol-10.zip -с --load-cookies wget-cookie.txt "http://192.18.108.228/ECom/тут_длиннющая ссылка/sol-10-u4-ga-sparc-v1-iso.zip"
Автор: Vby
Дата сообщения: 22.04.2008 17:59
Подскажите как на VBS результат выполнения внешней программы занести в переменную?
например,
....бла бла бла
.....
......
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("ping.exe 10.10.10.10")
Wscript.Echo вот сюда результат выполнения пинга

Надеюсь понятно объяснил
Автор: igor_andreev
Дата сообщения: 22.04.2008 18:14
Vby



Код:
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("ping -n 1 192.168.1.1")
Do While oExec.Status = Running
WScript.Sleep 100
Loop
MsgBox oExec.ExitCode
Автор: Integer27h
Дата сообщения: 22.04.2008 18:48
Подскажите пример кода:

1. Если пользователь AD является членом некой группы, то не выполнять действие.
2. Если компьютер AD является членом некой группы, то не выполнять действие.
3. Добавление в локальную группу администраторы групп из AD
Автор: Vby
Дата сообщения: 23.04.2008 09:33
igor_andreev
Это немного не то, что нужно, в твоем примере возвращаеется код завершения программы, а нужен результат выполнения, для пинга что-то типа того:
Обмен пакетами с server [10.20.100.100] по 32 байт:

Ответ от 10.20.100.100: число байт=32 время<1мс TTL=128
Ответ от 10.20.100.100: число байт=32 время<1мс TTL=128
Ответ от 10.20.100.100: число байт=32 время<1мс TTL=128
Ответ от 10.20.100.100: число байт=32 время<1мс TTL=128

Статистика Ping для 10.20.100.100:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
Автор: efrik
Дата сообщения: 23.04.2008 10:51
Set StdOut = objShell.Exec("ping.exe computer ").Stdout
Автор: igor_andreev
Дата сообщения: 23.04.2008 10:56
Vby

Цитата:
Это немного не то, что нужно, в твоем примере возвращаеется код завершения программы,

Ну да, 0 - хост доступен, 1 - хост недоступен. Для этого обычно пинг и запускают

Тогда или в файл записывай oShell.Exec("cmd /c ping -n 1 192.168.1.1 >C:\result.txt")
или юзай StdIn\StdOut. Запускать cscript file.vbs, как-то так:

Код:
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("ping -n 1 192.168.1.1")
Do While oExec.Status = Running
WScript.Sleep 50
Loop
oExecText = oExec.StdOut.ReadAll
WScript.StdOut.Write oExecText
Автор: megamozg13
Дата сообщения: 23.04.2008 13:54
Vby
Друже, именно пинговать надо?
могу дать готовый скрипт:
а)пингует скока хошь адресов
б)дает возможность игнорирования нескольких "неответов", наслучай если по пути на удаленный сервер косячная связь
в)посылает виндошное сообщение админу (net send) и(или) активируется сам окошком с сообщением
Автор: vensen
Дата сообщения: 23.04.2008 17:00
Доброго времени суток!

Задался таким вот вопросом...
как посредством VBSа подключать сетевые принтера, в зависимости от членства
пользователя в какой либо группе AD??

Т.е пользователям из группы "manager" подключать принтер \\comp1\HP ,
а пользователям группы "buxUsers" подлючать принтер \\comp2\canon
Автор: Integer27h
Дата сообщения: 24.04.2008 06:19
vensen
Есть скрипт подключат сетевые диски в зависимости от группы безопасности в AD.
Вместо сетевых дисков укажи принтера.

Код:
Option Explicit

Dim WSHShell, WSHNetwork, user, domain, adspath, adsobj, prop, computer

Set WSHNetwork = WScript.CreateObject( "WScript.Network")
Set wshShell = WScript.CreateObject("WScript.Shell")

Do While WSHNetwork.username = ""
WScript.Sleep 250
Loop

user = wshNetwork.username
domain = wshNetwork.userdomain
computer= WSHNetwork.ComputerName
'Wscript.echo "Logging on " & ucase(domain) & "\" & user & "..."

' используя ADSI получаем список групп, в которые входит пользователь
adspath = "WinNT://" & domain & "/" & computer
Set adsobj = GetObject(adspath)

' Подключаем всем пользователям общие сетевые диски
' диск X - обменник (автоматическое удаление содержимого в ночь на первое число каждого месяца)
' диск Z - общие документы (только чтение)
'
'WSHNetwork.MapNetWorkDrive "X:", "\\server\temp$"
'WSHNetwork.MapNetWorkDrive "Z:", "\\server\all$"

'
'Подключаем сетевые диски в зависимости от членства пользователя в группе безопасности
'
For each prop in adsobj.groups
select case prop.name
case "admin_comp"
WSHNetwork.MapNetWorkDrive "T:", "\\srv-admin\c$"
WSHNetwork.MapNetWorkDrive "I:", "\\server\install$"
'MSgBox "Общий ресурс для aдминистраторов диск T:\"
'MSgBox "Инсталляшки диск I:\"
case "ПЭО"
WSHNetwork.MapNetWorkDrive "T:", "\\server\econom$"
WSHNetwork.MapNetWorkDrive "P:", "\\server\econom-buh$"
MsgBox "Общий ресурс для экономистов диск T:\"
MsgBox "Совместный ресурс для бухгалтеров и экономистов диск P:\"
Case "Бухгалтерия"
WSHNetwork.MapNetWorkDrive "T:", "\\server\buh$"
WSHNetwork.MapNetWorkDrive "P:", "\\server\econom-buh$"
MsgBox "Общий ресурс для бухгалтерии диск T:\"
MsgBox "Совместный ресурс для бухгалтеров и экономистов диск P:\"
case "Финансовый отдел"
WSHNetwork.MapNetWorkDrive "T:", "\\server\finans$"
MsgBox "Общий ресурс для финансового отдела диск T:\"
Case "Media"
WSHNetwork.MapNetWorkDrive "M:", "\\server\media_DFS$"
'MSgBox "Медия диск M:\"
case "Юристы"
WSHNetwork.MapNetWorkDrive "T:", "\\server\uro$"
MSgBox "Общий ресурс для юридического отдела диск T:\"
case "Отдел кадров"
WSHNetwork.MapNetWorkDrive "T:", "\\server\ok$"
MSgBox "Общий ресурс для отдела кадров диск T:\"
case "Руководство"
WSHNetwork.MapNetWorkDrive "T:", "\\server\general$"
MSgBox "Общий ресурс для руководства диск T:\"
end select
Next
Автор: vensen
Дата сообщения: 24.04.2008 16:11
to Integer27h
Пасибо за пример, почти заработало но до конца не что-то срослось...

Нашел вроде немного "полегче":
'*** Start of Script ***

Dim FSObj 'File System Info
Dim GroupObj 'Group Info
Dim UserObj 'User Info
Dim WshNetwork 'Network Info
Dim WshShell 'Shell Object
Dim UserDomain 'User Logon Domain

'*** Inital Environment Setup

Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
UserDomain = WshNetwork.UserDomain
'Set FSObj = CreateObject("Scripting.FileSystemObject")
Set UserObj = GetObject("WinNT://" & UserDomain & "/" & WshNetwork.UserName)

'*** Group Comparisons for Drive Mapping

For Each GroupObj in UserObj.Groups

If GroupObj.Name = "manager" Then
WshNetwork.AddWindowsPrinterConnection "\\comp1\HP"
End If

If GroupObj.Name = "buxUsers" Then
WshNetwork.AddWindowsPrinterConnection "\\comp2\canon"
End If

Next

мой, уже подправленный скрипт.
Автор: mixpix
Дата сообщения: 24.04.2008 21:36
Доброго времени суток!

Есть несколько взаимосвязаных вопросов...

1. в корпоративной сети понадобилось обнулить подписи всех пользывателей в Outlook.нашел скрипт :

On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
strName = objUser.FullName
strTitle = "Title"
strCompany = "Company Name "
strAddress = "Address "
strCity = "City"
strDirectTel = "Tel: +"
strDirectCell="Cell: +"
strDirectFax = "Fax: +"
strPhone = "0000000"
strFax = "0000000"
strWeb= "www.web.com"
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
objSelection.ParagraphFormat.Alignment = wdAlignParagraphCenter
objSelection.Font.Name = "Ariel"
objSelection.Font.Size = "11"
objSelection.Font.Color = vbBlack
objSelection.Font.Bold = True
objSelection.TypeText strName
objSelection.TypeText CHR(11)
objSelection.Font.Bold = False
objSelection.TypeText strTitle
objSelection.TypeText CHR(11)
objSelection.TypeText strCompany
objSelection.TypeText CHR(11)
objSelection.TypeText CHR(11)
objSelection.TypeText strDirectTel & strPhone
objSelection.TypeText CHR(11)
objSelection.TypeText strDirectCell
objSelection.TypeText CHR(11)
objSelection.TypeText strDirectFax & strFax
objSelection.TypeText CHR(11)
objSelection.TypeText CHR(11)
objSelection.TypeText strAddress
objSelection.TypeText CHR(11)
objSelection.TypeText strCity
objSelection.TypeText CHR(11)
objSelection.Hyperlinks.Add objSelection.range, "http://" & strWeb, , ,strWeb
Set objSelection = objDoc.Range()
objSignatureEntries.Add "AD Signature", objSelection
objSignatureObject.NewMessageSignature = "AD Signature"
objSignatureObject.ReplyMessageSignature = "AD Signature"
objDoc.Saved = True
objWord.Quit

вроде бы все хорошо. но вдруг обнаружил что в Outlook 2007 если профиль открыт то
подпись меняется без проблем. если профиль закрыт (вернее если есть несколько профилей), подымается окно выбора профиля. после выбора также все успешно проходит. НО! в Outlook 2003 непроисходит ничего.
покапавши таки нашел созданую новую подпись в "C:\Documents and Settings\User\Application Data\Microsoft\Signatures". думаю если бы я мог выцепить имя профиля то можно было бы просто заменять старую подпись на новую прописывая вместо "AD Signature"- вопрос как узнать имя профиля? и вдогонку, как быть с несколькими профилями прописаными под одним юзером? нужно как то поднять окно для выбора нужного профиля....

2. для той же, подписи в AD по каждому пользывателю должны быть прописаны данные такие как номер сотого и рабочего телефона. как скинуть в excel, прописать и закинуть обратно не испортив то что уже прописано (например пароли).
заранее спасибо и извеняюсь если объяснил что надо, не самым грамотным языком...

Добавлено:
и еще пару вопросов интресующих меня очень давно...
1. каким образом средствами VBS можно узнать permissions файла/папки? и прописать это скажем в excel( естествено вместе с подпапками/файлами).
2. как грамотно с VBS поменять на всех компах имя и пароль локального админа?
в гугле такого валом но почему-то неработает...
Автор: XXXXL
Дата сообщения: 21.05.2008 12:49
Здравствуйте!
Парни подскажите у приятеля при запуски скрипта вылетает "Отсутствует исполняющее ядро для расширения имени файла vbs"
С чем это связно и как это лечится?
Спасибо
Автор: mozers
Дата сообщения: 21.05.2008 21:59
XXXXL
Надо установить WSH.
Автор: ViSiToR
Дата сообщения: 21.05.2008 22:14
XXXXL 13:49 21-05-2008
Цитата:
С чем это связно и как это лечится?


Можно попробовать этот рецепт:


Цитата:
1. Запустить редактор реестра (Пуск -> Выполнить -> regedit)
2. В редакторе реестра зайти в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings
3. Создать строковый параметр "Enabled", если он не создан.
4. Присвоить ему значение 1.

Если вместо ожидаемого действия открывается блокнот, или открывается диалог для выбора программы запуска этого типа файлов (*.vbs), то делаем следующее:

Нужно открыть "Свойства папки" (в любой папке Windows - Сервис - Свойства папки) - Перейти во вкладку "Типы файлов" - найти там расширение VBS, нажать на найденный пункт, и нажать кнопку "Изменить", затем два раза кликнуть на пункт "Открыть", и прописать во втором сверху поле эту строку:

C:\WINDOWS\System32\WScript.exe "%1" %*

При необходимости изменить путь к системной папке (C:\Windows\System32).
Автор: figaro1982
Дата сообщения: 23.05.2008 20:31
доброго времени суток!
может быть вы сможете подсказать как реализовать такую вещь:
Есть документ word - шаблон, в котором в некоторых местах стоят поля (они поставлены через меню ФОРМЫ в word).
Через скрипт задается запрос на ввод необходимых данных, после чего они вставляются в соответствующие поля документа.
много просмотрел материалов но так и не нашел нужного
Заранее благодарен.
Автор: mozers
Дата сообщения: 24.05.2008 10:40
figaro1982
Вот. Как раз в тему.
Автор: figaro1982
Дата сообщения: 24.05.2008 15:51
спасибо, я видел эту статью
так к сожалению обещанного примера нет...
Автор: mozers
Дата сообщения: 24.05.2008 21:44
figaro1982
Делаем так:
1. Открываем Word (одноременно создается новый документ).
2. Пишем в одном месте "Закладка 1", в другом - "Закладка 2".
3. Выделяем текст "Закладка 1" и через меню "Вставка - Закладка - Имя закладки" пишем "text1" - нажимаем кнопку "Добавить".
Выделяем текст "Закладка 2" и через меню "Вставка - Закладка - Имя закладки" пишем "text2" - нажимаем кнопку "Добавить".
4. Меню "Файл - Сохранить как" сохраняем как шаблон документа (test.dot).
5. Запускаем такой скрипт:
word_test.vbs :
Код: Set objWord = CreateObject("Word.Application")
With
objWord
.Documents.Add "c:\Documents and Settings\mozers\Application Data\Microsoft\Шаблоны\test.dot", false
.
Visible = true
.
ActiveDocument.Bookmarks("text1").Range.Text = "Первое значение"
.ActiveDocument.Bookmarks("text2").Range.Text = "Второе значение"
End With
Автор: Bugavka
Дата сообщения: 26.05.2008 12:24
Всем доброго времени суток.
Помогите решить такую задачку. Создается новый юзер, для него создаются папки, нужно VBSом сделать юзера Владельцем этих папок. Реально такое?
Автор: jONES1979
Дата сообщения: 26.05.2008 22:09
Bugavka реально. я сделал скрипт на основе примеров из MS AdsiSDK, в инете есть и более легковесные.
В этой теме http://forum.ru-board.com/topic.cgi?forum=8&topic=19088 наверное быстрее можно найти
Автор: Angel Hranite
Дата сообщения: 26.05.2008 22:32
доброй ночи. есть програмка при запуске которой выполняется VBScript. Скрипт должен создавать Папку рядом с запускаемым файлом и называть ее по названию приложения (без расширения) + имя компьютера. Как создавать папку я разобрался, а вот как узнать имя приложения и петь до него (чтобы папка была рядом)?
P.S.: путь может быть и сетевым (например, \\server\abv\ или C:\123\abv)

папку создаю так
Цитата:
set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
folder_name = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
path_name = WshShell.ExpandEnvironmentStrings("%HOMEPATH%")
if not fso.FolderExists (path_name & folder_name) then
fso.GetFolder(path_name).SubFolders.Add (folder_name)
end if
Автор: MrTom
Дата сообщения: 29.05.2008 13:01
всем привет!

Есть задача: работа с COM-объектом из скрипта. Да вот только свойства и методы у этого объекта названы кириллицей (что-то типа object.коллекция.количество)

Кто сталкивался с такой бедой, подскажите плиз: средствами vbs это возможно?
Сколько ни рылся по рунету - ничего найти не могу
Правда, в скриптах я не силен... так что не ругайтесь сильно, если фигню спросил
Автор: megamozg13
Дата сообщения: 05.06.2008 11:08
У меня существует плавающая ошибка в Win2003, сначала служба SRV падает с сообщением об "невозможно выгрузить пул из..." потом все отсальные по тиху и в итоге букс сервера (хотя проде как и синих экранов нет).
Сварганил, легкий скиптик ловящий отказ сетевых служб, может еще кому сгодится:

Цитата:

// auto_reboot.js
// инициализация
Shell=WScript.CreateObject("WScript.Shell");
fso=new ActiveXObject("Scripting.FileSystemObject");
comp=Shell.ExpandEnvironmentStrings("%COMPUTERNAME%");
wdir=Shell.ExpandEnvironmentStrings("%SystemRoot%");
key_file_net="\\\\"+comp+"\\ADMIN$\\-AUTO_REBOOT-";
key_file_loc=wdir+"\\-AUTO_REBOOT-";
// создание файла маячка
try { key_file=fso.CreateTextFile(key_file_loc,true) }
catch(e){WScript.Echo("Ошибка создания ключевого файла: "+key_file_loc);WScript.Quit(0);};    
key_file.WriteLine("-AUTO_REBOOT-"); key_file.Close();
// ждем, пока файл маячек доступен по сети
do { WScript.Sleep(5000); }
while(fso.FileExists(key_file_net));
// пропал доступ, ребут срочно
Rbt=Shell.Run(wdir+"\\System32\\shutdown.exe -r -f",1,true);
// cообщение о перезагрузке сервера
//Msg=Shell.Run(wdir+"\\System32\\net.exe send * Сервер принудительно перезапущен,
// немедленно обратитесь к администратору.",1,true);


Автор: Count S
Дата сообщения: 05.06.2008 15:24
Здравствуйте!
Ни у кого не завалялось скриптика который бы удалял заданные типы файлы на удаленном компьютере, в определенной папке?
Собственно требуется, удалять все файлы с расширениями .avi, .mp3, ,wmv и т.п. из рабочей папки пользователя в Documents and Settings.
Заранее спасибо.
Автор: Cyril Konst
Дата сообщения: 07.06.2008 08:42
Есть такой скриптик:

Код:
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colRetrievedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent where LogFile='System' and SourceName='Print' and EventCode = '2'")
For Each objEvent in colRetrievedEvents
Wscript.Echo objEvent.Message
Next
Автор: ViSiToR
Дата сообщения: 07.06.2008 10:01
Cyril Konst 09:42 07-06-2008
Цитата:
Можно ли в самом "Select..." задать ограничение на выбор только одной записи?

Вместо «*» прописать нужное имя события (или что там обрабатывается ) не пробовали?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.