Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Программирование "удобняшек" на VBScript

Модерирует : ShIvADeSt

ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

   

fantomdemon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с VBS-скриптом.
Нужно на флешке постоянно отслеживать определенный файл, например demon.dem, и если файла нет или флешка отключена - запустить определенную программу.

Всего записей: 4 | Зарегистр. 22-08-2008 | Отправлено: 12:35 16-06-2009
Integer27h



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите какие сведения я могу получить с помощью vbs (logon script для терминальной сессии) о операционной системе клиента который логинится на терминальный сервер?
На данный момент я могу определить имя его компьютера: WshShell.ExpandEnvironmentStrings("%clientname%")  
 
Что ещё можно узнать? Интересует его ip, днс имя, версия системы, в общем любые сведения.

Всего записей: 201 | Зарегистр. 11-09-2006 | Отправлено: 08:26 17-06-2009 | Исправлено: Integer27h, 08:35 17-06-2009
mihmig

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fantomdemon
While True
 WScript.Sleep(60000) 'по 60 секунд ждем, может флешку вставят
 While gFSO.FileExists("g:\demon.dem")  
  WScript.Sleep(5000) 'Контролируем флешку с файлом каждые 5 сек
 Wend
 'Таки вынули флешку...
 WScript.Popup("Вы вынули флешку! Вставтье ее обратно или через 5 секунд компьютер взорвется!",60)
Wend
   
 

Всего записей: 276 | Зарегистр. 25-09-2007 | Отправлено: 18:45 18-06-2009
fantomdemon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ты привязал букву к абсолютному пути (G:\demon.dem), а буква съемного диска меняется в зависимости от количества съемных дисков. Поэтому данный вариант не подходит. Большое спасибо за помошь.

Всего записей: 4 | Зарегистр. 22-08-2008 | Отправлено: 21:22 18-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fantomdemon
 
Может так?
Код:
set objwmi = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")  
set disks = objwmi.execnotificationquery("select * from __instanceoperationevent " _  
& "within 1 where targetinstance isa 'win32_logicaldisk' and targetinstance.drivetype = 2")
set fso = createobject("scripting.filesystemobject")
set wshshell = createobject("wscript.shell")  
do while true  
   set remdisk = disks.nextevent
   fileex = remdisk.targetinstance.deviceid & "\" & "demon.dem"
   if not fso.fileexists(fileex) then wshshell.run "app.exe"
loop
 

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 05:43 19-06-2009
fantomdemon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for Rush
Спасибо за помощь, но почему-то не работает. Я решил это таким образом, но буду благодарен если ты вычистишь код от всего лишнего. Наверное я наворотил тут кучу ненужного хлама. Заранее благодарен.  
 
On Error Resume Next
 
Do while f=0
    WScript.Sleep 2000
     
    strComputer = "."
     
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)
     
    For Each objItem in colItems
        If objItem.DriveType = "2" And objItem.Description = "Съемный диск" Then
            Demon = objItem.Caption & "\demon.dem"
        End if
    Next
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    If fso.FileExists(Demon) Then
        MsgBox "Файл существует"
    Else
        MsgBox "Файл не существует"
    End If
Loop

Всего записей: 4 | Зарегистр. 22-08-2008 | Отправлено: 16:15 19-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fantomdemon
Можно и так.  
Странно, почему у тебя не работает мой скрипт. У меня нормально работает.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 18:33 19-06-2009
mihmig

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush

Цитата:
Странно, почему у тебя не работает мой скрипт

Я вообще не сторонник использования WMI-как то не всегда он работает...
fantomdemon

Цитата:
Ты привязал букву к абсолютному пути

если это конкретная флешка, то можно в диспетчере дисков присвоить ей букву Z - и тогда другие флешки не перебьют ее.

Всего записей: 276 | Зарегистр. 25-09-2007 | Отправлено: 21:35 19-06-2009
fantomdemon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush
 
 
Как сделать проверку: если данная программа уже запущена , то не запускать ее ?
 
Добавлено:
mihmig
 
Присвоить букву можно, но скрипт предназначается выполнять на разных компьютерах.

Всего записей: 4 | Зарегистр. 22-08-2008 | Отправлено: 22:26 19-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fantomdemon

Цитата:
Как сделать проверку: если данная программа уже запущена , то не запускать ее ?  

1) wmi

Код:
apppath = "маршрут файла"
set fso = createobject("scripting.filesystemobject")
set wshshell = createobject("wscript.shell")
set srv = getobject("winmgmts:\\.\root\cimv2")
set runapp = srv.execquery("select * from win32_process where name = '" _
             & fso.getfilename(apppath) & "'")
if runapp.count = 0 then wshshell.run apppath
 

2) wsh + cmd

Код:
apppath = "маршрут файла"
set fso = createobject("scripting.filesystemobject")
set wshshell = createobject("wscript.shell")
wshshell.run "cmd /C tasklist | find /i """ & fso.getfilename(apppath) _
             & """ || start """" """ & apppath & """"
 
 

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 05:52 20-06-2009
mihmig

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но скрипт предназначается выполнять на разных компьютерах

тогда проверять все диски от A до Z
 

Цитата:
Как сделать проверку: если данная программа уже запущена

разбирать вывод команды tasklist

Всего записей: 276 | Зарегистр. 25-09-2007 | Отправлено: 09:37 20-06-2009
priccolist

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите пожалуйста. Есть программа которая работает с базой MySQL. В программе создается заявка на работу, все данные в MySQL, нужно что бы при создании заявки если поле "А" пустое то оно принимает значение "Б". Иначе говоря: в таблице появляется строка, в ней, если в столбце "А" значение Null, то он принимает значения из другого столбца "Б". Мне посоветовали на VBS  написать, но я в этом ничего не смыслю 8(

Всего записей: 51 | Зарегистр. 28-11-2008 | Отправлено: 16:14 24-06-2009
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли на VBScript переименовать все файлы и папки начиная с текущей по след. алгоритму? Берем имя файла/папки находим в нем все строки А1 и заменяем на строки Б1. Затем аналогично А2 на Б2 и так до конца списка, затем собственно переименовываем файл/папку на то что получилось.

Всего записей: 10491 | Зарегистр. 05-02-2003 | Отправлено: 22:02 24-06-2009 | Исправлено: V0lt, 22:02 24-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt
Не совсем ясно, что надо. Хотелось бы побольше конкретики.
Откуда список брать? Из файла или как-то по-другому?
Вообщем, сделал пока так, если не то - сделаю иначе:

Код:
 
' объявляем массивы замен, в данном случае из двух элементов
dim a(1)
dim b(1)
' папка в которой надо менять
dirpath = "***"
' заполняем массивы замен, можно использовать регулярные выражения
' например, таким образом можно добавить 0 впереди цифры.
a(0) = "([1-9]+)"  
b(0) = "0$1"
' а так убрать конечные пробелы
a(1) = " +$"
b(1) = ""
 
set fso = createobject("scripting.filesystemobject")
set rexp = createobject("vbscript.regexp")  
subdirs fso.getfolder(dirpath)
 
sub subdirs(dir)
   for each subdir in dir.subfolders
      subdirs(subdir)
   next
   enumfiles(dir)
   newname = renfilename(dir.name)
   if not fso.fileexists(fso.getparentfoldername(dir) & "\" & newname) _
      and newname <> dir.name then dir.name = newname
end sub
 
sub enumfiles(dir)
   for each file in dir.files
      newname = renfilename(fso.getbasename(file))
      newfilename = newname & "." & fso.getextensionname(file)
      if not fso.fileexists(fso.getparentfoldername(file) & "\" & newfilename) _
         and newname <> fso.getbasename(file) then file.name = newfilename
   next
end sub
 
function renfilename(filename)
   for i = 0 to ubound(a)
      rexp.pattern = a(i)
      rexp.ignorecase = true
      rexp.global = true
      filename = rexp.replace(filename, b(i))
   next
   renfilename = filename
end function
 

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 15:12 25-06-2009
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush

Цитата:
Откуда список брать? Из файла или как-то по-другому?

пойдет как сейчас сделано (внутри скрипта)
 

Цитата:
Вообщем, сделал пока так, если не то - сделаю иначе

Спасибо! супер!
 
Еще пожелания:
1. рабочая папка там, где лежит скрипт
(если есть проблемы с пунктом 1, то можно не трогать файлы лежащие непосредственно в рабочей папке)
2. если файл с новым именем уже существует, то удалить файл со старым именем.
 
...пока хватит с остальном может сам разберусь

Всего записей: 10491 | Зарегистр. 05-02-2003 | Отправлено: 16:15 25-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt

Цитата:
Еще пожелания:  


Код:
 
' объявляем массивы замен, в данном случае из двух элементов
dim a(1)
dim b(1)
' заполняем массивы замен, можно использовать регулярные выражения
' например, таким образом можно добавить 0 впереди цифры.
a(0) = "([1-9]+)"  
b(0) = "0$1"
' а так убрать конечные пробелы
a(1) = " +$"
b(1) = ""
 
set fso = createobject("scripting.filesystemobject")
set rexp = createobject("vbscript.regexp")
dirpath = fso.getparentfoldername(wscript.scriptfullname)  
subdirs fso.getfolder(dirpath)
 
sub subdirs(dir)
   for each subdir in dir.subfolders
      subdirs(subdir)
   next
   enumfiles(dir)
   newname = renfilename(dir.name)
   if not fso.folderexists(fso.getparentfoldername(dir) & "\" & newname) _
      and newname <> dir.name then dir.name = newname
end sub
 
sub enumfiles(dir)
   for each file in dir.files
      newname = renfilename(fso.getbasename(file))
      newfilename = newname & "." & fso.getextensionname(file)
      if fso.fileexists(fso.getparentfoldername(file) & "\" & newfilename) then
         fso.deletefile file, true      
      elseif newname <> fso.getbasename(file) and file <> wscript.scriptfullname then  
         file.name = newfilename
      end if
   next
end sub
 
function renfilename(filename)
   for i = 0 to ubound(a)
      rexp.pattern = a(i)
      rexp.ignorecase = true
      rexp.global = true
      filename = rexp.replace(filename, b(i))
   next
   renfilename = filename
end function
 
 
В работе не проверял. Но, думаю, работать будет нормально...

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 16:48 25-06-2009 | Исправлено: Rush, 16:55 25-06-2009
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush

Цитата:
В работе не проверял. Но, думаю, работать будет нормально...

скрип что-то не так делает, хорошо хоть экспериментировал на копии, по-позже разберусь...

Всего записей: 10491 | Зарегистр. 05-02-2003 | Отправлено: 17:24 25-06-2009 | Исправлено: V0lt, 17:24 25-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V0lt

Цитата:
скрип что-то не так делает, хорошо хоть экспериментировал на копии, по-позже разберусь...

Еще бы экперименты проводить на рабочей папке...
Сейчас проверил - вроде, никаких проблем не заметил. Все делает скрипт по твоим пожеланиям...
Может ты имел что-то другое в виду?
 
Добавлено:
а понял. Попробуй так:

Код:
 
' объявляем массивы замен, в данном случае из двух элементов
dim a(1)
dim b(1)
' заполняем массивы замен, можно использовать регулярные выражения
' например, таким образом можно добавить 0 впереди цифры.
a(0) = "([1-9]+)"  
b(0) = "0$1"
' а так убрать конечные пробелы
a(1) = " +$"
b(1) = ""
 
set fso = createobject("scripting.filesystemobject")
set rexp = createobject("vbscript.regexp")
dirpath = fso.getparentfoldername(wscript.scriptfullname)  
subdirs fso.getfolder(dirpath)
 
sub subdirs(dir)
   for each subdir in dir.subfolders
      subdirs(subdir)
   next
   enumfiles(dir)
   newname = renfilename(dir.name)
   if not fso.fileexists(fso.getparentfoldername(dir) & "\" & newname) _
      and newname <> dir.name then dir.name = newname
end sub
 
sub enumfiles(dir)
   for each file in dir.files
      newname = renfilename(fso.getbasename(file))
      newfilename = newname & "." & fso.getextensionname(file)
      if newname <> fso.getbasename(file) then
         if fso.fileexists(fso.getparentfoldername(file) & "\" & newfilename) then
            fso.deletefile file      
         elseif file <> wscript.scriptfullname then  
            file.name = newfilename
         end if
      end if
   next
end sub
 
function renfilename(filename)
   for i = 0 to ubound(a)
      rexp.pattern = a(i)
      rexp.ignorecase = true
      rexp.global = true
      filename = rexp.replace(filename, b(i))
   next
   renfilename = filename
end function
 

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 17:42 25-06-2009 | Исправлено: Rush, 17:56 25-06-2009
Postscriptum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Клиенты запускают приложение с сервера, используя стандартый терминал Windows(mstsc.exe). Иногда терминальные сессии некорректно закрываюся, компы виснут и т.д. и т.п. Как на VBScript узнать, повисло это приложение или нет? Для того, чтоб узнать, сколько юзеров и кто работают с этим приложениям использую такой код:

Код:
strComp="."
strnamespace="Root\CIMV2"
set objService=GetObject("WinMgmts:\\" & strComp & "\" & strNamespace)
set colprocess=objService.ExecQuery _
               ("select * from win32_Process where Name='program.exe'")
kol=0
for each objProcess in colProcess
 intRes=objProcess.GetOwner(strUserName,strUserDomain)
 if IntRes=0 then
  Response=MsgBox("Владельцем процесса " & objProcess.Name & " является " & strUserDomain & "\" & strUserName,0,"Информация")
  kol=kol+1
 else
  Response=MsgBox("Ошибка при определении владельца процесса " & objProcess.Name,0,"Ошибка")
 end if
next

Если зайти на сервере в диспетчер служб терминалов, там в процессах, если пользователь действительно работает с этим приложением, в колонке "Сеанс" стоит RDP-TCP#0, если какой-то косяк, то в этой колонке пусто. Как VBScript-ом узнать содержимое этой колонки?
И есть где информация по полям, которые существуют у объекта  objProcess?

Всего записей: 464 | Зарегистр. 31-01-2004 | Отправлено: 08:52 02-07-2009
niichavo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Postscriptum

Цитата:
И есть где информация по полям, которые существуют у объекта  objProcess?

Для просмотра св-ств объектов, поиск нужных классов и т.п. есть для WMI такая штука как WMI Tools

Всего записей: 836 | Зарегистр. 14-09-2005 | Отправлено: 10:27 02-07-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Программирование "удобняшек" на VBScript
ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru