<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Выбрать и сравнить данные из AD]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5317</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5317&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Выбрать и сравнить данные из AD».]]></description>
		<lastBuildDate>Fri, 14 Jan 2011 14:27:53 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Выбрать и сравнить данные из AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=43747#p43747</link>
			<description><![CDATA[<div class="quotebox"><cite>Rialto пишет:</cite><blockquote><p>... Для выставления прав, я пользовался утилитой fileacl.exe (она должна лежать в папке со скриптом)...</p></blockquote></div><p>Можно и без сторонних утилит, хотя, конечно, и не столь просто.<br />Пример здесь: <a href="http://forum.script-coding.com/viewtopic.php?id=5142">http://forum.script-coding.com/viewtopic.php?id=5142</a></p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Fri, 14 Jan 2011 14:27:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=43747#p43747</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Выбрать и сравнить данные из AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=43716#p43716</link>
			<description><![CDATA[<p>Спасибо большое, всё получилось.<br />Для выставления прав, я пользовался утилитой fileacl.exe (она должна лежать в папке со скриптом)<br />Вот код:<br /></p><div class="codebox"><pre><code>&#039;=========Скрипт синхронизирует домашние папки пользователей ============
&#039;=======и учетные записи пользователей, удаляя только пустые папки=======
&#039;================== Настройки скрипта====================================

strHomeFolder = &quot;\\server\folder&quot;
strLDAPBase   = &quot;&lt;LDAP://ou=user,ou=all,DC=Domain,DC=RU&gt;&quot;
LogPath = &quot;C:\user_folder_log.txt&quot;

&#039;========================================================================
&#039;========================================================================


Set Dict = CreateObject(&quot;Scripting.Dictionary&quot;)
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
set WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;)

&#039; Получаем объектную модель исходного каталога
 
Set FS03 = fso.GetFolder(strHomeFolder)
   For Each Folders In FS03.SubFolders
      Dict.Add LCase(Folders.Name), &quot;Delete&quot;
   Next

&#039; Подключаемся к AD и получаем список пользователей.
Set adoCommand = CreateObject(&quot;ADODB.Command&quot;)
Set adoConnection = CreateObject(&quot;ADODB.Connection&quot;)
adoConnection.Provider = &quot;ADsDSOObject&quot;
adoConnection.Open &quot;Active Directory Provider&quot;
Set adoCommand.ActiveConnection = adoConnection
Set objRootDSE = GetObject(&quot;LDAP://RootDSE&quot;)
strFilter = &quot;(&amp;(objectCategory=person)(objectClass=user))&quot;
strAttributes = &quot;sAMAccountName&quot;
strQuery = strLDAPBase &amp; &quot;;&quot; &amp; strFilter &amp; &quot;;&quot; &amp; strAttributes &amp; &quot;;subtree&quot;
adoCommand.CommandText = strQuery
adoCommand.Properties(&quot;Page Size&quot;) = 100
adoCommand.Properties(&quot;Timeout&quot;) = 30
adoCommand.Properties(&quot;Cache Results&quot;) = False
Set adoRecordset = adoCommand.Execute
adoRecordset.MoveFirst

&#039; Сравниваем список папкой и список пользователей
Do Until adoRecordset.EOF
    strName = LCase(adoRecordset.Fields(&quot;sAMAccountName&quot;).Value)

    If Dict.Exists(strName) = True then
    Dict.Item(strName) = &quot;Ok&quot;
    else
    Dict.Add strName, &quot;Add&quot;
    end if
    
adoRecordset.MoveNext
Loop

adoRecordset.Close
adoConnection.Close

ArrI = Dict.Items
ArrK = Dict.Keys

&#039; Добавляем недостающие папки, выставляем права
For i=0 To Dict.Count-1
  if ArrI(i) = &quot;Add&quot; then
    strFullFolderName = FSO.BuildPath(strHomeFolder, ArrK(i))
    FSO.CreateFolder strFullFolderName
    Username = ArrK(i)
    intRun = WshShell.Run(&quot;fileacl.exe &quot; &amp; strFullFolderName &amp; &quot; /replace&quot;,0,true)
    intRun = WshShell.Run(&quot;fileacl.exe &quot; &amp; strFullFolderName &amp; &quot; /G BUILTIN\Administrators:F&quot;,0,true)
    intRun = WshShell.Run(&quot;fileacl.exe &quot; &amp; strFullFolderName &amp; &quot; /G &quot;&amp; Username &amp; &quot;:C&quot;,0,true)
  End If
Next

ArrItems = Dict.Items
ArrKeys = Dict.Keys

&#039; Удаляем пустые ненужные папки
For j=0 To Dict.Count-1
&#039;On Error Resume Next

if ArrItems(j) = &quot;Delete&quot; then 
  
  strFullFolderName = FSO.BuildPath(strHomeFolder, ArrKeys(j))
  Set DelFolder = FSO.GetFolder(strFullFolderName)
   if DelFolder.Size = 0 then
         DelFolder.Delete
    Dict.Item(ArrKeys(j)) = &quot;Удалено успешно&quot;
       else
    Dict.Item(ArrKeys(j)) = &quot;Не удалено (папка не пуста)&quot;
   end if
end if

Next

&#039;Пишем Лог файл
Set TextStream = FSO.OpenTextFile(LogPath, 2, True)
Items = Dict.Items
Keys = Dict.Keys

For g=0 To Dict.Count-1
TextStream.WriteLine Keys(g) &amp;&quot; - &quot;&amp; Items(g)
Next
WScript.Echo &quot;Готово&quot;
WScript.Quit 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rialto)]]></author>
			<pubDate>Fri, 14 Jan 2011 08:00:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=43716#p43716</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Выбрать и сравнить данные из AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=43151#p43151</link>
			<description><![CDATA[<div class="quotebox"><cite>Rialto пишет:</cite><blockquote><p>... Правильно ли я вижу алгоритм и помогите с кодом</p></blockquote></div><p>Можно проще:<br />1. С помощью объекта <span style="color: blue">Dictionary</span> составить список всех папок.<br />2. Подключиться к нужному подразделению AD и просматривая список &quot;учёток&quot;:<br />- помечать в словаре найденные соответствия;<br />- добавлять в словарь записи для отсутствующих папок и также помечать их (эти метки должны отличаться от меток для предыдущего пункта).<br />3. Просматривая получившийся словарь:<br />- создавать отсутствующие папки (нужные записи уже помечены);<br />- проверять папки, соответствующие не помеченным записям словаря, и удалять пустые.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Tue, 28 Dec 2010 12:59:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=43151#p43151</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Выбрать и сравнить данные из AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=43148#p43148</link>
			<description><![CDATA[<p>По поводу алгоритма - я бы сначала одними скриптами/пакетниками сделал бы выборку юзеров и папок в текстовые файлы или эксельные таблицы, а потом уже игрался со скриптом, который будет обрабатывать эти входящие данные и создавать пакетные файлы с удалением и созданием папок, назначением прав и пр.</p>]]></description>
			<author><![CDATA[null@example.com (Rom5)]]></author>
			<pubDate>Tue, 28 Dec 2010 12:10:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=43148#p43148</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Выбрать и сравнить данные из AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=43143#p43143</link>
			<description><![CDATA[<p>Добрый день, подскажите пожалуйста.<br />Задача такая:<br />Сравнить Logon Name ( sAMAccountName) у всех пользователей определённого OU в AD и название папок на сетевом сервере (папки должны называться так же как и sAMAccountName ).<br />Недостающие папки (папки нет, пользователь в AD есть) добавить , лишние (пользователья в AD нет, папка есть) папки удалить , причём удалить только пустые.<br />OU = employees<br />server = \\server\home$\</p><p>Как я вижу задачу.<br />Выбрать из определённой группы AD всех пользователей, посмотреть у них Logon Name ( sAMAccountName), загнать всё это в массив. Array1<br />Выбрать из сетевой папки все подпапки, загнать в массив. Array2<br />Сравнить массивы, загнать результат в третий массив.<br />В первом случае сравнения (Array1 - Array2) будут недостающие папки, во втором (Array2 - Array1) лишние папки.<br />Сравнить лишние папки на размер, удалить пустые, добавить недостающие.</p><p>Правильно ли я вижу алгоритм и помогите с кодом.</p>]]></description>
			<author><![CDATA[null@example.com (Rialto)]]></author>
			<pubDate>Tue, 28 Dec 2010 11:42:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=43143#p43143</guid>
		</item>
	</channel>
</rss>
