<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: Счетчик печати]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=2628</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2628&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: Счетчик печати».]]></description>
		<lastBuildDate>Sat, 17 Jan 2009 03:29:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18180#p18180</link>
			<description><![CDATA[<p>Нет, конечно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />, не стоит.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 17 Jan 2009 03:29:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18180#p18180</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18167#p18167</link>
			<description><![CDATA[<p>А в свойствах сервера печати галка стоит?<br />В дополнительных параметрах, &quot;Вести журнал сообщений очереди печати&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (RootAdmin)]]></author>
			<pubDate>Fri, 16 Jan 2009 13:18:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18167#p18167</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18151#p18151</link>
			<description><![CDATA[<p><strong>RootAdmin</strong>, спасибо, погляжу.</p><p>Такой вопрос, ответа на который не знаю: как добиться того, чтобы в журнал событий попадали события печати? У меня пусто, запрос<br /></p><div class="codebox"><pre><code>SELECT * FROM Win32_NTLogEvent WHERE Logfile=&#039;System&#039; AND EventType=3 AND SourceName=&#039;Print&#039; AND EventCode=10</code></pre></div><p>возвращает пустую коллекцию.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 16 Jan 2009 09:20:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18151#p18151</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18149#p18149</link>
			<description><![CDATA[<p>Яволь. Работает уже с полгода, нареканий особых нет. Для ~400 машин опрос занимает часа 2-3 (каналы очень медленные), и много времени тратится на попытки установить соединение с недоступной машинкой. При каждом обращении забирает только еще не полученные данные, трафик экономит.<br /></p><div class="codebox"><pre><code>&#039;  aradionov@sbroiler.ru
&#039; Серверный скрипт - сбор статистики по принтерам
&#039; Version 1.1c
&#039; +В этой версии поддерживаются транзакции и прибиты лишние сообщения в лог.

&#039;Структура
&#039;Таблица MashineName:
&#039;    Индекс для связи с LogTask
&#039;    Name (Varchar:XX)
&#039;    LastMessageTime(DataTime)
&#039;    ErrCode(int)
&#039;    
&#039;Таблица LogTask
&#039;    MashineName (VarChar:XX)
&#039;    TimeTask (datatime)
&#039;    PrnName(VarChar:XX)
&#039;    UserName
&#039;    NameTask
&#039;    SumPages
&#039;
&#039;

Const ADS_SCOPE_SUBTREE = 5 

&#039;Под файловую систему
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) 

&#039;Под AD
Set objConnection = CreateObject(&quot;ADODB.Connection&quot;) 
Set objCommand = CreateObject(&quot;ADODB.Command&quot;) 
objConnection.Provider = &quot;ADsDSOObject&quot; 
objConnection.Open &quot;Active Directory Provider&quot; 
Set objCommand.ActiveConnection = objConnection 

&#039;Для SQLя
Dim cn
Dim rst
Set cn=CreateObject(&quot;ADODB.Connection&quot;)
Set rst=CreateObject(&quot;ADODB.Recordset&quot;)
&#039;cn.open &quot;uid=DOMAIN\admin;pwd=**********; driver={SQL Server}; server=DBSERVER2\MNG; database=SpoolLog&quot;
cn.open &quot;driver={SQL Server}; server=DBSERVER2\MNG; trusted_connection=yes; database=SpoolLog&quot;
&#039;Проверим статус соединения.
If cn.State=1 Then 
&#039;Msgbox &quot;Connected&quot; 
else 
Msgbox &quot;Ошибка, не подключен SQL&quot; 
End If 

&#039;************* Зона отладки


&#039; wscript.echo Cstr(FSO.GetParentFolderName(www))
&#039; wscript.echo Cstr(GlobDateStart)
&#039; wscript.echo Cstr(FormatDateTime(Now()-30,2))
LogToFile(&quot;Ghbdtn!&quot;)
&#039;wscript.echo(DateSerial(2008,01,01))
&#039;Wscript.Echo (&quot;INSERT INTO LogTask (MashineName, TimeTask, PrnName,UserName,NameTask,SumPages) VALUES (  &#039;&quot; &amp; ADS_SCOPE_SUBTREE &amp;&quot; &#039; ,&#039;&quot; &amp; WM &amp;&quot; &#039; ,    &#039;&quot; &amp; 888 &amp;&quot; &#039; ,&#039;&quot; &amp; Cstr(strowner) &amp;&quot; &#039; ,&#039;&quot; &amp; Cstr(StrDokName) &amp;&quot; &#039; , &#039; &quot; &amp; Cint(intpages) &amp; &quot; &#039; )&quot;)
&#039;**************

&#039;Откроем чтение данных из AD
        objCommand.Properties(&quot;Page Size&quot;) = 100 
        objCommand.Properties(&quot;Searchscope&quot;) = ADS_SCOPE_SUBTREE 
        objCommand.CommandText = _ 
            &quot;SELECT Name FROM &quot; _ 
                &amp; &quot;&#039;LDAP://dc=DOMAIN,dc=ru&#039; WHERE &quot; _ 
                    &amp; &quot;objectCategory=&#039;computer&#039;&quot; 
         
        Set objRecordSet = objCommand.Execute  &#039;Все - в набор записей
        objRecordSet.MoveFirst &#039;На первую запись
&#039;Объект objRecordSet содержит теперь список машинок из домена.
&#039;Можно идти прямо по нему и читать логи с машинок. Подключились - если подключиться не удалось - проверили есть ли машинка в таблице MashineName
&#039; Если нету - создали, записали код ошибки.
&#039; если нет ошибок подключения - прочитали лог. Открыли транзакцию в SQL - записали, и тут же, не выходя из транзакции
&#039; нашли машинку в таблице MashineName. Если там ее нет - добавили. И записали в поле LastMessageTime дататайм последнего события.



&#039;Для начала надо запустить обработку по запсьно списка из AD

&#039;Выполняем пока не кончатся.
    Do Until objRecordSet.EOF &#039;Выполняем пока не кончатся.
        &#039;wscript.echo(&quot;Значение &quot;+objRecordSet.Fields(&quot;Name&quot;).Value)
&#039;Проверяем - есть ли машинка в базе.
rst.open &quot;SELECT Name,LastMessageTime FROM MashineName Where Name=&#039;&quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot;&#039;&quot;, cn
&#039;Объект Rst надо проверить. Если записей БОЛЬШЕ одной - то косяк, задвоено. Если одна - нормально, если не одной - тоже, создадим.
If Rst.EOF then
    &#039;Создаем. При этом - пишем в таблицу дататайм последнего забранного - скажем шестнадцать дней ранее.
    LogToFile(&quot;Машинка &quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot; не найдена в базе, добавляю&quot;)
    cn.Execute &quot;INSERT INTO MashineName (Name,LastMessageTime, ErrCode) VALUES ( &#039;&quot; _
    &amp; objRecordSet.Fields(&quot;Name&quot;).Value &amp;&quot;&#039;,CONVERT(DATETIME,&#039;&quot;&amp; FormatDateTime(Now()-32,0) &amp; &quot;&#039;,104),&#039; &quot; &amp; 0 &amp; &quot; &#039; )&quot;
End If
    Rst.Close

    rst.open &quot;SELECT Name,LastMessageTime FROM MashineName Where Name=&#039;&quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot;&#039;&quot;, cn
    &#039;wscript.echo(&quot;Запись есть для: &quot;+objRecordSet.Fields(&quot;Name&quot;).Value)
    LTimeRec=Cdate(rst.fields(1))
    Rst.Close

&#039;    LogToFile(&quot;Время последней записи для машинки &quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot; равно &quot;&amp;LTimeRec)    

&#039;Теперь запись точно есть
&#039;Можно отправляться в процедуру и заполнять таблицу задач используя в качестве параметров запроса 
&#039;в качестве даты начала  - дату из запроса Sql а в качестве последней даты - Now

&#039;If objRecordSet.Fields(&quot;Name&quot;).Value= &quot;EXCH&quot; or objRecordSet.Fields(&quot;Name&quot;).Value= &quot;TERMINAL2&quot; then
If DateDiff(&quot;h&quot;,LTimeRec,Now())&gt;8 then 
LogToFile(&quot;Последнее событие для : &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; Было более &quot;&amp;Cstr(  DateDiff(&quot;h&quot;,LTimeRec,Now())  )&amp;&quot; часов назад, записано: &quot;&amp;LTimeRec  )
 CheckSpoolLog()
Else
LogToFile(&quot;Для : &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; Было обработано &quot;&amp;Cstr(  DateDiff(&quot;h&quot;,LTimeRec,Now())  )&amp;&quot; часов назад, записано: &quot;&amp; LTimeRec)
End If


        objRecordSet.MoveNext 
    Loop 


&#039;rst.open &quot;SELECT Name,LastMessageTime FROM MashineName&quot;, cn

&#039;Wscript.echo(&quot;Добили!!! : &quot;+Cstr(WScript.ScriptFullName)) 
LogToFile(&quot;Скрипт работу закончил в &quot;&amp;Cstr(Now())  )








Sub CheckSpoolLog

&#039;Wscript.echo(&quot;Зашел в процедуру &quot;)
&#039;&#039;

&#039;Обработка ошибок - внутренняя
    on error resume next

&#039;Получим датувремя последнего сообщения, объект из контекста получать не будем - вдруг закрыт. Подключимся и запросим, обработку задваивания не делаем
    rst.open &quot;SELECT Name,CONVERT(nvarchar(20), LastMessageTime, 120) AS Expr1, Flag FROM MashineName Where Name=&#039;&quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot;&#039;&quot;, cn


&#039; Подключаемся по WMI, отправляем запрос
    Set objWMI = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; RTrim(rst.fields(0)) &amp; &quot;\root\cimv2&quot;)
    Set objCollection = objWMI.ExecQuery(&quot;SELECT * FROM Win32_NTLogEvent WHERE Logfile=&#039;System&#039; &quot; &amp; _
        &quot;AND EventType=3 AND SourceName=&#039;Print&#039; AND EventCode=10 and TimeWritten &gt;= &#039;&quot; _ 
        &amp; Cdate(rst.fields(1)) &amp; &quot;&#039; and TimeWritten &lt; &#039;&quot; &amp; Now() &amp; &quot;&#039;&quot;)

    &#039;Заодно присвоим последнее время переменной - для последующего сравнения
    TempTime=rst.fields(1)
&#039;    LogToFile( &quot;ВРЕМЯ из запроса присвоили переменной: &quot; &amp;Cstr(TempTime)  )
    &#039;Объект получили, rst закрываем
    rst.close

    &#039;Тэээк обработаем ошибку - и запишем
If Err.Number&gt;0 then 
    LogToFile( &quot;При получении из &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; ошибка&quot;&amp;Cstr(Err.Number))
    LogToFile(&quot;Данные для отладки: &quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot; Описание ошибки: &quot;&amp; Cstr(Err.Description)&amp;Cstr(strMSG))
    Err.Clear
Else
    lngNumEvents = objCollection.Count

    If lngNumEvents &gt; 0 Then
    LogToFile( &quot;Найдено событий штук: &quot; &amp; lngNumEvents &amp;&quot;Для машинки &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)  )

    &#039;**** Вот  тут начать транзакцию. *****
    cn.BeginTrans()
        For Each objItem In objCollection


    &#039;Обработаем строку, которая и является искомым объектом.
    strMsg = objItem.Message
    &#039;Нашли все нужные данные.
                intPosL = InStr(1, strMsg, &quot; владельца &quot;, vbTextCompare)
            If IntPosl=0 then intPosL = InStr(1, strMsg, &quot; owned by &quot;, vbTextCompare)
                intPosR = InStr(1, strMsg, &quot; напечатан&quot;, vbTextCompare)
            If IntPosR=0 then intPosR = InStr(1, strMsg, &quot; was printed&quot;, vbTextCompare)
            StrDokName= left(strMsg,intPosl-1)
                strOwner = Mid(strMsg, intPosL + 11, intPosR - intPosL - 10)

                intPosL = InStrRev(strMsg, &quot;:&quot;)
            If IsNumeric(Mid(strMsg, intPosL + 2)) then
                intPages = CInt(Mid(strMsg, intPosL + 2))
            Else
                IntPages = 1
            End If
            intPosL = 0
            intPosR = 0
            intPosL = InStrRev(strMsg, &quot;напечатан на &quot;)
            If IntPosl=0 then intPosL = InStr(1, strMsg, &quot;s printed on&quot;, vbTextCompare)
            intPosR = InStr(intPosL,strMsg, &quot; через порт &quot;, vbTextCompare)
            If IntPosR=0 then intPosR = InStr(IntPosl,strMsg, &quot; via port &quot;, vbTextCompare)


            PrnName= Trim(Mid(strMsg, intPosL + 13, intPosR - intPosL - 12))
    
    &#039;Здесь сваяем ИНСЕРТ, который будетдобавлять все полученное тяжким запросом в скуль
    &#039;Таблица LogTask
    &#039;    MashineName (VarChar:20)
    &#039;    TimeTask (datatime)
    &#039;    PrnName(VarChar:50)
    &#039;    UserName(VarChar:16)
    &#039;    NameTask(VarChar:200)
    &#039;    SumPages
    &#039;
    &#039;Прверим ошибки, если что - в лог.
    If Err.Number&gt;0 then LogToFile( &quot;Для машинки &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; в цикле ошибка, строка &quot; &amp;Cstr(StrMsg)&amp;&quot; ошибка&quot;&amp;Cstr(Err.Number))&amp;&quot; &quot;&amp;IntPosl&amp;&quot;  &quot;&amp;IntPosr
        &#039; Проверим, есть ли в StrDokName апострофы и заэкранируем
        StrDokName=Replace(StrDokName, &quot;&#039;&quot;, &quot;/&#039;&quot;)
        cn.Execute &quot;INSERT INTO LogTask (MashineName,TimeTask,PrnName,UserName,NameTask,SumPages) VALUES&quot; _
        &amp;&quot;(&#039;&quot; &amp; objRecordSet.Fields(&quot;Name&quot;).Value &amp;&quot;&#039;,CONVERT(DATETIME,&#039;&quot;&amp; FormatDateTime(WMIDateToString(objItem.TimeWritten) )&amp;&quot;&#039;,104),&#039;&quot; _
        &amp; Left(PrnName,50) &amp;&quot; &#039;,&#039;&quot; &amp; Cstr(strowner) &amp;&quot;&#039;,&#039;&quot; &amp;Left(StrDokName,200)&amp;&quot;&#039;,&#039;&quot; &amp; Cint(intpages) &amp; &quot;&#039;)&quot;
        
    &#039;А вто тут - отберем самое пследнее время события полученного. Методом пузырька.
    &#039;LogToFile( &quot;Время объекта: &quot; &amp; WMIDateToString(objItem.TimeWritten) &amp;&quot; Время сравнения &quot; &amp;TempDate)
        If DateDiff(&quot;s&quot;, TempDate,WMIDateToString(objItem.TimeWritten))&gt;0 then
        LogToFile( &quot;Сравним время &quot; &amp; Cstr(  DateDiff(&quot;s&quot;,TempDate,WMIDateToString(objItem.TimeWritten))  )   )
         TempDate=WMIDateToString(objItem.TimeWritten)
        LogToFile( &quot;Теперь: &quot; &amp; Cstr( TempDate)     )
        End If

        Next

        &#039;Обработаем ошибки. Если возникли - тупо не закрываем транзакцию
        If Err.Number&gt;0 then 
            LogToFile( &quot;Для машинки по выходу из цикла ошибка &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; ошибка&quot;&amp;Cstr(Err.Number))
            LogToFile(&quot;Данные для отладки: &quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot; Описание ошибки&quot;&amp; Cstr(Err.Description)&amp;Cstr(strMSG))
        &#039;***** Вот тут отменить транзакцию
            cn.RollbackTrans
            cn.Execute &quot;UPDATE MashineName SET ErrCode= &#039; &quot; &amp; Err.Number &amp; &quot; &#039; WHERE Name=&#039;&quot; &amp; objRecordSet.Fields(&quot;Name&quot;).Value &amp; &quot;&#039;&quot;
            Err.Clear
        Else
            LogToFile( &quot;Машинка &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; успешно обработана, Время последнего: &quot;&amp;Cstr(TempTime))
&#039;            TestQuery(&quot;Вход в успешную обработку, запрос&quot;)
            cn.Execute &quot;UPDATE MashineName SET LastMessageTime= CONVERT(DATETIME,&#039;&quot;&amp; _
            FormatDateTime(TempDate) &amp;&quot;&#039;,104) WHERE Name=&#039;&quot; &amp; objRecordSet.Fields(&quot;Name&quot;).Value &amp; &quot;&#039;&quot;
        &#039;***** Вот тут закрыть транзакцию, обновив датутайм в таблице MashineName
        cn.CommitTrans
&#039;            TestQuery(&quot;Выход успешной обработки, запрос&quot;)
        End If

    Else
    
            LogToFile( &quot;Для машинки &quot; &amp;Cstr(objRecordSet.Fields(&quot;Name&quot;).Value)&amp;&quot; событий нет&quot;)
        
    End If
End If


&#039;Обработка ошибок - OFF
    On Error GoTo 0
End Sub


Function WMIDateToString(dtmDate)
&#039;возвращает дататайм в нормальном виде, не в WMI
WMIDateToString = (Mid(dtmDate, 7, 2) &amp; &quot;-&quot; &amp; _
                  Mid(dtmDate, 5, 2) &amp; &quot;-&quot; &amp; _
                  Left(dtmDate, 4) &amp; &quot; &quot; &amp; _
                  Mid(dtmDate, 9, 2) &amp; &quot;:&quot; &amp; _
                  Mid(dtmDate, 11, 2) &amp; &quot;:&quot; &amp; _
                  Mid(dtmDate, 13, 2))
End Function


Function LogToFile(TextLog)
&#039;Тупо пишет строку в файл лога, в основном для отладки
    LogPath=FSO.GetParentFolderName(WScript.ScriptFullName)&amp;&quot;\&quot;&amp;WScript.ScriptName&amp;&quot;.log&quot;
Set TextStream = FSO.OpenTextFile(LogPath,8,True)
TextStream.WriteLine(Cstr(Now())&amp;Chr(09)&amp;TextLog)
TextStream.Close
End Function


Function TestQuery(Text)

    rst.open &quot;SELECT Name,LastMessageTime FROM MashineName Where Name=&#039;&quot;&amp;objRecordSet.Fields(&quot;Name&quot;).Value&amp;&quot;&#039;&quot;, cn
Call LogToFile(Text&amp;&quot;   &quot;&amp;rst.fields(0)&amp;&quot; равно &quot;&amp;&quot;  &quot;&amp;rst.fields(1))    
        Rst.Close

End function</code></pre></div><p>Написано для MS SQL. В строке ниже указывается сервер и имя базы. Вариант работает с доменной авторизацией в базу, если авторизация внутренняя, раскомментировать <br /></p><div class="codebox"><pre><code>&#039;cn.open &quot;uid=DOMAIN\admin;pwd=**********; driver={SQL Server}; server=DBSERVER2\MNG; database=SpoolLog&quot;</code></pre></div><p>исправить и закомментировать следующую.</p><p>В строке <br /></p><div class="codebox"><pre><code>&amp; &quot;&#039;LDAP://dc=DOMAIN,dc=ru&#039; WHERE &quot; _</code></pre></div><p>правим домен под свой.</p><p>В общем все просто, под англоязычные рабочие станции разбор строки заточен.<br />Есть еще скриптик, который данные из SQL тащит в EXCEL<br /></p><div class="codebox"><pre><code>&#039;  aradionov@sbroiler.ru
&#039; Пользовательский генератор отчета статистики принтеров.
&#039; Version 0.90a

&#039;Структура
&#039;Таблица MashineName:
&#039;    Индекс для связи с LogTask
&#039;    Name (text:12)
&#039;    LastMessageTime(DataTime)
&#039;    ErrCode(int)
&#039;    
&#039;Таблица LogTask
&#039;    MashineName (text:12)
&#039;    TimeTask (datatime)
&#039;    UserName
&#039;    NameTask
&#039;    SumPages
&#039;
&#039;


Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;) 

&#039;Для Excel



&#039;Для SQLя
Dim cn
Dim rst
Set cn=CreateObject(&quot;ADODB.Connection&quot;)
Set rst=CreateObject(&quot;ADODB.Recordset&quot;)
&#039;cn.open &quot;uid=DOMAIN\admin;pwd=; driver={SQL Server}; server=DBSERVER2\MNG; database=SpoolLog&quot;
cn.open &quot;driver={SQL Server}; server=DBSERVER2\MNG; trusted_connection=yes; database=SpoolLog&quot;
&#039;Проверим статус соединения.
If cn.State=1 Then 
&#039;Msgbox &quot;Connected&quot; 
else 
Msgbox &quot;Ошибка, не подключен SQL&quot; 
End If 


x = 1

&#039;Тут прверим - есть ли файл Экселя, если есть - откроем, нет - создадим-заполним.
If FSO.FileExists(Left(WScript.ScriptFullName,len(WScript.ScriptFullName)-len(WScript.ScriptName))&amp;&quot;Отчет.xls&quot;) then 
&#039;Wscript.echo(&quot;Док уже есть!: &quot;+Cstr(WScript.ScriptFullName)) 
&#039;Надо его открыть!
        Set objExcel = CreateObject(&quot;Excel.Application&quot;) 
        objExcel.Visible = True 
Set objWorkbook = objExcel.Workbooks.Open(Left(WScript.ScriptFullName,len(WScript.ScriptFullName)-len(WScript.ScriptName))&amp;&quot;Отчет.xls&quot;)
&#039;Получим из открытого дока последнюю строку с именем машинки.

x=x+1 &#039;установим первую строку с именем машинки
    Do Until objExcel.Cells(x, 1).Value =&quot;&quot;
     x=x+1
    Loop     
    Last_Row=x
    &#039;    Wscript.echo(&quot;Последняя строка: &quot;+Cstr(x))
    &#039;И строку последнюю данных найдем:
    x=ObjExcel.Cells(1,1).SpecialCells(11).Row +1
Else
&#039;Файла с отчетом нет, создадим запрос и заполним.


        Set objExcel = CreateObject(&quot;Excel.Application&quot;) 
         
        objExcel.Visible = True 
         ObjExcel.SheetsInNewWorkbook = 1
        Set objWorkbook = objExcel.Workbooks.add
        objWorkbook.Sheets(1).name = &quot;Пользователи&quot;


        Set objRange = objExcel.Range(&quot;A1&quot;)
        objRange.Activate
        Set objRange = objExcel.ActiveCell.EntireColumn
        objRange.Autofit()

        objExcel.Cells(x, 1).Value = &quot;Пользователь&quot; 
        objExcel.Cells(x, 2).Value = &quot;Заданий&quot; 
        objExcel.Cells(x, 3).Value = &quot;Страниц&quot; 
        x=x+1


&#039; Начнем с юзерей
rst.open &quot;SELECT UserName, SUM(SumPages) AS Pages, COUNT(NameTask) AS Ncount  FROM LogTask GROUP BY UserName order by username&quot;, cn 


Do until rst.eof

Set Butt=objExcel.ActiveSheet.OLEObjects.Add(&quot;Forms.CommandButton.1&quot;)
Butt.Left = 160 
Butt.Top = 12.75*(x-1)
Butt.Width = 126.75
Butt.Height = 12
&#039;Butt.Font.Name = &quot;Times New Roman&quot;
Butt.Object.FontSize = 6
&#039;Butt.Font.Bold = True

Butt.Name=Cstr(RSt.Fields(0).Value)&amp;&quot;_Butt&quot;
Butt.Object.Caption  = Cstr(RSt.Fields(0).Value)&amp;&quot; &quot;&amp;Cstr(RSt.Fields(2).Value)&amp;&quot; &quot;&amp;Cstr(RSt.Fields(1).Value)

Set xlmodule = objWorkbook.VBProject.VBComponents.Item(1)

       &#039; Add a macro to the module...
         strCode = _
          &quot;Private Sub CommandButton&quot;&amp;x-1&amp;&quot;_Click()&quot; &amp; vbCr &amp; _
          &quot;&#039;   msgbox &quot;&quot;Адрес Row и Column &quot;&quot;&amp;CStr(ActiveCell.Row)&amp;&quot;&quot; &quot;&quot;&amp;CStr(ActiveCell.Column)&quot; &amp; vbCr &amp; _
&quot;Dim cn&quot;&amp;vbCr &amp; _
&quot;Dim rst&quot;&amp;vbCr &amp; _
&quot;Set cn=CreateObject(&quot;&quot;ADODB.Connection&quot;&quot;) &quot;&amp;vbCr &amp; _
&quot;Set rst=CreateObject(&quot;&quot;ADODB.Recordset&quot;&quot;)&quot;&amp;vbCr &amp; _
&quot;cn.open &quot;&quot;driver={SQL Server}; server=DBSERVER2\MNG; trusted_connection=yes; database=SpoolLog&quot;&quot; &quot;&amp;vbCr &amp; _
&quot;&#039;Проверим статус соединения.&quot;&amp;vbCr &amp; _
&quot;If cn.State=1 Then &quot;&amp;vbCr &amp; _
&quot;&#039;Msgbox &quot;&quot;Connected&quot;&quot; &quot;&amp;vbCr &amp; _
&quot;else &quot;&amp;vbCr &amp; _
&quot;Msgbox &quot;&quot;Ошибка, не подключен SQL&quot;&quot; &quot;&amp;vbCr &amp; _
&quot;End If &quot;&amp;vbCr &amp; _
&quot;rst.open &quot;&quot;SELECT TimeTask,PrnName, NameTask, SumPages   FROM LogTask Where UserName=&#039;&quot;&amp;Trim(RSt.Fields(0).Value)&amp;&quot;&#039; order by TimeTask&quot;&quot;, cn &quot;&amp;vbCr &amp; _
&quot;Sheets.Add.Name=&quot;&quot;&quot;&amp;Cstr(RSt.Fields(0).Value)&amp;&quot;&quot;&quot;&quot;&amp;vbCr &amp; _
&quot;x=1&quot;&amp;vbCr &amp; _
&quot;    do until rst.eof&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 0).FormulaR1C1 = Cstr(RSt.Fields(0).Value)&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 1).FormulaR1C1 = Cstr(RSt.Fields(1).Value)&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 2).FormulaR1C1 = Cstr(RSt.Fields(2).Value)&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 3).FormulaR1C1 = Cstr(RSt.Fields(3).Value)&quot;&amp;vbCr &amp; _
&quot;            x = x + 1 &quot;&amp;vbCr &amp; _
&quot;        Rst.MoveNext &quot;&amp;vbCr &amp; _
&quot;    Loop &quot;&amp;vbCr &amp; _
&quot;Rst.close&quot;&amp;vbCr &amp; _
&quot;ActiveCell.Offset(x, 3).FormulaR1C1 = &quot;&quot;=SUM(R[-&quot;&quot;&amp;CStr(x)&amp;&quot;&quot;]C:R[-1]C)&quot;&quot;&quot;&amp;vbCr &amp; _
&quot;ActiveSheet.Columns(&quot;&quot;A:D&quot;&quot;).Select&quot;&amp;vbCr &amp; _
&quot;Selection.Columns.AutoFit&quot;&amp;vbCr &amp; _
 &quot;end sub&quot;
    xlmodule.CodeModule.AddFromString strCode

           
            objExcel.Cells(x, 1).Value = _
                Cstr(RSt.Fields(0).Value)
            objExcel.Cells(x, 2).Value = _
                Cstr(RSt.Fields(2).Value)
            objExcel.Cells(x, 3).Value = _
                Cstr(RSt.Fields(1).Value)
 x = x + 1 
        Rst.MoveNext 
    Loop 
Rst.close
&#039;Не прибиваем воркбук - он еще будет нужен. как объект


&#039;Заодно выведем принтеры:

        objWorkbook.Sheets.Add
        objWorkbook.Sheets(1).name = &quot;Принтеры&quot;
x=1 
        objExcel.Cells(x, 1).Value = &quot;Принтер&quot; 
        objExcel.Cells(x, 2).Value = &quot;Заданий&quot; 
        objExcel.Cells(x, 3).Value = &quot;Страниц&quot; 
        x=x+1
rst.open &quot;SELECT PrnName, COUNT(NameTask) AS Ncount, SUM(SumPages) AS Pages  FROM LogTask GROUP BY PRNName Order by PrnName&quot;, cn 
    do until rst.eof

Set Butt=objExcel.ActiveSheet.OLEObjects.Add(&quot;Forms.CommandButton.1&quot;)
Butt.Left = 180 
Butt.Top = 12.75*(x-1)
Butt.Width = 250
Butt.Height = 12.5
Butt.Object.FontSize = 6
Butt.Object.Caption  = Cstr(RSt.Fields(0).Value)&amp;&quot; &quot;&amp;Cstr(RSt.Fields(1).Value)&amp;&quot; &quot;&amp;Cstr(RSt.Fields(2).Value)

Set xlmodule = objWorkbook.VBProject.VBComponents.Item(&quot;Лист2&quot;)

       &#039; Add a macro to the module...
         strCode = _
          &quot;Private Sub CommandButton&quot;&amp;x-1&amp;&quot;_Click()&quot; &amp; vbCr &amp; _
          &quot;&#039;   msgbox &quot;&quot;Адрес Row и Column &quot;&quot;&amp;CStr(ActiveCell.Row)&amp;&quot;&quot; &quot;&quot;&amp;CStr(ActiveCell.Column)&quot; &amp; vbCr &amp; _
&quot;&#039;Пишем принтеры&quot;&amp;vbCr &amp; _
&quot;Dim cn&quot;&amp;vbCr &amp; _
&quot;Dim rst&quot;&amp;vbCr &amp; _
&quot;Set cn=CreateObject(&quot;&quot;ADODB.Connection&quot;&quot;) &quot;&amp;vbCr &amp; _
&quot;Set rst=CreateObject(&quot;&quot;ADODB.Recordset&quot;&quot;)&quot;&amp;vbCr &amp; _
&quot;cn.open &quot;&quot;driver={SQL Server}; server=DBSERVER2\MNG; trusted_connection=yes; database=SpoolLog&quot;&quot; &quot;&amp;vbCr &amp; _
&quot;&#039;Проверим статус соединения.&quot;&amp;vbCr &amp; _
&quot;If cn.State=1 Then &quot;&amp;vbCr &amp; _
&quot;&#039;Msgbox &quot;&quot;Connected&quot;&quot; &quot;&amp;vbCr &amp; _
&quot;else &quot;&amp;vbCr &amp; _
&quot;Msgbox &quot;&quot;Ошибка, не подключен SQL&quot;&quot; &quot;&amp;vbCr &amp; _
&quot;End If &quot;&amp;vbCr &amp; _
&quot;rst.open &quot;&quot;SELECT CONVERT(VarChar,TimeTask,20) as Time, UserName, NameTask, SumPages   FROM LogTask Where PrnName=&#039;&quot;&amp;Replace(RSt.Fields(0).Value,&quot;&quot;&quot;&quot;,&quot;&quot;&quot;&quot;&quot;&quot;)&amp;&quot;&#039; order by TimeTask&quot;&quot;, cn&quot;&amp;vbCr &amp; _
&quot;Sheets.Add.Name=&quot;&quot;&quot;&amp;Replace(Left(Cstr(RSt.Fields(0).Value),15),&quot;\&quot;,&quot;&quot;)&amp;&quot;&quot;&quot;&quot;&amp;vbCr &amp; _
&quot;x=1&quot;&amp;vbCr &amp; _
&quot;    do until rst.eof&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 0).FormulaR1C1 = Cstr(RSt.Fields(0).Value)&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 1).FormulaR1C1 = Cstr(RSt.Fields(1).Value)&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 2).FormulaR1C1 = Cstr(RSt.Fields(2).Value)&quot;&amp;vbCr &amp; _
&quot;            ActiveCell.Offset(x, 3).FormulaR1C1 = Cstr(RSt.Fields(3).Value)&quot;&amp;vbCr &amp; _
&quot;            x = x + 1 &quot;&amp;vbCr &amp; _
&quot;        Rst.MoveNext &quot;&amp;vbCr &amp; _
&quot;    Loop &quot;&amp;vbCr &amp; _
&quot;Rst.close&quot;&amp;vbCr &amp; _
&quot;ActiveCell.Offset(x, 3).FormulaR1C1 = &quot;&quot;=SUM(R[-&quot;&quot;&amp;CStr(x)&amp;&quot;&quot;]C:R[-1]C)&quot;&quot;&quot;&amp;vbCr &amp; _
&quot;ActiveSheet.Columns(&quot;&quot;A:D&quot;&quot;).Select&quot;&amp;vbCr &amp; _
&quot;Selection.Columns.AutoFit&quot;&amp;vbCr &amp; _
&quot;end sub&quot;
    xlmodule.CodeModule.AddFromString strCode

            objExcel.Cells(x, 1).Value = _
                Cstr(RSt.Fields(0).Value)
            objExcel.Cells(x, 2).Value = _
                Cstr(RSt.Fields(1).Value)
            objExcel.Cells(x, 3).Value = _
                Cstr(RSt.Fields(2).Value)
            x = x + 1 

        Rst.MoveNext 
    Loop 
Rst.close


 
        Set objRange = objExcel.Range(&quot;A1&quot;)
        objRange.Activate
        Set objRange = objExcel.ActiveCell.EntireColumn
        objRange.Autofit()

        Set objRange = objExcel.Range(&quot;A6&quot;)
        
        objRange.Font.Bold = TRUE
        Set objRange2 = objExcel.Range(&quot;A1&quot;)
        objRange2.Font.Bold = TRUE
        objRange2.Font.ColorIndex = 3
        

        &#039;Wscript.echo(&quot;Адрес ячейки: &quot;+Cstr(ObjExcel.ActiveCell.Row))
        &#039;Получим адрес последней ячейки:
        Last_Row=ObjExcel.Cells(1,1).SpecialCells(11).Row
End If







&#039;Теперь пройдем циклом по машинкам - попробуем почитать у них стстояние.
 x = x + 10 

x=x+5



For i=7 to Last_row

&#039;CheckSpoolLog(objExcel.Cells(i, 1).Value)
    If Err.Number then 
        LogToExcel( &quot;Ошибка при переборе I=&quot; &amp;Cstr(i)&amp;&quot; ошибка&quot;&amp;Cstr(Err.Number))
        Err.Clear
    End If
&#039;If objExcel.Cells(i, 1).Value = &quot;PTG-SERVER1&quot; then CheckSpoolLog()
&#039;If objExcel.Cells(i, 1).Value = &quot;TERMINAL1&quot; then CheckSpoolLog()


Next



objExcel.DisplayAlerts = false
&#039;objExcel.Workbooks(1).saveas(Left(WScript.ScriptFullName,len(WScript.ScriptFullName)-len(WScript.ScriptName))&amp;&quot;Отчет.xls&quot;) &#039;Save the workbook, not excel file 
&#039;objExcel.Workbooks(1).Close &#039;Close the workbook then finally quit excel 
&#039;objExcel.Quit 










Sub CheckSpoolLog(Name)
on error resume next
&#039;Wscript.echo(&quot;Зашел в процедуру &quot;+Cstr(objExcel.Cells(i, 1).Value))
&#039;&#039;  Wscript.Echo &quot;Отладка1Строка: &quot; &amp; strowner &amp; Cstr(x)
&#039;&#039;  Wscript.Echo &quot;Отладка2Строка: &quot; &amp; Cstr(x)


lngNumEvents = objCollection.Count



If Err.Number&gt;0 then 
    LogToExcel( &quot;Для машинки в цикле ошибка&quot; &amp;Cstr(objExcel.Cells(i, 1).Value)&amp;&quot; ошибка&quot;&amp;Cstr(Err.Number))
    Err.Clear
End If



If Err.Number&gt;0 then 
    LogToExcel( &quot;Для машинки по выходу из цикла ошибка&quot; &amp;Cstr(objExcel.Cells(i, 1).Value)&amp;&quot; ошибка&quot;&amp;Cstr(Err.Number))
    objExcel.Cells(i, 6).Value =&quot;Err&quot;
    objExcel.Cells(i, 7).Value =err.number
    Err.Clear
Else
    objExcel.Cells(i, 6).Value =&quot;OK&quot;
    objExcel.Cells(i, 7).Value =err.number
End If



End Sub


Function WMIDateToString(dtmDate)

WMIDateToString = (Mid(dtmDate, 5, 2) &amp; &quot;/&quot; &amp; _
                  Mid(dtmDate, 7, 2) &amp; &quot;/&quot; &amp; _
                  Left(dtmDate, 4) &amp; &quot; &quot; &amp; _
                  Mid(dtmDate, 9, 2) &amp; &quot;:&quot; &amp; _
                  Mid(dtmDate, 11, 2) &amp; &quot;:&quot; &amp; _
                  Mid(dtmDate, 13, 2))
End Function


Function LogToExcel(TextLog)
    objExcel.Cells(x, 7).Value = TextLog
    x=x+1
End Function</code></pre></div><p>Но это так, для отладки. Хотя пользоваться можно, только дописать в запросы ограничение по датам для выборки, а то все выгружает.</p>]]></description>
			<author><![CDATA[null@example.com (RootAdmin)]]></author>
			<pubDate>Fri, 16 Jan 2009 08:59:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18149#p18149</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18114#p18114</link>
			<description><![CDATA[<p><strong>RootAdmin</strong>, <em>[голосом Якубовича]</em> код — в студию.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 14 Jan 2009 14:05:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18114#p18114</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=18110#p18110</link>
			<description><![CDATA[<p>Довольно сложный путь. Я делал проще - через WMI но и задача была чуть другая, статистика всех машин и всех принтеров предприятия. И всех распечатаных задач ессно. Данные писал в SQL.</p>]]></description>
			<author><![CDATA[null@example.com (RootAdmin)]]></author>
			<pubDate>Wed, 14 Jan 2009 11:23:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=18110#p18110</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17664#p17664</link>
			<description><![CDATA[<p><strong>alexii</strong><br />Ага, понятно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 29 Dec 2008 12:24:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17664#p17664</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17663#p17663</link>
			<description><![CDATA[<p><strong>The gray Cardinal</strong>, <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />:<br /><a href="http://www.script-coding.com/WMI.html">http://www.script-coding.com/WMI.html</a><br /></p><div class="quotebox"><blockquote><p>Ещё одно важное замечание: по умолчанию не все стандартные классы устанавливаются в репозиторий CIM. Для использования стандартных классов постоянных потребителей (например, LogFileEventConsumer), скорее всего, придётся сначала установить их. MOF-файлы с описанием этих классов находятся в каталоге %SystemRoot%\system32\Wbem\. Скомпилировать эти файлы можно с помощью утилиты mofcomp.exe. Пример команды компиляции:<br /></p><div class="codebox"><pre><code>mofcomp -N:root\cimv2 %SystemRoot%\system32\Wbem\Wbemcons.mof</code></pre></div></blockquote></div><p>Без использования «-N:root\cimv2» он будет скомпилирован в стандартное для него пространство «root\subscription», соответственно, код скрипта изменится.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 29 Dec 2008 11:56:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17663#p17663</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17661#p17661</link>
			<description><![CDATA[<p>Вариант на AutoHotkey <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /><a href="http://www.autohotkey.com/forum/topic36140.html">http://www.autohotkey.com/forum/topic36140.html</a></p>]]></description>
			<author><![CDATA[null@example.com (Archangel)]]></author>
			<pubDate>Mon, 29 Dec 2008 09:05:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17661#p17661</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17659#p17659</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Это, скорее, пример, нежели готовый скрипт. После отправки чего-либо на печать, смотрите «C:\MonitoringPrintJob.txt».</p></blockquote></div><p><span class="postimg"><img src="http://img367.imageshack.us/img367/8484/erreo1.jpg" alt="http://img367.imageshack.us/img367/8484/erreo1.jpg" /></span></p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 29 Dec 2008 08:14:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17659#p17659</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17656#p17656</link>
			<description><![CDATA[<p>Спасибо.&nbsp; <br />Ясно. <img src="//forum.script-coding.com/img/smilies/cool.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Archangel)]]></author>
			<pubDate>Mon, 29 Dec 2008 06:37:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17656#p17656</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17652#p17652</link>
			<description><![CDATA[<p>Если именно «сколько будет» — то, по-моему — никак. Я видел скрипт, где отслеживалось, сколько «было» послано на печать (через событие __InstanceCreationEvent для класса Win32_PrintJob). Естественно, если драйвер считает страницы иначе, нежели оригинальное приложение — результат будет неверным (я с подобным сталкивался):<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objSWbemServicesEx
Dim objFilter
Dim objConsumer
Dim objBinding

Set objSWbemServicesEx = GetObject(&quot;winmgmts:\\.\Root\CIMv2&quot;)

Set objFilter = objSWbemServicesEx.Get(&quot;__EventFilter&quot;).SpawnInstance_()
With objFilter
    .Name = &quot;Monitoring PrintJob&quot;
    .QueryLanguage = &quot;WQL&quot;
    .Query = &quot;SELECT * FROM __InstanceCreationEvent WITHIN 5 &quot; &amp; _
        &quot;WHERE TargetInstance ISA &#039;Win32_PrintJob&#039;&quot;
        
    .Put_
End With

Set objConsumer = objSWbemServicesEx.Get(&quot;LogFileEventConsumer&quot;).SpawnInstance_()
With objConsumer
    .Name = &quot;Monitoring PrintJob Log&quot;
    .FileName = &quot;C:\MonitoringPrintJob.txt&quot;
    .Text = &quot;Name: %TargetInstance.Name%, Document: %TargetInstance.Document%, Owner: %TargetInstance.Owner%, TotalPages: %TargetInstance.TotalPages%, StartTime: : %TargetInstance.StartTime%, PagesPrinted: : %TargetInstance.PagesPrinted%&quot;
    .Put_
End With

Set objFilter = objSWbemServicesEx.Get(&quot;__EventFilter.Name=&#039;Monitoring PrintJob&#039;&quot;)
Set objConsumer = objSWbemServicesEx.Get(&quot;LogFileEventConsumer.Name=&#039;Monitoring PrintJob Log&#039;&quot;)
Set objBinding = objSWbemServicesEx.Get(&quot;__FilterToConsumerBinding&quot;).SpawnInstance_()
With objBinding
    .Filter = objFilter.Path_
    .Consumer = objConsumer.Path_
    .Put_
End With

Set objSWbemServicesEx = Nothing

WScript.Quit 0</code></pre></div><p>Это, скорее, пример, нежели готовый скрипт. После отправки чего-либо на печать, смотрите «C:\MonitoringPrintJob.txt».</p><p><em>Замечание</em>: после применения скрипта будьте готовы к «ручной» уборке с помощью WMI CIM Studio.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 29 Dec 2008 04:25:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17652#p17652</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: Счетчик печати]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17650#p17650</link>
			<description><![CDATA[<p>Мне нужно скриптом, на локальном компьютере, определить сколько страниц будет распечатанно при печати на принтере <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />...</p><p>Без использования сторонних программ и т.д.<br />Язык провольный <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />, но желательно VBScript <img src="//forum.script-coding.com/img/smilies/tongue.png" width="15" height="15" />...</p>]]></description>
			<author><![CDATA[null@example.com (Archangel)]]></author>
			<pubDate>Sun, 28 Dec 2008 17:43:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17650#p17650</guid>
		</item>
	</channel>
</rss>
