Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
2 / 2 / 2
Регистрация: 12.05.2016
Сообщений: 67

Мониторинг папок средствами WMI/VBS

23.06.2017, 11:17. Показов 9201. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Перерыл интернет в поисках оптимального решения и нашел вот такой полезный макрос,
который мониторит папку на наличие файлов с определенным интервалом.
Данный пример работает с одним каталогом, как переделать данный скрипт, чтобы можно было мониторить
все подкаталоги каталога(ну или несколько каталогов одновременно).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!" & _ 
        strComputer & "\root\cimv2") 
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_") 
'CIM_DirectoryContainsFile' 
call objWMIService.ExecNotificationQueryAsync (objSink, "SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _ 
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ 
            & "TargetInstance.GroupComponent= " _ 
                & "'Win32_Directory.Name=""c:\\\\scripts""'") 
MsgBox "Остановить" 'если нажать ОК то больше небудет отслеживать, это для завершения этого скрипта 
 
Sub Sink_OnObjectReady(objEvent, objAsyncContext) 
    MsgBox objEvent.TargetInstance.PartComponent 
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.06.2017, 11:17
Ответы с готовыми решениями:

Сканирование портов vbs (WMI NetDiagnostics)
В Windows XP все работает, а в Windows 7 нет. Ниже часть кода: Dim wmiQuery wmiQuery = "Select * from netDiagnostics" Set...

VBS Отправка e-mail через SMTP-сервер - VBScript/JScript/WSH/WMI/HTA
Помогите, при запуске скрипта возникает ошибка Option Explicit 'Содание объекта CDO Dim objmes Set...

Удаление программы средствами WMI
День добрый подскажите смогу ли я через WMI удалить программу установленную не через msi пакет и еще такой вопрос Программа менят...

6
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
23.06.2017, 12:00
T4gr0id, Это костыль.
Я бы на вашем месте посмотрел в сторону FileSystemWatcher. Описание на MSDN
На powershell реализация совсем плевая.

Используйте FileSystemWatcher для отслеживания изменений в заданном каталоге. Можно отслеживать изменения в файлах и вложенных каталогах заданного каталога. Можно создать компонент, который будет следить за файлами на локальном компьютере, на сетевых дисках или на удаленном компьютере.
0
2 / 2 / 2
Регистрация: 12.05.2016
Сообщений: 67
23.06.2017, 13:27  [ТС]
Спасибо за наводку. А есть какие-либо примеры скриптов?
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
23.06.2017, 14:15
T4gr0id,
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
$DIR="D:\DBFS"
 
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path=$dir
$watcher.IncludeSubdirectories=$false
$watcher.EnableRaisingEvents=$true
 
$changed=Register-ObjectEvent $watcher "Created" -Action {
 
        copy-item $eventArgs.fullpath "D:\Dump"
    
}
Вот простейшая реализация.
Все, что попадает\создается в директорию "D:\DBFS" копируется в директорию "D:\Dump"
0
2 / 2 / 2
Регистрация: 12.05.2016
Сообщений: 67
23.06.2017, 15:43  [ТС]
Спасибо за пример! Прошу пока тему не закрывать, может еще кто напишет.....
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
23.06.2017, 20:17
Цитата Сообщение от T4gr0id Посмотреть сообщение
... нашел вот такой полезный макрос...
Это один из вариантов использования механизма подписки на событие. В найденном вами примере используется асинхронный режим. На этом форуме можно найти примеры использования синхронного режима. Скажем, в этой теме (применительно к задаче наблюдения за каталогом):
VBS Открытие файла в WordPad - VBScript/JScript.
Сам по себе механизм подписки на событие не поддерживает рекурсивного просмотра, поэтому для наблюдения за группой каталогов связка VBS + WMI малоэффективна, хотя при определённых ограничениях вполне реализуема.
Если требуется именно постоянное наблюдение за большой группой каталогов или за их "деревом" произвольного состава и глубины вложенности, то вам вполне справедливо указали в сторону PowerShell.
Однако фраза
Цитата Сообщение от T4gr0id Посмотреть сообщение
... мониторит папку на наличие файлов...
вызывает вопрос: а нужен ли здесь вообще механизм подписки? Может достаточно периодической проверки на наличие в папке (группе папок) каких-либо файлов по количественному признаку (при необходимости можно задать шаблон имени и/или расширения)?
1
2 / 2 / 2
Регистрация: 12.05.2016
Сообщений: 67
17.07.2017, 22:12  [ТС]
Я решил вопрос запуска/остановки ps1-скрипта таким способом:
Visual Basic
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
 <html>
 
<head>
  <title>HTA Test</title>
  <HTA:APPLICATION 
    APPLICATIONNAME="HTA Test"
    SCROLL="yes"
    SINGLEINSTANCE="yes"
    WINDOWSTATE="maximize"
  >
</head>
<script language="VBScript">
window.resizeto 200,200 
sub monitoring
sCmd = "%SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -NoExit C:\test\test.ps1;Get-process -id $PID|where {$_.mainWindowTitle}|format-table id -autosize|out-file c:\test\out.txt"
Set oShell = CreateObject("Wscript.Shell")
iResult = oShell.Run(sCmd, 1, true)
end sub
sub end_monitor
set ObjShell = createobject("wscript.shell")
ObjShell.run ("powershell -command & {0.1 |% {stop-process (Get-content c:\test\out.txt -totalcount 4)[-1]}}")
end sub
</script>
 
<body>
 
<input type="button" value="Запуск" name="run_button"  onClick="monitoring">
<input type="button" value="Стоп" name="run_button2"  onClick="end_monitor">
</body>
 
</html>
Нарисовал две кнопки "Запуск" и "Стоп" в HTA
Кнопка "Запуск":
sCmd = "%SystemRoot%\System32\WindowsPowerShell \v1.0\PowerShell.exe -NoExit C:\test\test.ps1;Get-process -id $PID|where {$_.mainWindowTitle}|format-table id -autosize|out-file c:\test\out.txt"
Запускается скрипт powershell + в текстовый файлик записывается ID запущенного процесса(чтобы потом его закрыть).
Кнопка "Стоп":
ObjShell.run ("powershell -command & {0.1 |% {stop-process (Get-content c:\test\out.txt -totalcount 4)[-1]}}")
Считывает ID процесса из текстового файла и закрывает его.

К сожалению других вариантов не придумал/нашел....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2017, 22:12
Помогаю со студенческими работами здесь

Как узнать средствами WSH или WMI, какие файлы открыты
Как средствами WSH или WMI узнать, открыт файл или нет?

Список папок в подпапках, переделать код VBS в JS
Есть скрипт на VBS который выводит список всех папок и подпапок в указанной папке 'Создаём и запускаем диалог выбора корневой папки ...

Парсинг веб страницы средствами VBS
Предположим, у меня есть страница какого-либо товара с мосигры (прим. - http://www.perm.mosigra.ru/Face/Show/imadjinarium/ ) , с помощью...

Создание RDP ярлыка на рабочем средствами VBS
Всем привет! Возможно ли как нибудь по средствам vbs - скрипта создать ярлык rdp подключения на рабочем столе? Если можно, то...

Как на vbs скопировать файл из папки в папку, с русскими именами папок?
Здравствуйте. Нужно скопировать файл на vbs из папки Загрузки на диск C:\ Выдаёт ошибку &quot;Неправильный путь.&quot;Как кирилицу в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru