<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: Поиск файлов на компьютерах по сети WMI]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9875&amp;type=atom" />
	<updated>2014-08-22T05:22:24Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9875</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Поиск файлов на компьютерах по сети WMI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86041#p86041" />
			<content type="html"><![CDATA[<p>Добрый день!</p><p>Задача еще нужна.<br /></p><div class="quotebox"><blockquote><p>AND FileName Like &#039;%qwe%&#039;</p></blockquote></div><p>так не получилось.</p><div class="quotebox"><blockquote><p>в Вашем скрипте идет поиск файлов не на удалённых машинах</p></blockquote></div><p>Почему? Я вместо того что бы указывать ip адреса компьютеров ручками сделал загружать из файла</p><div class="codebox"><pre><code>Dim lngCount, i

Dim objFSO, objFile

On Error Resume Next

Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objFile = objFSO.OpenTextFile(&quot;computers.txt&quot;, 1)


&#039;ТУТ ЗАГРУЖАЕМ ПИСОК КОМПЬЮТЕРОВ ИЗ ФАЙЛА computers.txt
i=0
&#039; reading lines from file
Do Until objFile.AtEndOfStream
    Redim Preserve arrComputers(i)
    arrComputers(i) = objFile.ReadLine
    i = i + 1
Loop

objFile.Close

lngCount     = UBound(arrComputers) + 1

Set objSWbemServicesEx = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\Root\CIMV2&quot;)
Set objSWbemSink       = WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;Sink_&quot;)

For Each strComputer In arrComputers
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alt7]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32468</uri>
			</author>
			<updated>2014-08-22T05:22:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86041#p86041</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Поиск файлов на компьютерах по сети WMI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=85970#p85970" />
			<content type="html"><![CDATA[<p>Если ещё актуально, то пробуйте добавить символ <strong>&quot;%&quot; и в начало like</strong>-выражения:<br /></p><div class="quotebox"><blockquote><p>...<br />AND FileName Like &#039;qwe%&#039;<br />...</p></blockquote></div><p>вот, так:<br /></p><div class="codebox"><pre><code>
AND FileName Like &#039;%qwe%&#039;
</code></pre></div><p>ps. только, по моему мнению, в Вашем скрипте идет поиск файлов не на удалённых машинах, а только лишь на своей локальной (wmi-подключение и асинхронный запрос - только к ней), а соответственно и лог-файлы создадуться сдублированные, ещё и запись в них без учёта возможной &quot;дозаписи&quot; свеженыйденных файлов на машине.</p><p>В общем, если задача ещё нужна, то маякуйте - доведём до ума.</p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2014-08-19T11:10:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=85970#p85970</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WSH: Поиск файлов на компьютерах по сети WMI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=85719#p85719" />
			<content type="html"><![CDATA[<p>Доброе время суток!</p><p>Столкнулся с необходимостью поиска фалов на компьютерах сети по маске (например, qwe*.*). На форуме нашел реализацию асинхронного поиска с помощью WMI <a href="http://forum.script-coding.com/viewtopic.php?id=3783">http://forum.script-coding.com/viewtopic.php?id=3783</a><br />Пытаюсь переделать под свои нужды не получается в части формирования запроса.</p><div class="codebox"><pre><code>
Option Explicit

Dim arrComputers()
Dim strComputer

Dim objSWbemServicesEx
Dim objSWbemSink
Dim objSWbemNamedValueSet

Dim lngCount, i

Dim objFSO, objFile

On Error Resume Next

&#039; Массив адресов/имён опрашиваемых машин
&#039; В принципе, можно получать из сетевого окружения, с контроллера домена
&#039; или перебором доступных адресов подсети
Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objFile = objFSO.OpenTextFile(&quot;computers.txt&quot;, 1)
Const DATA_DIR =&quot;files\&quot;
Const DATA_EXT = &quot;.txt&quot;
Const strDrive = &quot;c:&quot;
Const strPath = &quot;\&quot; &#039;целевой каталог
Const strExtension = &quot;txt&quot;

i=0
&#039; reading lines from file
Do Until objFile.AtEndOfStream
    Redim Preserve arrComputers(i)
    arrComputers(i) = objFile.ReadLine
    i = i + 1
Loop

objFile.Close

lngCount     = UBound(arrComputers) + 1

Set objSWbemServicesEx = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\Root\CIMV2&quot;)
Set objSWbemSink       = WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;Sink_&quot;)

For Each strComputer In arrComputers

    &#039; В коллекции «objSWbemNamedValueSet» будем передавать адрес/имя хоста (замечание: в данном конкретном случае
    &#039; сие, в принципе, необязательно, поскольку класс Win32_PingStatus и так содержит
    &#039; свойство «.Address», но тут показана сама технология передачи данных в процедуру асинхронной обработки)
    Set objSWbemNamedValueSet = WScript.CreateObject(&quot;WbemScripting.SWbemNamedValueSet&quot;)
    objSWbemNamedValueSet.Add &quot;HostName&quot;, strComputer
    
    &#039; Все запросы будут обрабатываться в единственной процедуре обработки
&#039;    objSWbemServicesEx.ExecQueryAsync objSWbemSink, &quot;SELECT * FROM Win32_PingStatus WHERE ADDRESS = &#039;&quot; &amp; strComputer &amp; &quot;&#039;&quot;, , , , objSWbemNamedValueSet
    objSWbemServicesEx.ExecQueryAsync objSWbemSink, &quot;SELECT * FROM CIM_DataFile WHERE Drive = &#039;&quot; &amp; strDrive &amp; &quot;&#039; AND Path = &#039;\\&quot; &amp; Replace(strPath,&quot;\&quot;,&quot;\\&quot;) &amp; &quot;\\&#039; AND FileName Like &#039;qwe%&#039; AND Extension = &#039;&quot; &amp; strExtension &amp; &quot;&#039;&quot;, , , , objSWbemNamedValueSet
    
Next

&#039; Ожидаем, пока не будут обработаны все асинхронные запросы
Do
    WScript.Sleep 100
Loop Until lngCount = 0

objSWbemSink.Cancel

Set objSWbemSink       = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
&#039; Процедура асинхронной обработки экземпляра объекта (замечание: в данном конкретном случае
&#039; будет возвращаться единственный объект, однако, в большинстве случаев запросы
&#039; возвращают множество объектов)
Sub Sink_OnObjectReady(objWbemObject, objWbemAsyncContext)
    Dim strComputer
    strComputer = objWbemAsyncContext.Item(&quot;HostName&quot;)    

    Dim fso, tf_ip, objFile, i
    Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)    
    Set tf_ip = fso.CreateTextFile(DATA_DIR &amp; strComputer &amp; DATA_EXT, True)    
    Set objFile = CreateObject(&quot;WScript.Shell&quot;)

i = 0 &#039;счетчик

If objWbemObject.Count &gt; 0 Then &#039;если файлы найдены    
    For Each objFile In objFiles
        &#039;пишем имя файла в лог
        tf_ip.Write(objFile.Name)
        i = i + 1
    Next
End If
    tf_ip.Close
End Sub
&#039;=============================================================================

&#039;=============================================================================
&#039; Процедура, вызываемая при завершении асинхронной обработки
Sub Sink_OnCompleted(iHResult, objWbemErrorObject, objWbemAsyncContext)
    objWbemAsyncContext.DeleteAll
    Set objWbemAsyncContext = Nothing
    
    &#039; Уменьшаем счётчик оставшегося числа асинхронных обработок
    lngCount = lngCount - 1
End Sub
&#039;=============================================================================
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alt7]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32468</uri>
			</author>
			<updated>2014-08-07T08:06:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=85719#p85719</id>
		</entry>
</feed>
