Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Сетеывая папка работа с фильтрами по расширению с использованием WMI

Ответить
Настройки темы
VBS/WSH/JS - [решено] Сетеывая папка работа с фильтрами по расширению с использованием WMI

Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: andr_mozg
Дата: 26-01-2015
Добрый день.

Скрипт я написал, корявый но работает, но очень медленный, решил использовать WMI но возникла проблема.

Мой скрипт

Скрытый текст
PHP код: Выделить весь код

ServerShare "\\localhost\C$\windows\Temp"

'UserName = "domain\username"
'
Password "password"

Set NetworkObject CreateObject("WScript.Network")
Set FSO CreateObject("Scripting.FileSystemObject")

NetworkObject.MapNetworkDrive ""ServerShareFalse

Set Directory 
FSO.GetFolder(ServerShare)
For 
Each File In Directory.Files

       
If UCase(FSO.GetExtensionName(File.Name)) = "ZIP" or UCase(FSO.GetExtensionName(File.Name)) = "XML" Then
        WScript
.Echo File.Name
    end 
if    

Next

NetworkObject
.RemoveNetworkDrive ServerShareTrueFalse 





Все работает, но если я указываю реальную шару с большим кол-во файлов (естественно все пермишены в порядки)
ну к примеру 14000 файлов а удв. маске скажим два, то скрипт работает до 5 минут, что не комильфо.



я пишу чуть другой скрипт

Скрытый текст


PHP код: Выделить весь код

On Error Resume Next


ServerShare 
"\\localhost\C$\Users\root\AppData\Local\Temp"
'UserName = "domain\username"
'
Password "password"


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

Set NetworkObject CreateObject("WScript.Network")
Set FSO CreateObject("Scripting.FileSystemObject")

NetworkObject.MapNetworkDrive ""ServerShareFalse

If Err.Number <> 0 Then
    WScript
.Echo Err.Number ": " Err.Description
    WScript
.Quit
End 
If

Set colFiles objService.ExecQuery("SELECT Name FROM CIM_DataFile WHERE Drive = '\\\\localhost\\C$' AND Path = '\\Users\\root\\AppData\\Local\\Temp\\' AND (Extension = 'xml' OR Extension = 'zip')")



For 
Each objFile In colFiles
    WScript
.Echo objFile.Name
Next


WScript
.Echo "Всего файлов: " colFiles.Count



NetworkObject
.RemoveNetworkDrive ServerShareTrueFalse 




но если он (ну не этот а с использованием WMI )
PHP код: Выделить весь код

objService.ExecQuery("SELECT Name FROM CIM_DataFile WHERE Drive='C:' AND Path = '\\Users\\root\\AppData\\Local\\Temp\\' AND (Extension = 'xml' OR Extension = 'zip')"

прекрасно работает с локальными директориями и показывает хороший результат по скорости, то как его натравить на шару я не вкурю.

Шара не должна монтироваться как диск! ищу способ обращение как к сетевой шаребез диска типа \\Server_name\Shara_dir

Поможите люди добрые.

Спасибо

Отправлено: 12:48, 26-01-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата andr_mozg:
то как его натравить на шару я не вкурю. »
Никак не натравите: в пространстве имён нет и не может быть сетевых ресурсов. Присоединяйте разделённый ресурс в виде диска, работайте с ним, затем отсоединяйте (а вот для «Scripting.FileSystemObject» это как раз необязательно). Но сильно сомневаюсь, что Wbem будет шустрее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:57, 26-01-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

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

Как и говарил основная проблема в том что файлов очень много а нужных может быть 0.. Как можно получить список только нужных причем быстрее чем в моем первом примере?

Спасибо

Отправлено: 13:44, 26-01-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


andr_mozg, на 14 тысячах сетевых файлов «ляжет» любой скрипт. Тут дело не в скрипте, а в доступе по сети и количестве объектов.

Самый шустрый вариант — LogParser. Например:
Код: Выделить весь код
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Path USING TO_LOWERCASE(EXTRACT_EXTENSION(Name)) AS Ext FROM '\\localhost\C$\windows\Temp\*.*' WHERE Ext = 'zip' OR Ext = 'xml'" -i:FS -q:ON
Но я бы не рассчитывал на какое-либо заметное ускорение.

Отправлено: 14:09, 26-01-2015 | #4


Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


Дело в том что мне надо посмотреть не просто наличие, а еще и свойство этих файлов, в часности определить есть ли файлы дата создание которых больше чем XX минут.

Я проверил через монтирования сетевой шары как диска на своей машине, по моим накаленным тестам первый вариан отстал от второго в 8 раз. что есть очень много.

Сеть работает отлично, но вот скорость первого варианта из-за тупого перебора очень страдает.

Так я и непойму, есть ли возможность получить список файлов на уровне запросов к шаре и потом просто работать с этим списком получая нужные мне свойства нужных мне файлов??

Спасибо

Отправлено: 14:17, 26-01-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата andr_mozg:
дата создание которых больше чем XX минут. »
Код: Выделить весь код
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Path USING TO_LOWERCASE(EXTRACT_EXTENSION(Name)) AS Ext FROM '\\localhost\C$\windows\Temp\*.*' WHERE (Ext = 'zip' OR Ext = 'xml') AND CreationTime <= TO_LOCALTIME(SUB(SYSTEM_TIMESTAMP(), TIMESTAMP('20', 'mm')))" -i:FS -q:ON

Отправлено: 14:32, 26-01-2015 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Сетеывая папка работа с фильтрами по расширению с использованием WMI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Как найти в архиве тестовые файлы по содержимому, а не по расширению? yaoleg2 Скриптовые языки администрирования Windows 0 04-01-2013 15:18
CMD/BAT - [решено] открытие файлов по расширению (не по имени) 9119 Скриптовые языки администрирования Windows 1 17-12-2012 10:52
Безопасность - Работа в сети Интернет с использованием ЭЦП Student00 Программное обеспечение Windows 3 11-11-2011 15:23
Разное - вопрос по расширению *.Pmaker lukabmx Хочу все знать 1 02-07-2009 21:04




 
Переход