<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=3413&amp;type=atom" />
	<updated>2022-02-15T07:37:37Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=3413</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152199#p152199" />
			<content type="html"><![CDATA[<p>Добрый день!<br />А возможно ли получить у объекта objPrinter свойство Безопасность - требуется узнать, какие группы могут его использовать?</p>]]></content>
			<author>
				<name><![CDATA[Chai]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34073</uri>
			</author>
			<updated>2022-02-15T07:37:37Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152199#p152199</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=42707#p42707" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Ramzess пишет:</cite><blockquote><p>... выгружать список принтеров и их портов из АД?</p></blockquote></div><p>Вот пример сценария, из которого можете сделать нужный вариант:<br /></p><div class="codebox"><pre><code>Dim objRoot, objConnection, objCommand, objRSet
Dim intNumRecords, strDomain, strLog, arrTemp, strTemp
Dim objFS, objFile, objWShell

strLog = &quot;Printers_List.log&quot;
Set objRoot = GetObject(&quot;LDAP://RootDSE&quot;)
strDomain = objRoot.Get(&quot;DefaultNamingContext&quot;)
Set objRoot = Nothing
Set objConnection = CreateObject(&quot;ADODB.Connection&quot;)
objConnection.Provider = &quot;ADsDSOObject&quot;
objConnection.Open &quot;Active Directory Provider&quot;
Set objCommand = CreateObject(&quot;ADODB.Command&quot;)
Set objCommand.ActiveConnection = objConnection
strAttributes = &quot;printerName,uNCName,portName,driverName,serverName,shortServerName,Location&quot;
objCommand.CommandText = &quot;&lt;LDAP://&quot; &amp; strDomain &amp; &quot;&gt;;(objectCategory=printQueue);&quot; &amp; strAttributes &amp; &quot;;Subtree&quot;
objCommand.Properties(&quot;Page Size&quot;) = 1000
objCommand.Properties(&quot;Timeout&quot;) = 30
On Error Resume Next
Set objRSet = objCommand.Execute
If Err.Number = 0 Then
    intNumRecords = objRSet.RecordCount
    If intNumRecords &gt; 0 Then
        Set objFS = CreateObject(&quot;Scripting.FileSystemObject&quot;)
        strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog)
        Set objFile = objFS.CreateTextFile(strLog, True)
        objFile.WriteLine &quot;Обнаружено записей: &quot; &amp; intNumRecords &amp; vbNewLine &amp; &quot;===&quot;
        objRSet.MoveFirst
        Do Until objRSet.EOF
            For i = 0 To objRSet.Fields.Count - 1
                strTemp = vbNullString
                If IsArray(objRSet.Fields(i)) Then
                    arrTemp = objRSet.Fields(i)
                    For j = 0 To UBound(arrTemp)
                        strTemp = strTemp &amp; arrTemp(j) &amp; &quot;;&quot;
                        If Err.Number &lt;&gt; 0 Then Err.Clear
                    Next
                    Erase arrTemp
                Else
                    strTemp = objRSet.Fields(i).Value
                    If Err.Number &lt;&gt; 0 Then Err.Clear
                End If
                objFile.WriteLine objRSet.Fields(i).Name &amp; &quot; = &quot; &amp; strTemp
            Next
            objFile.WriteLine &quot;---&quot;
            objRSet.MoveNext
        Loop
        objFile.Close
        Set objFile = Nothing
        Set objFS = Nothing
        Set objWShell = CreateObject(&quot;WScript.Shell&quot;)
        objWShell.Run &quot;notepad.exe &quot; &amp; strLog, 1
        Set objWShell = Nothing    
    Else
        WScript.Echo &quot;Ничего не обнаружено.&quot;
    End If
Else
    WScript.Echo &quot;Ошибка выполения запроса: &quot; &amp; Err.Number &amp; vbNewLine &amp; Err.Description
    Err.Clear
End If
Set objRSet = Nothing
On Error GoTo 0
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
WScript.Quit 0</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Dmitrii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=13351</uri>
			</author>
			<updated>2010-12-08T10:55:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=42707#p42707</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=42703#p42703" />
			<content type="html"><![CDATA[<p>Господа, а как заставить скрипт представленный by Mike-Killer выгружать список принтеров и их портов из АД?</p>]]></content>
			<author>
				<name><![CDATA[Ramzess]]></name>
			</author>
			<updated>2010-12-08T09:15:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=42703#p42703</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26170#p26170" />
			<content type="html"><![CDATA[<p>2(abc) Подходит... Пасибо abc, alexii.</p>]]></content>
			<author>
				<name><![CDATA[Mike-Killer]]></name>
			</author>
			<updated>2009-07-20T05:16:15Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26170#p26170</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26104#p26104" />
			<content type="html"><![CDATA[<p>Добрый день!</p><p>Можно поиграться с этим кодом:<br /></p><div class="codebox"><pre><code>strComputer = &quot;.&quot;
Set objWMIService = GetObject(&quot;winmgmts:&quot; _
    &amp; &quot;{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)

Set colPrn = objWMIService.ExecQuery(&quot;Select * from Win32_Printer&quot;)

For each objPrinter in colPrn
    Wscript.Echo &quot;Local Name: &quot; &amp; objPrinter.Name
    Wscript.Echo &quot;Share Name: &quot; &amp; objPrinter.ShareName
    Wscript.Echo &quot;Server Name: &quot; &amp; objPrinter.ServerName
    Wscript.Echo &quot;Shared? : &quot; &amp; objPrinter.Shared
    Wscript.Echo &quot;Status Info: &quot; &amp; objPrinter.StatusInfo
    Wscript.Echo &quot;System Name: &quot; &amp; objPrinter.SystemName
Next</code></pre></div><p>Выводит список локальных расшареных принтеров.</p>]]></content>
			<author>
				<name><![CDATA[abc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24813</uri>
			</author>
			<updated>2009-07-17T06:28:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26104#p26104</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26075#p26075" />
			<content type="html"><![CDATA[<p>Нет, там не задействуется функционал ADSI (имеется в виду обзор сети на наличие принтеров). Другое дело, что сам ADSI при использовании провайдера «WinNT:» скорее всего реализуется обращением к тем же функциям WinAPI.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-07-16T16:23:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26075#p26075</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26070#p26070" />
			<content type="html"><![CDATA[<p>Интересно, а винда в вар.2 (см. сообщ. выше) тоже самое делает? Ещё раз повторю, не силён я пока в скриптах :-(... Может набросаете коду, если не сложно... плиз...</p>]]></content>
			<author>
				<name><![CDATA[Mike-Killer]]></name>
			</author>
			<updated>2009-07-16T14:09:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26070#p26070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26066#p26066" />
			<content type="html"><![CDATA[<p>Я так понимаю, что надо получить список машин через провайдера WinNT: (в принципе, можно и через LDAP:, один шут потом придётся соединяться с каждой в отдельности), затем подключиться к каждой и опросить её на предмет наличия PrintQueue: <a href="http://msdn.microsoft.com/en-us/library/aa706091(VS.85).aspx">IADsPrintQueue Interface (Windows)</a>. Полученные значения можно собирать в массив или в коллекцию.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-07-16T13:46:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26066#p26066</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26064#p26064" />
			<content type="html"><![CDATA[<p>Совершенно верно!</p>]]></content>
			<author>
				<name><![CDATA[Mike-Killer]]></name>
			</author>
			<updated>2009-07-16T13:37:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26064#p26064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26062#p26062" />
			<content type="html"><![CDATA[<p>Уважаемый Mike-Killer, AFAIK при 2 варианте вы по факту не сканируете сеть на наличие притеров в сети (расшареных), а задаете конкретный IP адрес машины (сервера). Т.е. вы сканируете шары по машинам (серверу).<br />И, на сколько я понимаю, Вам необходимо просканить сеть на наличие шар, выделить из них шары принтеров.<br />Я правильно Вас понял?</p>]]></content>
			<author>
				<name><![CDATA[abc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24813</uri>
			</author>
			<updated>2009-07-16T13:33:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26062#p26062</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26060#p26060" />
			<content type="html"><![CDATA[<p>2abc Проблема следующая: При ручной установке сетевого принтера есть два варианта 1. Найти принтер в АД,&nbsp; 2. Подключиться к принтеру или выполнить обзор принтеров. Через вар.1 принтер может быть не виден (если не поставили галочку в шаре). При вар.2 - его всегда видно через обзор принтеров. Так вот, нужно получить список как при обзоре принтеров... Я не силён в скриптах, только начинаю осваивать, не пинайте сильно, плиз. Что нужно поменять в скрипте?</p>]]></content>
			<author>
				<name><![CDATA[Mike-Killer]]></name>
			</author>
			<updated>2009-07-16T13:16:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26060#p26060</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26058#p26058" />
			<content type="html"><![CDATA[<p>AFAIK при установке сетевого принтера он их тянет либо из АД, либо с конкретного принтсервера....<br />если вы пользуете принтсервер, что Вам мешает в скрипте указать его? (сервер)</p>]]></content>
			<author>
				<name><![CDATA[abc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24813</uri>
			</author>
			<updated>2009-07-16T12:57:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26058#p26058</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26054#p26054" />
			<content type="html"><![CDATA[<p>Хоть скажите, слишком тупой или слишком сложный вопрос... :-(</p>]]></content>
			<author>
				<name><![CDATA[Mike-Killer]]></name>
			</author>
			<updated>2009-07-16T12:12:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26054#p26054</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: Как получить список сетевых принтеров, но не из AD]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=26048#p26048" />
			<content type="html"><![CDATA[<p>Есть скрипт, который получает список принтеров из AD и выгружает его в файл, затем получает принтер по умолчанию и его выгружает в другой файл:<br /></p><div class="codebox"><pre><code>Dim objRoot, objConnection, objCommand, objRSet
Dim intNumRecords, strDomain, strPrinters

&#039;Запись данных в фаил 
Dim fso, txtfile, txtfile1 
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;) 
Set txtfile  =fso.OpenTextFile(&quot;C:\PrintersAD.nmp&quot;, 8, True) 

Set objRoot = GetObject(&quot;LDAP://RootDSE&quot;)
strDomain = objRoot.Get(&quot;DefaultNamingContext&quot;)
Set objRoot = Nothing
Set objConnection = CreateObject(&quot;ADODB.Connection&quot;)
objConnection.Provider = &quot;ADsDSOObject&quot;
objConnection.Open &quot;Active Directory Provider&quot;
Set objCommand = CreateObject(&quot;ADODB.Command&quot;)
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = &quot;&lt;LDAP://&quot; &amp; strDomain &amp; &quot;&gt;;(objectClass=printqueue);Name;Subtree&quot;
objCommand.Properties(&quot;Page Size&quot;) = 1000
objCommand.Properties(&quot;Timeout&quot;) = 30
Set objRSet = objCommand.Execute
intNumRecords = objRSet.RecordCount
If intNumRecords &gt; 0 Then
    &#039;strPrinters = &quot;Обнаружено записей: &quot; &amp; intNumRecords &amp; vbNewLine &amp; &quot;===&quot; &amp; vbNewLine
    objRSet.MoveFirst
    Do Until objRSet.EOF
        &#039;strPrinters = strPrinters &amp; objRSet.Fields(&quot;Name&quot;).Value &amp; vbNewLine
    txtfile.WriteLine(objRSet.Fields(&quot;Name&quot;).Value) 
        objRSet.MoveNext
    Loop
    &#039;Wscript.Echo strPrinters
Else
    &#039;WScript.Echo &quot;Ничего не обнаружено.&quot;
End If
txtfile.Close 

&#039;Найдём принтер по умолчанию 

Set objWMIService = GetObject(&quot;winmgmts:&quot; &amp; &quot;{impersonationLevel=impersonate}!\\&quot; &amp; &quot;.&quot; &amp; &quot;\root\cimv2&quot;)
Set colInstalledPrinters= objWMIService.ExecQuery (&quot;Select * from Win32_Printer&quot;)

For Each objPrinter In colInstalledPrinters

  if (UCase(objPrinter.Default)=&quot;ИСТИНА&quot;) or (UCase(objPrinter.Default)=&quot;TRUE&quot;) then

    Set txtfile1 =fso.OpenTextFile(&quot;C:\DefaultPrinter.nmp&quot;, 8, True) 
    txtfile1.WriteLine(objPrinter.Name) 

    &#039;Wscript.Echo &quot;Обнаружен принтер по умолчанию &quot; &amp; objPrinter.Name &amp; _
    &#039;                  &quot;  &quot; &amp; objPrinter.PortName &amp; &quot;  &quot; &amp;  objPrinter.Default
  End if

Next
txtfile1.Close 

Set objRSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
WScript.Quit 0</code></pre></div><p>Как переделать этот скрипт, чтобы он получал принтеры не из АД, а список навроди того, который выводится при ручной установке сетевого принтера?</p>]]></content>
			<author>
				<name><![CDATA[Mike-Killer]]></name>
			</author>
			<updated>2009-07-16T07:56:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=26048#p26048</id>
		</entry>
</feed>
