Служба Active Directory (AD) привнесла абсолютно новый подход к написанию сценариев. В Windows NT 4.0 или NT 3.51 разработчики сценариев оперировали доменами. На уровне доменов придумывались способы запрашивать информацию о группах, членстве в группах, отдельных пользователях и компьютерах. С переходом на AD множество доменов организации преобразовалось в один или несколько доменов. Отделения или подразделения, которые были доменами, теперь стали организационными подразделениями (OU). Разработчики сценариев столкнулись с проблемой сбора информации на уровне домена, уровне OU и уровнях поддеревьев OU.
Некоторые инструменты, включая сценарий Search.vbs из Windows 2000 Support Tools, могут помочь разработчику сценариев взять под контроль информацию из OU. Я написал сценарий, OS-SP-Report.bat, который использует Search.vbs, чтобы взять из нескольких OU информацию об операционных системах и пакетах обновлений. OS-SP-Report.bat можно изменить так, чтобы собирать информацию о пользователях, компьютерах или других объектах AD. Описание других инструментов AD для командной строки можно найти во врезке «Инструменты AD для разработчика сценариев».
OS-SP-Report.bat был создан с целью дать полный отчет об операционных системах и состоянии пакетов обновлений на компьютерах в нескольких нужных OU. В некоторых OU оказались неизвестные OS, видимо, из-за того, что администраторы создали учетные записи для компьютеров, но не установили соответствующие серверы или компьютеры, либо не включили системы в домен. Некоторые серверы и системы оказались так глубоко в дереве OU, что состояние их пакетов обновлений просто затерялось. Требовался отчет, который давал бы некоторую информацию об OU, чтобы потом можно было связаться с владельцем OU и привести в порядок процесс установки пакетов обновлений.
OS-SP-Report.bat опрашивает несколько OU на предмет информации об OS и SP и создает отчет в формате HTML, который можно поместить на административном web-сайте. При каждом запуске сценарий переименовывает предыдущий отчет, так что можно получить доступ к 11 предыдущим отчетам. Еще сценарий ведет лог-файл, по которому можно отследить изменения в предыдущих версиях отчета.
Синтаксис Search.vbs
В Листинге 1 показан пример базового синтаксиса Search.vbs, который использовался для того, чтобы найти все компьютеры с Windows 2000 Professional в следующих OU: ou=sales, ou=computers, dc=seattle, dc=yourcompany, dc=com. Ключ /S:subtree позволяет искать в нужном OU и его ветвях. Можно, наоборот, искать объекты только в пределах указанного OU, игнорируя ветви (/S:onelevel).
Если нужны компьютеры Windows 2000 Pro с установленным SP1, можно задействовать критерии фильтра, как в Листинге 2. Я использую в основном тот же синтаксис в OS-SP-Report.bat, чтобы найти системы с Windows Server 2003, Windows XP и Windows 2000 Server и соответствующими пакетами обновлений.
«Джентльменский набор» инструментов для сценариев
Сценарий OS-SP-Report.bat использует несколько удобных инструментов и методов. Команда Set /a позволяет производить в сценариях элементарные математические операции.
Часто в сценарии требуется «перепрыгнуть» через кусок кода. Это можно сделать с помощью инструкции GOTO. OS-SP-Report.bat проверяет конкретную операционную систему, и, если система не соответствует проверяемой, пропускает все проверки на пакеты обновлений в этой OS, как показано в Листинге 3. Инструкция GOTO также использовалась для того, чтобы пропустить код, относящийся к будущим пакетам обновлений.
Создание отчета в формате HTML - простой способ придать результату работы сценария более профессиональный вид. Вместо того чтобы отправлять отчет в файл .tsv, .csv или .txt, можно использовать таблицы HTML и получить отчет, который будет выглядеть должным образом.
Запуск сценария
Чтобы запустить OS-SP-Report.bat, просмотрите код в конце статьи (Листинг 5). Также понадобится установить Windows 2000 Support Tools с диска Windows 2000.
Потом следует создать файл OUTargets.txt, в котором в каждой строке будет указан один путь к AD-объекту. После пути нужно вставить символ табуляции, чтобы отделить путь от области поиска. Задайте область поиска как subtree или onelevel. Полученный файл должен выглядеть как в Примере 1.
Также потребуется задать местоположение входного файла OUTargets.txt, местоположение выходного HTML отчета и файла журнала и положение утилиты Search.vbs, как в коде Листинга 4. Кроме того, вы, скорее всего, захотите, чтобы планировщик задач автоматически запускал ваш сценарий.
На момент написания этой статьи самыми последними были XP SP1 и Windows 2000 SP3. По мере выпуска новых пакетов обновлений сценарию понадобятся дополнительный код и строки в отчете, чтобы отразить произошедшие изменения. Чтобы упростить этот процесс, я включил код, который ищет пакеты обновлений до шестого включительно. Сейчас сценарий просто пропускает этот код; чтобы его активировать, найдите комментарий во фрагменте B Листинга 3 и удалите или закомментируйте инструкцию GOTO после этой строки. В дальнейшем сценарий будет искать некоторые или все указанные пакеты обновлений.
OS-SP-Report.bat предоставляет хороший способ следить за операционными системами и их обновлениями в вашей организационной единице AD. Также в нем есть примеры, которые можно изменять по своему усмотрению и использовать в своих сценариях, чтобы запрашивать у AD ту информацию, которая будет нужна.
Инструменты AD для разработчика сценариев
Я стараюсь совершенствовать свои навыки написания сценариев на VBScript, но жизнь не стоит на месте, и мне регулярно приходится запрашивать у AD различную информацию. Microsoft предоставила несколько инструментов, которые существенно облегчают задачу разработчикам сценариев, и независимые разработчики тоже начинают обращаться к ним. С помощью этих инструментов можно сохранять данные AD и управлять ими, используя в сценариях те подходы, которым я вот уже четыре года обучаю читателей в своих статьях. В Таблице А представлены некоторые инструменты для командной строки, которые помогут сохранить или изменить информацию AD.
Пример 1
ou=sales,ou=computers,dc=seattle,dc=yourcompany,dc=com subtree ou=acctg,ou=computers,dc=seattle,dc=yourcompany,dc=com subtree ou=marketing,ou=computers,dc=seattle,dc=yourcompany,dc=com onelevel
Листинг 1: Синтаксис Search.vbs для поиска систем с Windows 2000 Pro
cscript C:SupportToolssearch.vbs "LDAP://ou=sales,ou=computers,dc=seattle,dc=yourcompany,dc=com" /S:subtree /Q /C:"&(ObjectCategory=computer)(operatingsystem=Windows 2000 Professional)В?
Листинг 2: Синтаксис Search.vbs для поиска систем с Windows 2000 Pro SP1
cscript C:SupportToolssearch.vbs "LDAP ou=sales,ou=computers,dc=seattle,dc=yourcompany,dc=com" /S:subtree /Q /C:"&(ObjectCategory=computer)(operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 1)"
Листинг 3: Выдержка из OS-SP-Report.bat
SET Nosp=0 Начало фрагмента А for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)"^| find " objects."') do Set totSPnum=%%j If '%totSPnum%'=='0' ECHO No W2K Pro nodes found >>"%PathToFiles% unninglog.txt"&ECHO. >>"%PathToFiles% unninglog.txt"&goto :XPpro Конец фрагмента А for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional) (operatingsystemservicepack=service pack 1)"^| find " objects."') do Set SP1num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP1num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional) (operatingsystemservicepack=service pack 2)"^| find " objects."') do Set SP2num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP2num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional) (operatingsystemservicepack=service pack 3)"^| find " objects."') do Set SP3num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP3num% Начало фрагмента В Начало комментария ::Код для SP6, SP5, и SP4 на данный момент пропущен. Конец комментария GOTO :W2Kskip Конец фрагмента B for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional) (operatingsystemservicepack=service pack 4)"^| find " objects."') do Set SP4num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP4num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional) (operatingsystemservicepack=service pack 5)"^| find " objects."') do Set SP5num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP5num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional) (operatingsystemservicepack=service pack 6)"^| find " objects."') do Set SP6num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP6num% :W2Kskip Set /a Nosp=%totSPnum%-%W2KRemainder%
Листинг 4: Код, устанавливающий путь к файлам, которые использует сценарий
Начало фрагмента А Начало комментария :: Настройте путь к файлу, содержащему пути к AD-объектам и область поиска в них. Конец комментария SET OUTargets=D:htmlStatsOUTargets.txt Начало комментария :: Настройте путь к папке, в которой хотите хранить выходные файлы. Конец комментария SET PathToFiles=D:htmlStats Начало комментария :: Настройте путь к файлу Search.vbs. Конец комментария SET PathToSearchUtil=C:SupportToolssearch.vbs Конец фрагмента А ECHO.>>"%PathToFiles% unninglog.txt" ECHO ************** %DATE% %TIME% ************************ >>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" if exist "%PathToFiles%ADoutputTemp.html" del "%PathToFiles%ADoutputTemp.html"
Листинг 5. OS-SP-Report.bat
@echo off @TITLE OS-SP-Report.bat Script :: Note: The code below is currently configured to support W2K Pro, XP Pro, W2K Server and 2003 Server with SP1, 2 or 3. :: Code has been created for SP4, 5 and 6 but has been commented out by skipping over that code. :: Just go into the script and move or remove the GOTO commands that move flow around these sections. :: Configure the path to the file that contains the ADSpath targets and scope info. SET OUTargets=D:htmlStatsOUTargets.txt :: Configure the folder path where you want to store the output files. SET PathToFiles=D:htmlStatsfinder2 :: Configure the path to the Search.vbs file SET PathToSearchUtil=C:SupportToolssearch.vbs ECHO.>>"%PathToFiles% unninglog.txt" ECHO ************** %DATE% %TIME% ************************>>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" if exist "%PathToFiles%ADoutputTemp.html" del "%PathToFiles%ADoutputTemp.html" :: ****************************************************** ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^O/S Service Pack Report^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^^^O/S Service Pack Report^^^
>>"%PathToFiles%ADoutputTemp.html" ECHO ^^Last Updated: %DATE% %TIME%^
>>"%PathToFiles%ADoutputTemp.html" :: ************************************************************** For /F "tokens=1,2 delims= " %%i in (%OUTargets%) do (set Target=%%i) & (set Scope=%%j) & (call :test) ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" If Exist "%PathToFiles%ADoutput9.html" Move /Y "%PathToFiles%ADoutput9.html" "%PathToFiles%ADoutput10.html" If Exist "%PathToFiles%ADoutput8.html" Move /Y "%PathToFiles%ADoutput8.html" "%PathToFiles%ADoutput9.html" If Exist "%PathToFiles%ADoutput7.html" Move /Y "%PathToFiles%ADoutput7.html" "%PathToFiles%ADoutput8.html" If Exist "%PathToFiles%ADoutput6.html" Move /Y "%PathToFiles%ADoutput6.html" "%PathToFiles%ADoutput7.html" If Exist "%PathToFiles%ADoutput5.html" Move /Y "%PathToFiles%ADoutput5.html" "%PathToFiles%ADoutput6.html" If Exist "%PathToFiles%ADoutput4.html" Move /Y "%PathToFiles%ADoutput4.html" "%PathToFiles%ADoutput5.html" If Exist "%PathToFiles%ADoutput3.html" Move /Y "%PathToFiles%ADoutput3.html" "%PathToFiles%ADoutput4.html" If Exist "%PathToFiles%ADoutput2.html" Move /Y "%PathToFiles%ADoutput2.html" "%PathToFiles%ADoutput3.html" If Exist "%PathToFiles%ADoutput1.html" Move /Y "%PathToFiles%ADoutput1.html" "%PathToFiles%ADoutput2.html" If Exist "%PathToFiles%ADoutput.html" Move /Y "%PathToFiles%ADoutput.html" "%PathToFiles%ADoutput1.html" Move /Y "%PathToFiles%ADoutputTemp.html" "%PathToFiles%ADoutput.html" ECHO run complete goto :EOF :test ECHO Search Target: %Target% >>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" ECHO Search scope: %Scope:onelevel=One level%>>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" SET Totalnum=0 for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer)"^| find " objects."') do Set Totalnum=%%j ECHO Total nodes in AD: %Totalnum% >>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" SET KnownOS=0 SET UnknownOS=0 Set W2KRemainder=0 SET totSPnum=0 SET SP1num=0 SET SP2num=0 SET SP3num=0 SET SP4num=0 SET SP5num=0 SET SP6num=0 SET Nosp=0 for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)"^| find " objects."') do Set totSPnum=%%j If '%totSPnum%'=='0' ECHO No W2K Pro nodes found >>"%PathToFiles% unninglog.txt"&ECHO. >>"%PathToFiles% unninglog.txt"&goto :XPpro for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 1)"^| find " objects."') do Set SP1num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP1num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 2)"^| find " objects."') do Set SP2num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP2num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 3)"^| find " objects."') do Set SP3num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP3num% :: ********* SP4-6 code currently skipped over ********* GOTO :W2Kskip for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 4)"^| find " objects."') do Set SP4num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP4num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 5)"^| find " objects."') do Set SP5num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP5num% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Professional)(operatingsystemservicepack=service pack 6)"^| find " objects."') do Set SP6num=%%j Set /A W2KRemainder=%W2KRemainder%+%SP6num% :W2Kskip Set /a Nosp=%totSPnum%-%W2KRemainder% ECHO W2K total nodes: %totSPnum% >>"%PathToFiles% unninglog.txt" ECHO *************************** >>"%PathToFiles% unninglog.txt" ECHO W2K no SP: %Nosp% >>"%PathToFiles% unninglog.txt" ECHO W2K SP1: %SP1num% >>"%PathToFiles% unninglog.txt" ECHO W2K SP2: %SP2num% >>"%PathToFiles% unninglog.txt" ECHO W2K SP3: %SP3num% >>"%PathToFiles% unninglog.txt" :: ********* SP4-6 code currently skipped over ********* GOTO :XPpro ECHO W2K SP4: %SP4num% >>"%PathToFiles% unninglog.txt" ECHO W2K SP5: %SP5num% >>"%PathToFiles% unninglog.txt" ECHO W2K SP6: %SP6num% >>"%PathToFiles% unninglog.txt" :XPpro ECHO.>>"%PathToFiles% unninglog.txt" SET XPRemainder=0 SET totSPXPnum=0 SET SP1XPnum=0 SET SP2XPnum=0 SET SP3XPnum=0 SET SP4XPnum=0 SET SP5XPnum=0 SET SP6XPnum=0 SET XPNosp=0 for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)"^| find " objects."') do Set totSPXPnum=%%j If '%totSPXPnum%'=='0' ECHO No XP nodes found >>"%PathToFiles% unninglog.txt"&ECHO. >>"%PathToFiles% unninglog.txt"&goto :W2Ksrvr for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 1)"^| find " objects."') do Set SP1XPnum=%%j Set /A XPRemainder=%XPRemainder%+%SP1XPnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 2)"^| find " objects."') do Set SP2XPnum=%%j Set /A XPRemainder=%XPRemainder%+%SP2XPnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 3)"^| find " objects."') do Set SP3XPnum=%%j Set /A XPRemainder=%XPRemainder%+%SP3XPnum% :: ********* SP4-6 code currently skipped over ********* GOTO :XPskip for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 4)"^| find " objects."') do Set SP4XPnum=%%j Set /A XPRemainder=%XPRemainder%+%SP4XPnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 5)"^| find " objects."') do Set SP5XPnum=%%j Set /A XPRemainder=%XPRemainder%+%SP5XPnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 6)"^| find " objects."') do Set SP6XPnum=%%j Set /A XPRemainder=%XPRemainder%+%SP6XPnum% :XPskip Set /a XPNosp=%totSPXPnum%-%XPRemainder% ECHO.>>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" ECHO XP total nodes: %totSPXPnum% >>"%PathToFiles% unninglog.txt" ECHO *************************** >>"%PathToFiles% unninglog.txt" ECHO XP no SP: %XPNosp% >>"%PathToFiles% unninglog.txt" ECHO XP SP1: %SP1XPnum% >>"%PathToFiles% unninglog.txt" ECHO XP SP2: %SP2XPnum% >>"%PathToFiles% unninglog.txt" ECHO XP SP3: %SP3XPnum% >>"%PathToFiles% unninglog.txt" :: ********* SP4-6 code currently skipped over ********* GOTO :W2Ksrvr ECHO XP SP4: %SP4XPnum% >>"%PathToFiles% unninglog.txt" ECHO XP SP5: %SP5XPnum% >>"%PathToFiles% unninglog.txt" ECHO XP SP6: %SP6XPnum% >>"%PathToFiles% unninglog.txt" :W2Ksrvr ECHO.>>"%PathToFiles% unninglog.txt" SET W2KSrvrRemainder=0 SET totSPW2KSrvrnum=0 SET SP1W2KSrvrnum=0 SET SP2W2KSrvrnum=0 SET SP3W2KSrvrnum=0 SET SP4W2KSrvrnum=0 SET SP5W2KSrvrnum=0 SET SP6W2KSrvrnum=0 SET W2KSrvrNosp=0 for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)"^| find " objects."') do Set totSPW2KSrvrnum=%%j If '%totSPW2KSrvrnum%'=='0' ECHO No W2K srvr nodes found >>"%PathToFiles% unninglog.txt"&ECHO. >>"%PathToFiles% unninglog.txt"&goto :NETsrvr for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)(operatingsystemservicepack=service pack 1)"^| find " objects."') do Set SP1W2KSrvrnum=%%j Set /A W2KSrvrRemainder=%W2KSrvrRemainder%+%SP1W2KSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)(operatingsystemservicepack=service pack 2)"^| find " objects."') do Set SP2W2KSrvrnum=%%j Set /A W2KSrvrRemainder=%W2KSrvrRemainder%+%SP2W2KSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)(operatingsystemservicepack=service pack 3)"^| find " objects."') do Set SP3W2KSrvrnum=%%j Set /A W2KSrvrRemainder=%W2KSrvrRemainder%+%SP3W2KSrvrnum% :: ********* SP4-6 code currently skipped over ********* GOTO :W2KSrvrskip for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)(operatingsystemservicepack=service pack 4)"^| find " objects."') do Set SP4W2KSrvrnum=%%j Set /A W2KSrvrRemainder=%W2KSrvrRemainder%+%SP4W2KSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)(operatingsystemservicepack=service pack 5)"^| find " objects."') do Set SP5W2KSrvrnum=%%j Set /A W2KSrvrRemainder=%W2KSrvrRemainder%+%SP5W2KSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows 2000 Server)(operatingsystemservicepack=service pack 6)"^| find " objects."') do Set SP6W2KSrvrnum=%%j Set /A W2KSrvrRemainder=%W2KSrvrRemainder%+%SP6W2KSrvrnum% :W2KSrvrskip Set /A W2KSrvrNosp=%totSPW2KSrvrnum%-%W2KSrvrRemainder% ECHO.>>"%PathToFiles% unninglog.txt" ECHO W2K Srvr total nodes: %totSPW2KSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO ***************************>>"%PathToFiles% unninglog.txt" ECHO W2K no SP: %W2KSrvrNosp% >>"%PathToFiles% unninglog.txt" ECHO W2K SP1: %SP1W2KSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO W2K SP2: %SP2W2KSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO W2K SP3: %SP3W2KSrvrnum% >>"%PathToFiles% unninglog.txt" :: ********* SP4-6 code currently skipped over ********* GOTO :NETsrvr ECHO W2K SP4: %SP4W2KSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO W2K SP5: %SP5W2KSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO W2K SP6: %SP6W2KSrvrnum% >>"%PathToFiles% unninglog.txt" :NETsrvr ECHO.>>"%PathToFiles% unninglog.txt" SET NETSrvrRemainder=0 SET totSPNETSrvrnum=0 SET SP1NETSrvrnum=0 SET SP2NETSrvrnum=0 SET SP3NETSrvrnum=0 SET SP4NETSrvrnum=0 SET SP5NETSrvrnum=0 SET SP6NETSrvrnum=0 SET NETSrvrNosp=0 for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)"^| find " objects."') do Set totSPNETSrvrnum=%%j If '%totSPNETSrvrnum%'=='0' ECHO No .NET srvr nodes found >>"%PathToFiles% unninglog.txt"&ECHO. >>"%PathToFiles% unninglog.txt"&goto :last for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)(operatingsystemservicepack=service pack 1)"^| find " objects."') do Set SP1NETSrvrnum=%%j Set /A NETSrvrRemainder=%NETSrvrRemainder%+%SP1NETSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)(operatingsystemservicepack=service pack 2)"^| find " objects."') do Set SP2NETSrvrnum=%%j Set /A NETSrvrRemainder=%NETSrvrRemainder%+%SP2NETSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)(operatingsystemservicepack=service pack 3)"^| find " objects."') do Set SP3NETSrvrnum=%%j Set /A NETSrvrRemainder=%NETSrvrRemainder%+%SP3NETSrvrnum% :: ********* SP4-6 code currently skipped over ********* GOTO :NETSrvrskip for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)(operatingsystemservicepack=service pack 4) "^| find " objects."') do Set SP4NETSrvrnum=%%j Set /A NETSrvrRemainder=%NETSrvrRemainder%+%SP4NETSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)(operatingsystemservicepack=service pack 5)"^| find " objects."') do Set SP5NETSrvrnum=%%j Set /A NETSrvrRemainder=%NETSrvrRemainder%+%SP5NETSrvrnum% for /f "tokens=1,2,3,4" %%i in ('cscript "%PathToSearchUtil%" "LDAP://%Target%" /S:%Scope% /Q /C:"&(ObjectCategory=computer) (operatingsystem=Windows .NET Server)(operatingsystemservicepack=service pack 6) "^| find " objects."') do Set SP6NETSrvrnum=%%j Set /A NETSrvrRemainder=%NETSrvrRemainder%+%SP6NETSrvrnum% :NETSrvrskip Set /A NETSrvrNosp=%totSPNETSrvrnum%-%NETSrvrRemainder% ECHO.>>"%PathToFiles% unninglog.txt" ECHO .NET Srvr total nodes: %totSPNETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO *************************** >>"%PathToFiles% unninglog.txt" ECHO .NET no SP: %NETSrvrNosp% >>"%PathToFiles% unninglog.txt" ECHO .NET SP1: %SP1NETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO .NET SP2: %SP2NETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO .NET SP3: %SP3NETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO .NET SP4: %SP4NETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO .NET SP5: %SP5NETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO .NET SP6: %SP6NETSrvrnum% >>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" :last Set /A KnownOS=%totSPnum%+%totSPXPnum%+%totSPW2KSrvrnum%+%totSPNETSrvrnum% Set /A UnknownOS=%Totalnum%-%KnownOS% ECHO Unknown O/S nodes: %UnknownOS% >>"%PathToFiles% unninglog.txt" ECHO.>>"%PathToFiles% unninglog.txt" ECHO ********************************************************** >>"%PathToFiles% unninglog.txt" ECHO ^
>>"%PathToFiles%ADoutputTemp.html" ECHO See Current Report ^ ^ ^ ^| ^Current^>>"%PathToFiles%ADoutputTemp.html" ECHO ^|^
>>"%PathToFiles%ADoutputTemp.html" ECHO See Previous Reports ^| ^1^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^2^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^3^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^4^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^5^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^6^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^7^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^8^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^9^>>"%PathToFiles%ADoutputTemp.html" ECHO ^| ^10^>>"%PathToFiles%ADoutputTemp.html" ECHO ^|^
^
>>"%PathToFiles%ADoutputTemp.html" ::************************************************* ECHO ^^OU: %Target%^
>>"%PathToFiles%ADoutputTemp.html" ECHO Scope: %Scope:onelevel=One level%^
>>"%PathToFiles%ADoutputTemp.html" ECHO Total nodes:^ %Totalnum%^
>>"%PathToFiles%ADoutputTemp.html" ECHO Unknown OS: %UnknownOS%^<^/strong^>^<^/p^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/font^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" ECHO ^>>"%PathToFiles%ADoutputTemp.html" :: ****************************************************** ECHO ^
>>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^Service pack^<^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^W2K Pro^<^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^XP Pro^<^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^W2K Server^<^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^.NET Server^<^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^No SP^<^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %Nosp%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %XPNosp%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %W2KSrvrNosp%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %NETSrvrNosp%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^SP1^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP1num%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP1XPnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP1W2KSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP1NETSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^SP2^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP2num%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP2XPnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP2W2KSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP2NETSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^SP3^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP3num%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP3XPnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP3W2KSrvrnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP3NETSrvrnum%^<^/td^ >>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" :: ********* SP4-6 code currently skipped over ********* GOTO :Total ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^SP4^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP4num%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP4XPnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP4W2KSrvrnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP4NETSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^SP5^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP5num%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP5XPnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP5W2KSrvrnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP5NETSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^SP6^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP6num%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP6XPnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP6W2KSrvrnum% ^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %SP6NETSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" :Total ECHO ^ >>"%PathToFiles%ADoutputTemp.html" ECHO ^ ^^Total^ <^/small^>^<^/strong^>^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %totSPnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %totSPXPnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %totSPW2KSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^ %totSPNETSrvrnum%^<^/td^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/tr^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/table^>>>"%PathToFiles%ADoutputTemp.html" ECHO ^<^/div^>>>"%PathToFiles%ADoutputTemp.html" GOTO :EOF
Таблица А: Инструменты командной строки для запросов AD
Название Источник Действия Dsadd.exe Windows Server 2003 Administration Tools Добавляет объекты Dsget.exe Windows Server 2003 Administration Tools Показывает объекты Dsmod.exe Windows Server 2003 Administration Tools Изменяет объекты Dsmove.exe Windows Server 2003 Administration Tools Перемещает объекты Dsquery.exe Windows Server 2003 Administration Tools Находит объекты по критериям Dsrm.exe Windows Server 2003 Administration Tools Удаляет объекты. (Внимание! Эта команда потенциально опасна, будьте осторожны) Csvde.exe Windows 2000 Server Импортирует информацию в AD или экспортирует ее из AD Gpresult.exe Microsoft Windows 2000 Resource Kit Сохраняет информацию о Group Policy Object (GPO) Resultant Set of Policies (RSoP) Search.vbs Windows 2000 Support Tools Ищет объекты по критериям и с учетом области поиска ADfind.exe http://www.joeware.net Похож на Search.vbs, но более функционален GetADCount.exe http://www.joeware.net Подсчитывает количество объектов в AD MemberOf.exe http://www.joeware.net Перечисляет группы, членом которых является пользователь в AD SecData.exe http://www.joeware.net Сохраняет индивидуальную информацию о защищенности определенного ID UserName.exe http://www.joeware.net Возвращает Имя Пользователя в нескольких форматах NetPWAge.exe http://www.systemtools.com Выводит возраст пароля пользователя или компьютера, распознает неиспользованные или устаревшие учетные записи
ИТ-календарь
- Бизнес-завтрак «Платформенная экономика - 2025: главные правовые тренды, риски и возможности» 23 декабря 2024
- Конкурс «BPM-проект года’2025» 28 декабря 2024
- III Форум будущих технологий 20 февраля 2025
Популярные теги