<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Сетевые принтеры на удаленной машине]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5165</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5165&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Сетевые принтеры на удаленной машине».]]></description>
		<lastBuildDate>Tue, 16 Nov 2010 07:18:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Сетевые принтеры на удаленной машине]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41753#p41753</link>
			<description><![CDATA[<div class="quotebox"><cite>serg пишет:</cite><blockquote><p>... я хочу по заданному имени станции получить список всех установленных принтеров этой станции...</p></blockquote></div><div class="codebox"><pre><code>Dim objRoot, objConnection, objCommand, objRSet
Dim strDomain, strComputer, strList, 
Const ADS_SCOPE_SUBTREE = 2

strComputer = Trim(InputBox(&quot;NetBIOS-имя компьютера:&quot;, &quot;Поиск принтеров, опубликованных в AD&quot;))
If Len(strComputer) &gt; 0 Then
    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;Location,printerName&quot;
    strCommandText = &quot;SELECT &quot; &amp; strAttributes &amp; &quot; FROM &#039;LDAP://&quot; &amp; strDomain &amp; _
                    &quot;&#039; WHERE objectCategory=&#039;printQueue&#039; AND shortServerName=&#039;&quot; &amp; strComputer &amp; &quot;&#039;&quot;
    objCommand.CommandText = strCommandText
    objCommand.Properties(&quot;Page Size&quot;) = 1000
    objCommand.Properties(&quot;Timeout&quot;) = 30
    objCommand.Properties(&quot;Sort On&quot;) = &quot;printerName&quot;
    objCommand.Properties(&quot;Searchscope&quot;) = ADS_SCOPE_SUBTREE
    Set objRSet = objCommand.Execute
    If objRSet.RecordCount &gt; 0 Then
        strList = vbNullstring
        objRSet.MoveFirst
        Do Until objRSet.EOF
            For i = 0 To objRSet.Fields.Count - 1
                strList = strList &amp; objRSet.Fields(i).Name &amp; &quot; = &quot; &amp; objRSet.Fields(i).Value &amp; vbNewLine
            Next
            strList = strList &amp; &quot;---&quot; &amp; vbNewLine
            objRSet.MoveNext
        Loop
        WScript.Echo strList
    Else
        WScript.Echo &quot;Ничего не обнаружено.&quot;
    End If
    Set objRSet = Nothing
    Set objCommand = Nothing
    objConnection.Close
    Set objConnection = Nothing
End If
WScript.Quit 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Tue, 16 Nov 2010 07:18:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41753#p41753</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Сетевые принтеры на удаленной машине]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41730#p41730</link>
			<description><![CDATA[<p>Да, спасибо Dmitrii. этот скрипт выбирает все принтеры заданного подразделения. Хотелось бы знать у кого они установлены.&nbsp; Другими словами я хочу по заданному имени станции получить список всех установленных принтеров этой станции. Локальные принтера я знаю как - через WMI класс Win32_Printer&nbsp; этим скриптом</p><div class="codebox"><pre><code>Option Explicit
Dim WMI, sStr, i, cpsys, p,compname
Dim nwo, comp, user
Set nwo = CreateObject(&quot;WScript.Network&quot;)
comp = LCase(nwo.ComputerName)
&#039;запросить имя удаленного компьютера
comp = InputBox(&quot;Введите имя компьютера:&quot;, comp)
&#039;проверить доступность компьютера
If Unavailable(comp) Then
    MsgBox &quot;Компьютер недоступен:&quot; &amp; vbCrLf &amp; comp
    comp = &quot;&quot;
       WScript.Quit(0) &#039; на выход
End If

If Len(comp) &lt; 1 Then WScript.Quit(0) &#039; на выход


&#039;Соединимся с WMI
On Error Resume Next
set WMI=GetObject(&quot;WinMgmts:{impersonationLevel=impersonate}!\\&quot; &amp; comp &amp; &quot;\Root\CIMV2&quot;)
If Err &lt;&gt; 0 Then 
 dim obj,objs,admname,admpass
 dim locator
 admname=inputbox(&quot;Имя администратора&quot;,&quot;Введите имя&quot;,&quot;&quot;)
 admpass=inputbox(&quot;Пароль администратора&quot;,&quot;Введите пароль&quot;,&quot;&quot;)
 set locator =Createobject(&quot;WbemScripting.SWbemLocator&quot;)
 set WMI = locator.ConnectServer(comp,&quot;root\cimv2&quot;,admname,admpass)
 Err.Clear 
End if 
Set cpsys = WMI.ExecQuery(&quot;SELECT * FROM Win32_ComputerSystem&quot;)

For Each p In cpsys
 compname=p.name
 user=p.UserName
next

sStr=&quot;Имя компьютера    : &quot;&amp; compname &amp; vbCrLf &#039;Имя компьютера
sStr=sStr+&quot;Имя пользователя  : &quot; &amp; user &amp; vbcrlf 

Set cpsys = WMI.ExecQuery(&quot;SELECT * FROM Win32_Printer&quot;)

For Each p In cpsys
  sStr=sStr+&quot;Принтер                    : &quot; &amp; p.Name &amp; vbcrlf 
next

if Wscript.Arguments.Count &gt; 0 then
  Dim fso, tf
  Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;) 
  Set tf = fso.CreateTextFile(compname &amp; &quot;.TXT&quot;, True)
  tf.WriteLine sStr
  tf.Close
end if

WScript.Echo sStr
WScript.Quit(0) &#039; на выход

&#039;проверить доступность компьютера в сети
&#039;вернуть True, если адрес недоступен
Function Unavailable(addr)
    Dim wmio, ping, p
    Set wmio = GetObject(&quot;WinMgmts:{impersonationLevel=impersonate}&quot;)
    Set ping = wmio.ExecQuery(&quot;SELECT StatusCode FROM Win32_PingStatus WHERE Address = &#039;&quot; &amp; addr &amp; &quot;&#039;&quot;)
    For Each p In ping
        If IsNull(p.StatusCode) Then
            Unavailable = True
        Else
            Unavailable = (p.StatusCode &lt;&gt; 0)
        End If
    Next
End Function</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serg)]]></author>
			<pubDate>Mon, 15 Nov 2010 15:21:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41730#p41730</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Сетевые принтеры на удаленной машине]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41717#p41717</link>
			<description><![CDATA[<div class="quotebox"><cite>serg пишет:</cite><blockquote><p>С OU имелось ввиду список сетевых принтеров удаленных станций определенного OU...</p></blockquote></div><p>Один из возможных вариантов (можно составить и полный, и частичный список):<br /></p><div class="codebox"><pre><code>Dim objRoot, objConnection, objCommand, objRSet
Dim strDomain, strOU, strComputer, strList, strTemp, strLog
Dim intCounter, intLeft, intRight, blnHasResult
Dim objFS, objFile, objWShell
Const ADS_SCOPE_SUBTREE = 2

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;distinguishedName,shortServerName,Location,printerName&quot;

strOU = Trim(InputBox(&quot;Имя подразделения:&quot;, &quot;Поиск принтеров, опубликованных в AD&quot;))
strCommandText = &quot;SELECT &quot; &amp; strAttributes &amp; &quot; FROM &#039;LDAP://&quot; &amp; strDomain &amp; _
                &quot;&#039; WHERE objectCategory=&#039;printQueue&#039;&quot;
objCommand.CommandText = strCommandText
objCommand.Properties(&quot;Page Size&quot;) = 1000
objCommand.Properties(&quot;Timeout&quot;) = 30
objCommand.Properties(&quot;Sort On&quot;) = &quot;printerName&quot;
objCommand.Properties(&quot;Searchscope&quot;) = ADS_SCOPE_SUBTREE
Set objRSet = objCommand.Execute
If objRSet.RecordCount &gt; 0 Then
    strList = vbNullstring
    objRSet.MoveFirst
    Do Until objRSet.EOF
        blnHasResult = False
        strTemp = objRSet.Fields(&quot;distinguishedName&quot;).Value
        If Len(strOU) &gt; 0 Then
            If InStr(1, strTemp, &quot;ou=&quot; &amp; strOU &amp; &quot;,&quot;, vbtextCompare) &gt; 0 Then
                blnHasResult = True
            Else
                blnHasResult = False
            End If
        Else
            blnHasResult = True
        End If
        If blnHasResult Then
            intCounter = intCounter + 1
            For i = 0 To objRSet.Fields.Count - 1
                If StrComp(objRSet.Fields(i).Name, &quot;distinguishedName&quot;, vbtextCompare) &lt;&gt; 0 Then
                    strList = strList &amp; objRSet.Fields(i).Name &amp; &quot; = &quot; &amp; objRSet.Fields(i).Value &amp; vbNewLine
                End If
            Next
            strList = strList &amp; &quot;---&quot; &amp; vbNewLine
        End If
        objRSet.MoveNext
    Loop
    If Len(strList) &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; intCounter &amp; vbNewLine &amp; &quot;===&quot;
        objFile.WriteLine strList
        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;
End If
Set objRSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
WScript.Quit 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Mon, 15 Nov 2010 13:29:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41717#p41717</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Сетевые принтеры на удаленной машине]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41711#p41711</link>
			<description><![CDATA[<div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>Вам нужен список принтеров, сервером печати для которых является некая удалённая станция, причём не все, а те из них, которые опубликованы в AD?<br />Если так, то причём здесь некое OU?</p></blockquote></div><p>С OU имелось ввиду список сетевых принтеров удаленных станций определенного OU. А с принтерами Вы правильно поняли именно они меня интересуют.</p>]]></description>
			<author><![CDATA[null@example.com (serg)]]></author>
			<pubDate>Mon, 15 Nov 2010 11:25:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41711#p41711</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Сетевые принтеры на удаленной машине]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41683#p41683</link>
			<description><![CDATA[<div class="quotebox"><cite>serg пишет:</cite><blockquote><p>... список сетевых принтеров, объявленных в АD, на <strong>удаленной машине</strong> в определенном OU...</p></blockquote></div><p>Вам нужен список принтеров, сервером печати для которых является некая удалённая станция, причём не все, а те из них, которые опубликованы в AD?<br />Если так, то причём здесь некое OU?</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Mon, 15 Nov 2010 06:47:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41683#p41683</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Сетевые принтеры на удаленной машине]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41572#p41572</link>
			<description><![CDATA[<p>Можно ли скриптом получить список сетевых принтеров, объявленных в АD, на <strong>удаленной машине</strong> в определенном OU. Если можно примеры кода добавления/удаления таких принтеров. </p><p>Заранее благодарен ответившим.</p>]]></description>
			<author><![CDATA[null@example.com (serg)]]></author>
			<pubDate>Sat, 13 Nov 2010 09:52:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41572#p41572</guid>
		</item>
	</channel>
</rss>
