<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: Сопоставление двух массивов с совпадающими значениями]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9304&amp;type=atom" />
	<updated>2014-02-27T20:35:58Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9304</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Сопоставление двух массивов с совпадающими значениями]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=80418#p80418" />
			<content type="html"><![CDATA[<p>Вероятно, с помощью &quot;Scripting.Dictionary&quot;, а лучше ассоциативные массивы JScript.</p>]]></content>
			<author>
				<name><![CDATA[shiz]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26249</uri>
			</author>
			<updated>2014-02-27T20:35:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=80418#p80418</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: Сопоставление двух массивов с совпадающими значениями]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=80415#p80415" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />Прошу ногами не бить – только начинаю осваивать VBScript. Возникла потребность определить чьи флэшки втыкались в компьютер. <br />1. Имеется массив, в котором перечислены имеющиеся подключения: <em>серийник флэшки;модель флэшки</em>. Вытаскиваю это из реестра следующим кодом:<br /></p><div class="codebox"><pre><code>
On Error Resume Next
Dim subkey, subsubkey             &#039;ключ, подключ
Dim arrSubKeys(), arrSubKeys1()      &#039;массивы подключей  
Dim objReg                 &#039;реестр 
Dim wshShell                 &#039;оболочка 
Dim strComputer             &#039;компьютер     
Dim compName             &#039;имя компьютера
Dim repFile                 &#039;файл отчета
Dim repFileName            &#039;имя файла отчета
Dim USBMas()                 &#039;массив для полученных значений


Const HKLM = &amp;H80000002
Const strValueName = &quot;FriendlyName&quot;                 &#039;модель флэшки  
Const strKeyPath = &quot;SYSTEM\CurrentControlSet\Enum\USBSTOR&quot;     &#039;раздел с информацией об USB    
strComputer = &quot;.&quot;                             &#039;местный компьютер        
Set wshShell = CreateObject(&quot;WScript.Shell&quot;)
compName = wshShell.ExpandEnvironmentStrings(&quot;%COMPUTERNAME%&quot;)     &#039;получаем имя компьютера
Set objReg = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\default:StdRegProv&quot;)     &#039;получаем провайдера реестра
objReg.EnumKey HKLM, strKeyPath, arrSubKeys                 &#039;получаем подразделы

t = 0                                     &#039;счетчик
If IsArray(arrSubKeys) Then                            
  For Each subkey In arrSubKeys                         &#039;для каждого подраздела            
    objReg.EnumKey HKLM, strKeyPath &amp; &quot;\&quot; &amp; subkey, arrSubKeys1         &#039;получаем подразделы подразделов
    If IsArray(arrSubKeys1) Then                        &#039;снова если массив
      For Each subsubkey In arrSubKeys1                     &#039;для каждого подраздела подразделов              
        ReDim Preserve USBMas(1, t)
        USBMas(0, t) = UCase(Left(subsubkey, Len(subsubkey) - 2))             &#039;получаем серийный номер флэшки
        objReg.GetStringValue HKLM, strKeyPath &amp; &quot;\&quot; &amp; subkey &amp; &quot;\&quot; &amp; subsubkey, strValueName, USBMas(1, t) &#039;получаем модель флешки
        t = t + 1              
      Next
    End If        
  Next
End If

&#039;На всякий случай выведем в htm-файл в папке скрипта
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
  repFileName = wshShell.CurrentDirectory &amp; &quot;\&quot; &amp; compName &amp; &quot;-&quot; &amp; Date &amp; &quot;.htm&quot;    
  Set repFile = fso.CreateTextFile(repFileName, True)
  repFile.WriteLine &quot;&lt;html&gt;&lt;title&gt;USBMaster - Report&lt;/title&gt;&lt;body&gt;&lt;table border=&quot; &amp; Chr(34) &amp; _
      1 &amp; Chr(34) &amp; &quot; width = 90% align = center&gt;&lt;tr&gt;&lt;th colspan=&quot; &amp; Chr(34) &amp; 2 &amp; Chr(34) &amp; _
      &quot;&gt;Список флэшек, установленных на компьютере &quot; &amp; compName &amp; _
      &quot; &quot; &amp; Date &amp; &quot; г.&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; Серийный номер &lt;/td&gt;&lt;td&gt; Наименование &lt;/td&gt;&lt;/tr&gt;&quot;
  If IsArray(USBMas) Then                            
    For t = LBound(USBMas, 2) To UBound(USBMas, 2)                &#039;заполняем таблицу
      repFile.WriteLine &quot;&lt;tr&gt;&lt;td&gt;&quot; &amp; USBMas(0, t) &amp; &quot;&lt;/td&gt;&lt;td&gt;&quot; &amp; USBMas(1, t) &amp; &quot;&lt;/td&gt;&lt;/tr&gt;&quot;
    Next
  End If
  repFile.WriteLine &quot;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;                    
  repFile.Close                                 
</code></pre></div><p>2. Имеется cvs-файл, в котором перечислены &quot;легальные&quot; флэшки по строчкам <em>серийник;модель;объем;владелец</em>. <br />3. Нужно сопоставить два набора данных (полученный выше приведенным кодом и содержимое cvs-файла). Ключевое поле - серийный номер.</p><p>Результат хотелось бы видеть в формате <em>серийник;модель;объем;<strong>владелец</strong></em>. А если там еще и будут столбцы о дате/времени первого-последнего подключения и наличии/отсутствии записи о серийнике в файле Windows\setupapi.log, то счастью моему не будет предела.<br />Это возможно?</p>]]></content>
			<author>
				<name><![CDATA[alp69]]></name>
			</author>
			<updated>2014-02-27T18:10:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=80415#p80415</id>
		</entry>
</feed>
