<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: подключение сетевых принтеров с использованием AD]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=2229</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2229&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: подключение сетевых принтеров с использованием AD».]]></description>
		<lastBuildDate>Wed, 10 Sep 2008 11:51:13 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: подключение сетевых принтеров с использованием AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=13985#p13985</link>
			<description><![CDATA[<p>Скрипт, &quot;обратный&quot; предыдущему.</p><p>Скрипт находит все подключённые сетевые принтеры, затем находит текущего пользователя в Active Directory и записывает в указанное поле Active Directory список принтеров.<br />Список принтеров будет храниться в одном поле Active Directory, разделитель - перевод строки. Принтеры хранятся в формате &quot;\\serverName\PrinterName&quot;. Принтер по умолчанию записывается как первый принтер в списке.<br />Скрипт ведёт лог по указанному пути (перезаписывается при каждом запуске).<br /></p><div class="codebox"><pre><code>Option Explicit
On Error Resume Next

Dim Domain, Field, LogPath &#039; настройки
Dim strPrinters &#039; строка с принтерами для записи в Active Directory
Dim WshNetwork, FSO, WMI, AdoConn &#039; объекты серверов автоматизации
Dim TextStream &#039; объект файлового потока лога
Dim colPrinters &#039; коллекция принтеров WMI
Dim Prn &#039; при переборе коллекции принтеров WMI объект принтера по умолчанию
Dim DefaultPrn &#039; имя принтера по умолчанию
Dim Printers &#039; коллекция установленных принтеров
Dim i &#039; счётчик
Dim PrnName &#039; имя установленного принтера
Dim Query &#039; текст запроса к Active Directory
Dim Rs &#039; объект рекордсета
Dim ObjectOfAD &#039; объект текущего пользователя в Active Directory

&#039; =&gt; НАСТРОЙКИ ====================================================================================
Domain = &quot;DC=mydomain,DC=ru&quot; &#039; имя домена
Field = &quot;info&quot; &#039; имя поля Active Directory, в котором хранится список принтеров
LogPath = &quot;C:\PrintersConnection.log&quot; &#039; путь к файлу лога
&#039; &lt;= НАСТРОЙКИ ====================================================================================

Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set TextStream = FSO.OpenTextFile(LogPath, 2, True)

strPrinters = &quot;&quot;

&#039; чтение установленных принтеров
Set WMI = GetObject(&quot;winmgmts:\\.\Root\CIMV2&quot;)
If Err.Number Then
    TextStream.WriteLine &quot;не удалось подключиться к WMI&quot;
    Err.Clear
End If
Set colPrinters = WMI.ExecQuery(&quot;SELECT Caption FROM Win32_Printer WHERE Default=TRUE&quot;)
DefaultPrn = &quot;&quot;
If Err.Number Then
    TextStream.WriteLine &quot;не удалось выполнить запрос SELECT Caption FROM Win32_Printer WHERE Default=TRUE&quot;
    Err.Clear
Else
    For Each Prn In colPrinters
        strPrinters = strPrinters &amp; Prn.Caption
        DefaultPrn = Prn.Caption
        Exit For
    Next
End If

Set WshNetwork = CreateObject(&quot;WScript.Network&quot;)
Set Printers = WshNetwork.EnumPrinterConnections
i = 0
While i &lt;= Printers.Count-1
    PrnName = Printers.Item(i+1)
    If Left(PrnName, 2) = &quot;\\&quot; Then &#039; только сетевые принтеры
        TextStream.WriteLine &quot;обнаружен сетевой принтер: &quot; &amp; PrnName
        If PrnName &lt;&gt; DefaultPrn Then
            strPrinters = strPrinters &amp; vbCrLf &amp; PrnName
        End If
    Else
        TextStream.WriteLine &quot;обнаружен несетевой принтер: &quot; &amp; PrnName
    End If
    i = i+2
Wend

&#039; запись в Active Directory
Set AdoConn = CreateObject(&quot;ADODB.Connection&quot;)
If Err.Number Then
    TextStream.WriteLine &quot;не удалось создать объект ADODB.Connection&quot;
    TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
    Err.Clear
End If
AdoConn.Provider = &quot;ADSDSOObject&quot;
AdoConn.Open &quot;Active Directory Provider&quot;
Query = &quot;SELECT ADsPath FROM &#039;LDAP://&quot; &amp; Domain &amp; &quot;&#039; WHERE sAMAccountName=&#039;&quot; &amp; WshNetwork.UserName &amp; &quot;&#039;&quot;
Set Rs = AdoConn.Execute(Query)
If Err.Number Then
    TextStream.WriteLine &quot;не удалось выполнить запрос к Active Directory: &quot; &amp; Query
    TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
    Err.Clear
End If
If Not Rs.EOF Then
    Set ObjectOfAD = GetObject(Rs.Fields(0).Value)
    ObjectOfAD.Put Field, strPrinters &#039; собственно запись
    ObjectOfAD.SetInfo
    If Err.Number Then
        TextStream.WriteLine &quot;не удалось записать данные в Active Directory&quot;
        TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
        Err.Clear
    End If
End If
AdoConn.Close
TextStream.Close</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Wed, 10 Sep 2008 11:51:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=13985#p13985</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: подключение сетевых принтеров с использованием AD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=13984#p13984</link>
			<description><![CDATA[<p>Скрипт удаляет все сетевые принтеры, затем находит текущего пользователя в Active Directory, считывает из указанного поля Active Directory список принтеров и пытается подключить их.<br />Список принтеров должен храниться в одном поле Active Directory, разделитель - перевод строки. Принтеры должны храниться в формате &quot;\\serverName\PrinterName&quot;. Принтером по умолчанию назначается первый принтер в списке.<br />Скрипт ведёт лог по указанному пути (перезаписывается при каждом запуске).<br /></p><div class="codebox"><pre><code>Option Explicit
On Error Resume Next

Dim Domain, Field, LogPath &#039; настройки
Dim WshNetwork, AdoConn, FSO &#039; объекты серверов автоматизации
Dim TextStream &#039; объект файлового потока лога
Dim Printers &#039; коллекция установленных принтеров
Dim i &#039; счётчик, флаг
Dim PrnName &#039; имя установленного принтера
Dim Query &#039; текст запроса к Active Directory
Dim Rs &#039; объект рекордсета
Dim ObjectOfAD &#039; объект текущего пользователя в Active Directory
Dim Info &#039; список принтеров, хранящихся в Active Directory (строка)
Dim PrinterPath &#039; имя устанавливаемого принтера

&#039; =&gt; НАСТРОЙКИ ====================================================================================
Domain = &quot;DC=mydomain,DC=ru&quot; &#039; имя домена
Field = &quot;info&quot; &#039; имя поля Active Directory, в котором хранится список принтеров
LogPath = &quot;C:\PrintersConnection.log&quot; &#039; путь к файлу лога
&#039; &lt;= НАСТРОЙКИ ====================================================================================

Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set TextStream = FSO.OpenTextFile(LogPath, 2, True)

Set WshNetwork = CreateObject(&quot;WScript.Network&quot;)
Set Printers = WshNetwork.EnumPrinterConnections
i = 0
While i &lt;= Printers.Count-1
    PrnName = Printers.Item(i+1)
    If Left(PrnName, 2) = &quot;\\&quot; Then &#039; только сетевые принтеры
        WshNetwork.RemovePrinterConnection PrnName
        If Err.Number Then
            TextStream.WriteLine &quot;не удалось удалить сетевой принтер: &quot; &amp; PrnName
            TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
            Err.Clear
        Else
            TextStream.WriteLine &quot;удалён сетевой принтер: &quot; &amp; PrnName
        End If
    Else
        TextStream.WriteLine &quot;обнаружен несетевой принтер: &quot; &amp; PrnName
    End If
    i = i+2
Wend
Set AdoConn = CreateObject(&quot;ADODB.Connection&quot;)
If Err.Number Then
    TextStream.WriteLine &quot;не удалось создать объект ADODB.Connection&quot;
    TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
    Err.Clear
End If
AdoConn.Provider = &quot;ADSDSOObject&quot;
AdoConn.Open &quot;Active Directory Provider&quot;
Query = &quot;SELECT ADsPath FROM &#039;LDAP://&quot; &amp; Domain &amp; &quot;&#039; WHERE sAMAccountName=&#039;&quot; &amp; WshNetwork.UserName &amp; &quot;&#039;&quot;
Set Rs = AdoConn.Execute(Query)
If Err.Number Then
    TextStream.WriteLine &quot;не удалось выполнить запрос к Active Directory: &quot; &amp; Query
    TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
    Err.Clear
End If
If Not Rs.EOF Then
    Set ObjectOfAD = GetObject(Rs.Fields(0).Value)
    Info = ObjectOfAD.Get(Field)
    i = True
    If Len(Info) = 0 Then
        TextStream.WriteLine &quot;поле Active Directory &#039;&quot; &amp; Field &amp; &quot;&#039; пусто&quot;
    End If
    For Each PrinterPath In Split(Info, vbCrLf)
        WshNetwork.AddWindowsPrinterConnection PrinterPath
        If Err.Number Then
            TextStream.WriteLine &quot;не удалось подключить принтер: &quot; &amp; PrinterPath
            TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
            Err.Clear
        Else
            TextStream.WriteLine &quot;подключён принтер: &quot; &amp; PrinterPath
        End If
        If i Then
            WshNetwork.SetDefaultPrinter PrinterPath
            If Err.Number Then
                TextStream.WriteLine &quot;не удалось назначить принтером по умолчанию: &quot; &amp; PrinterPath
                TextStream.WriteLine Err.Number &amp; &quot; &quot; &amp; Err.Description
                Err.Clear
            Else
                TextStream.WriteLine &quot;принтер назначен принтером по умолчанию: &quot; &amp; PrinterPath
                i = False
            End If
        End If
    Next
Else
    TextStream.WriteLine &quot;запрос к Active Directory вернул пустой результат: &quot; &amp; Query
End If
AdoConn.Close
TextStream.Close</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Wed, 10 Sep 2008 08:23:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=13984#p13984</guid>
		</item>
	</channel>
</rss>
