Остальных по окончании занятий в большей степени интересовали новые возможности. Как убежденный сторонник технологии сценариев, я часто замечаю, что как только системные администраторы начинают применять ее в своей работе, они не расстаются с ней всю жизнь. С помощью сценариев можно быстро и качественно выполнять повторяющиеся операции. Например, если знать, как разработать сценарий, собирающий данные с нескольких удаленных узлов и представляющий информативный отчет, эта задача может из рутинной работы превратиться в развлечение.

В данной ситуации у многих системных администраторов в первую очередь возникает вопрос "С чего начать?". Для начинающего существует большая разница между написанием сценария из одной строки, отображающего на экране сообщение "Hello, World" и разработкой сложного сценария, содержащего около 200 строк кода и предназначенного для решения какой-либо важной задачи. Если вы новичок в этой области, то сначала, вероятно, попробуете выяснить, что может дать вам использование сценариев. Начинать знакомство с этой технологией проще всего с попытки запуска нескольких несложных, но полезных команд. После того как вы освоите основы, можно начинать повышать квалификацию и обращаться к подробным источникам информации о разработке сценариев, например, к специальной литературе.

В данной статье будет показана 101 команда для сценариев, каждая из которых отвечает на один из типичных вопросов "Как сделать…?". Здесь же имеется несколько примеров кода, которые помогут вам в освоении этой технологии на начальном этапе. Изучая приведенные примеры, вы познакомитесь с богатыми возможностями сценариев командной строки и убедитесь, что их использование может существенно облегчить работу, а также обеспечить высокую надежность, безопасность и точность при выполнении ваших повседневных обязанностей.

Обеспечение работоспособности команд сценариев

Прежде чем начинать эксперименты, следует убедиться, что все описанные здесь команды будут работать в имеющейся конфигурации. При этом нужно учитывать, что описанные команды тестировались на системах Windows XP Professional Edition Service Pack 1 (SP1) и Windows 2000 SP3. Для того чтобы облегчить новичкам старт, я сформулировал предварительные требования и рекомендации. Сначала давайте познакомимся с предварительными требованиями:

  • Установите на компьютер все утилиты, которые необходимы для используемых здесь команд. Список соответствующих ресурсов приводится в таблице 1, а названия путей, которые я использовал на своей тестовой машине, могут послужить ориентирами местонахождения той или иной утилиты. Эти утилиты по большей части либо входят в состав пакетов Microsoft Windows 2000 Resource Kit и Windows 2000 Support Tools, либо являются встроенными командами, однако здесь используется и несколько свободно распространяемых утилит от независимых разработчиков.
  • Отредактируйте код таким образом, что бы он содержал названия путей, соответствующих местам хранения утилит на вашей системе.
  • Отредактируйте пути LDAP (Lightweight Directory Access Protocol) и другие необходимые данные, если сценарий не запрашивает ввод этих параметров.

Теперь рассмотрим несколько рекомендаций, которые позволят упростить процедуры запуска сценариев:

  • Во многих примерах для организации ввода данных пользователем применяется команда Set /P. Если вы предпочитаете задавать имена серверов или пользователей в явном виде в тексте сценария, тогда удалите из его текста строку "(SET /P C=Enter computer name:) &" и замените переменные !C! и !U! на заданные в явном виде имена компьютеров, пользователей или другую информацию, ввод которой запрашивается сценарием.
  • Сформировать рабочую среду для поочередного запуска сценариев можно путем создания соответствующего ярлыка. Обычно при внесении в сценарий дополнительного кода вы в одной строке задаете переменную, скажем, computername, а затем используете ее где-то далее в тексте сценария, например так, как показано ниже:
    (SET /P C=Enter computer name:) 
    ECHO %C%

Но поскольку здесь мы собираемся работать со сценариями, состоящими из одной строки, необходимо найти способ установки переменной в одной строке. Если вы будете просто использовать команду Set /P в той же строке, где находится сама переменная, придется работать в том окружении командной строки, в котором перед этим была запущена команда Setlocal с дополнительным аргументом Enabledelayedexpansion.

В связи с этим, вместо того, чтобы перед каждым запуском сценария открывать окно командной строки и запускать в нем команду Setlocal Enabledelayedexpansion, можно воспользоваться приведенной ниже командой из одной строки и создать на рабочем столе ярлык OneLinerCmd:

C:ResourceKitReg.exe add 
HKCUConsoleonelinercmd ScreenBufferSize=131072080
REG_DWORD & shortcut.exe -f
-t "%systemroot%system32cmd
.exe" -a "/V:ON" -d %system
drive% -n "%userprofile% desktopOneLiner Cmd"

В тексте статьи и эта, и другие команды размещаются на нескольких строках, однако если вы будете копировать их непосредственно из статьи и переносить в таком виде в командную строку, то учтите, что команды могут работать некорректно, если не преобразовать их в одну строку. В рассматриваемом коде для формирования соответствующей среды выполнения сценариев используется команда Cmd /V:ON, которая обеспечивает тот же результат, что и команда Setlocal. Обратите внимание, что при использовании данного ярлыка, созданного сценарием, увеличивается размер буфера экрана, что обеспечивает больший размер прокручиваемого окна командной строки для вывода получаемых данных.

  • Перенос команд сценариев в окно командной строки лучше выполнять с помощью копирования и вставки. Для этого нужно выделить мышью тот код, который вы хотите запустить, а затем щелкнуть правой кнопкой мыши в окне командной строки для вставки выбранного кода в это окно. Если это сделать не удается, откройте окно свойств Properties командной строки, выберите закладку "Общие" (Options) и в ней включите флажки "Выделение мышью" (QuickEdit) и "Быстрая вставка" (Insert).
  • Команды и утилиты, используемые в рассматриваемых сценариях, имеют гораздо больше возможностей, чем я описал в данной статье. Если вы столкнетесь с проблемами при запуске описанных команд в среде Windows 2003 или просто захотите просмотреть полный список аргументов команд для их дальнейшего использования, наберите в командной строке:
    Имя команды /?

Также следует помнить, что некоторые утилиты, в частности, reg.exe и gpresult.exe, могут иметь несколько версий. Поэтому прежде чем использовать их, необходимо убедиться в том, что имеющаяся версия утилиты поддерживает синтаксис запуска, рассматриваемый в данной статье.

  • В некоторых сценариях задействованы файлы .vbs, для запуска которых используется сервер сценариев CScript. Необходимо иметь в виду, что при запуске файла .vbs с помощью CScript нужно указывать полный путь к файлу .vbs.
  • Прежде чем запускать сценарии в промышленную эксплуатацию, следует тщательно проверить их работу в тестовой среде. Обратите внимание, что сценарии, обсуждаемые в статье, выполняют преимущественно сбор данных и не вносят никаких изменений в файлы и группы (за исключением нескольких сценариев, выполняющих процедуры очистки от временных файлов).
  • Все сценарии имеют ограничения, определяемые полномочиями зарегистрированного в системе пользователя, от имени которого они запускаются. Большинство сценариев не будет работать, если запускающий их пользователь не является членом группы "Администраторы" на локальных и удаленных серверах или клиентах.
  • В связи с ростом потребности в полном соответствии с результатами операций, выполняемых через графический интерфейс и сценарии, компания Microsoft включила в свои операционные системы специальный инструментарий, который можно использовать в сценариях. Это могут быть как совершенно новые утилиты (такие как dsquery.exe), так и программные средства из пакетов Windows 2000 Resource Kit, Microsoft Windows NT 4.0 Resource Kit или Windows 2000 Support Tools (например, gpresult.exe). Поэтому если планируется запускать рассмотренные здесь сценарии на системах Windows 2003, то прежде чем устанавливать какие-либо дополнительные утилиты из пакетов Resource Kit, нужно проверить, не установлены ли они уже на компьютере.

    Команды для работы со службой AD через сценарии

    Служба Active Directory (AD) является богатейшим источником информации. Но, к сожалению, оснастка Active Directory Users and Computers консоли Microsoft Management Console (MMC) предоставляет в наше распоряжение только простейшие функции экспорта списков, с помощью которых можно извлекать лишь ограниченное количество типов данных. Однако, применяя в сценариях несколько перечисленных ниже утилит из пакета Resource Kit, предназначенных для работы с AD, можно добраться до всего того изобилия информации, которое содержит эта служба.

    1. Как экспортировать список всех компьютеров, которые являются членами домена Sales?

    Csvde.exe -f C:complist.csv -r 
    "(objectClass=computer)" -d
    "dc=sales,dc=yourcompany,dc=
    com" -p subtree

    2. Как найти путь LDAP к компьютеру из данного домена?

    (SET /P C=Enter computer name: 
    ) & For /f "tokens=1,2,3,*"
    %i in ('CScript //nologo
    C:supporttoolssearch.vbs
    "LDAP://dc=sales,dc=your
    company,dc=com" /Q /S:subtree
    /C:"&(ObjectCategory=computer)
    (cn=!C!)"') do ECHO %l

    3. Как получить подробные сведения о результирующем наборе политик (Resultant Set of Policies – RSoP)?

    (SET /P C=Enter computer name: 
    ) & gpresult.exe /S !C!

    4. Как найти в заданном организационном подразделении (OU) все компьютеры с Windows XP, на которых установлен пакет обновления SP1?

    For /f "tokens=1,2,3,4" %i in 
    ('CScript " //nologo
    C:supporttoolssearch.vbs"
    "LDAP://dc=sales,dc=your
    company,dc=com" /Q /C:"&
    (ObjectCategory=computer)
    (operatingsystem=Windows XP
    Professional)(operating
    systemservicepack=service
    pack 1)"^| find " objects."')
    do ECHO %j

    5. Как получить полный список компьютеров из заданного OU, включая те, что размещаются в дочерних OU?

    For /f "tokens=3,* delims==," 
    %i in ('CScript //nologo
    C:supporttoolssearch.vbs
    "LDAP://dc=sales,dc=your
    company,dc=com" /S:subtree
    /Q /C:"&(ObjectCategory=
    computer)"') do ECHO %i,%j>>
    D:PCs.csv

    6. Как определить, у каких компьютеров данного OU заблокированы учетные записи?

    For /f "tokens=*" %i in 
    ('C:w2k3toolsdsquery.exe
    computer "LDAP://dc=sales,dc=
    yourcompany,dc=com" -disabled
    ') do @ECHO %i

    7. Как найти в заданном OU все заблокированные учетные записи пользователей?

    For /f "tokens=*" %i in 
    ('C:w2k3toolsdsquery.exe
    user "LDAP://dc=sales,dc=your
    company,dc=com" -disabled')
    do @ECHO %i

    Управление компьютером с помощью команд сценариев

    Многие из приведенных ниже управляющих команд позволяют опрашивать и настраивать компьютеры в удаленном режиме без необходимости локальной регистрации на них. Применение автоматизации для ежедневно выполняемых работ по управлению компьютерами позволит администратору сэкономить массу времени.

    8. Как определить, включен ли удаленный компьютер с помощью команды Ping?

    (SET /P C=Enter computer name: 
    ) & (For /f %i in ('Ping -n 1
    !C!^|Find "Reply"') do @ECHO
    Online!)||(@ECHO Offline!)

    9. Как определить, включен ли удаленный компьютер с помощью команды NBTstat?

    (SET /P C=Enter computer name: 
    ) & (For /f %i in ('NBTstat
    -a !C!^|Find "found."') do
    @ECHO Offline!)||(@ECHO
    Online!)

    10. Как определить, включен ли удаленный компьютер с помощью команды Net Use?

    (SET /P C=Enter computer name: 
    ) & (For /f "tokens=*" %i in
    ('@Net Use !C! 2^>NUL ^|
    find "successfully."') do
    @ECHO Online!)||(@ECHO
    Offline!)

    11. Как сравнить установки времени на локальном компьютере и на сервере, где выполняется регистрация (logon server)?

    For /f "tokens=*" %i in ('Net 
    Time \%COMPUTERNAME% ^| find
    /V "command"') do @ECHO
    %i&For /f "tokens=*" %i in
    ('Net Time %LOGONSERVER% ^|
    find /V /I "command"') do
    @ECHO %i

    12. Как сравнить установки времени на удаленном компьютере и на сервере, где выполняется регистрация (logon server)?

    (SET /P C=Enter computer name: 
    ) & For /f "tokens=*" %i in
    ('Net Time !C! ^| find /V
    "command"') do @ECHO %i&For
    /f "tokens=*" %i in ('Net
    Time %LOGONSERVER% ^| find /V
    "command"') do @ECHO %i

    13. Как найти в домене Windows 2000 все компьютеры, в имени которых встречается слово "Sales"?

    For /f "tokens=1 delims=$" %i 
    in ('C: esourcekitglobal
    .exe "Domain Computers"
    %LOGONSERVER% ^| Find "$" ^|
    Find /i "SALES"') do @ECHO %i

    14. Как найти в домене Windows NT 4.0 все компьютеры, в имени которых встречается слово "Sales"?

    For /f "tokens=1 delims=$" %i 
    in (' C: esourcekitglobal
    .exe "Domain Users" %LOGON
    SERVER% ^| Find "$" ^| Find
    /i "SALES"') do @ECHO %i

    15. Как создать на рабочем столе ярлык для управления удаленным компьютером?

    (SET /P C=Enter computer name 
    for shortcut: ) & "shortcut
    .exe" -f -t "%SystemRoot%
    system32compmgmt.msc" -a
    "/computer=!C!" -d "%System
    Root%system32" -n "%USER
    PROFILE%desktop
    !C!-CompMgmt"

    16. Как проверить доверительные отношения между компьютером и его доменом?

    (SET /P C=Enter computer name: 
    ) & C:pstoolspsexec.exe -c
    !C! C:supporttools etdiag
    .exe /test:trust

    17. Как получить системную информацию с удаленного компьютера?

    (SET /P C=Enter computer name: 
    ) & C:pstoolspsinfo.exe
    !C!

    18. Как получить подробный список всех служб, запущенных на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & C:pstoolspslist.exe
    !C!

    19. Как просмотреть последние пять событий, зафиксированных в системном журнале System удаленного компьютера?

    (SET /P C=Enter computer name: 
    ) & C:pstoolspsloglist.exe
    -n 5 system !C!

    20. Как определить, обновлялись ли вирусные определения для антивируса McAfee за последние 7 дней?

    (SET /P C=Enter computer name: 
    ) & C:pstoolspsloglist.exe
    -o mclogevent application -d
    7 !C!

    21. Как просмотреть в системном журнале удаленного компьютера 10 последних событий, связанных с регистрацией в системе?

    (SET /P C=Enter computer name:
    ) & C:pstoolspsloglist.exe
    -i 6009 -n 10 !C!

    22. Как получить список учетных записей компьютеров, возраст пароля которых превышает 180 дней?

    C:systools
    etpwage.exe 
    /Machines /v /Min:180 /Tabs

    23. Как можно выключить и перезагрузить удаленный компьютер?

    (SET /P C=Enter computer name: 
    ) & C: esourcekitshutdown.exe
    !C! /R /C

    24. Я зарегистрировался на компьютере под своим именем и выполнил на нем некоторые работы по обслуживанию. Как в окне регистрации изменить имя пользователя на то, которое было в нем раньше?

    (SET /P U=Enter User ID: ) &
    C: esourcekit eg.exe add
    "HKLMSOFTWAREMicrosoft
    Windows NTCurrentVersion
    Winlogon" /f /v DefaultUser
    Name /d !U!

    ПРИМЕЧАНИЕ: синтаксис использования утилиты reg.exe зависит от ее версии. Чтобы получить более подробную информацию о синтаксисе данной утилиты, наберите команду:

    Reg /?

    Установить обновление Reg.exe можно с помощью команды reg.exe /f.

    25. Как посмотреть настройки хранителя экрана на удаленном компьютере?

    (SET /P C=Enter computer name:
    ) & CScript //nologo
    C: esourcekitdesktop.vbs
    /S !C!

    26. Как получить полный список драйверов на локальном компьютере?

    C:
    esourcekitdrivers.exe

    27. Как получить полный список драйверов на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & C:pstoolspsexec.exe
    !C! /C C: esourcekit
    drivers.exe

    28. Как определить версию операционной системы и роль удаленного компьютера для систем Windows 2000 и Windows NT?

    (SET /P C=Enter computer name: 
    ) & C: esourcekitgettype
    .exe !C!

    29. Как можно на удаленном компьютере определить время последнего запуска и дату установки операционной системы?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitlistos.vbs
    /S !C!

    30. Как можно для удаленного компьютера получить информацию об установленных принтерах и о принтере, выбранном по умолчанию?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitlistprinters
    .vbs /S !C!

    31. Как посмотреть настройки параметров восстановления (recovery settings) на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitosreconfig.vbs
    /S !C!

    32. Как увидеть настройки страничного файла на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitpagefile.vbs
    /L /S !C!

    33. Как можно на удаленном компьютере определить, в каком пользовательском профиле имеются ярлыки программ?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitprogramgroups
    .vbs /S !C!

    34. Как просмотреть пути к исполняемым файлам процессов на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitps.vbs /S !C!

    35. Как можно быстро просмотреть запущенные на удаленном компьютере процессы?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitpstop.vbs /S
    !C!

    36. Как получить информацию о базовой конфигурации сервера, включая данные о пакетах Service Pack и дисковом пространстве?

    (SET /P C=Enter computer name: 
    ) & C: esourcekitsrvinfo
    .exe !C!

    37. Как получить список обновлений, установленных на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & For /f "tokens=2 delims=
    [:]" %i in (' C: esourcekit
    srvinfo.exe -ns !C! ^|
    Findstr "[0-9][0-9]]:"') do
    @ECHO %i

    38. Как получить информацию о периоде работоспособного состояния и данные "синего экрана" сервера?

    (SET /P C=Enter computer name: 
    ) & C: esourcekituptime.exe
    /S /A !C!

    39. Как получить информацию о потоках (thread)?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekit hread.vbs /S
    !C!

    40. Как определить, установлено ли на удаленном компьютере с Windows 2000 обновление для службы вызова удаленных процедур (RPC)?

    (SET /P C=Enter computer name: 
    ) & C: esourcekit eg.exe
    Query "HKLMSOFTWARE
    MicrosoftUpdatesWindows
    2000SP5KB823980" !C!
    |find /I "- KB823980"&&ECHO
    SP Installed!||ECHO SP not
    installed or node not
    available!

    Команды сценариев для работы с диском

    Использование сценариев поможет существенно упростить процесс управления сменными и несменными дисковыми накопителями. Как и в случае команд для управления компьютером, многие из приведенных ниже команд работы с дисками позволяют выполнять из сценариев запросы к удаленным компьютерам для получения той или иной информации.

    41. Как определить, имеются ли на дисках основного файлового сервера (имеющих обозначения от C до I) фрагменты недействительных данных, для которых при следующей перезагрузке будет запущена утилита Chkdsk?

    For /D %i in (C D E F G H I) do 
    Chkntfs %i:

    42. Как можно отключить возможность запуска утилиты Chkdsk при следующей перезагрузке для диска M, имеющего большой объем?

    Chkntfs /X M:

    43. Как изменить значение таймаута отмены запуска Chkdsk и задать значение 30 сек (вместо установленных по умолчанию 10 секунд), чтобы у администратора было больше времени для отмены запуска Chkdsk при загрузке?

    Chkntfs /T:30

    44. Как определить, какое значение таймаута для Chkdsk установлено на сервере?

    Chkntfs /T

    45. Как определить, активированы ли на удаленном компьютере какие-либо счетчики производительности для физических или логических дисков?

    (SET /P C=Enter computer name: 
    ) & Diskperf.exe !C!

    46. Как получить с удаленного компьютера сведения о его дисководе CD-ROM и определить наличие в нем компакт-диска?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitcdromdrives
    .vbs /S !C!

    47. Как получить данные о дисковых разделах удаленного компьютера?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitdiskpartition
    .vbs /S !C!

    48. Как получить детальную информацию о физических дисковых накопителях удаленного компьютера?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitdrives.vbs /S
    !C!

    49. Как можно определить доступное пространство на дисках удаленного компьютера?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitlistfreespace
    .vbs /S !C!

    50. Как определить суммарный объем дискового пространства на удаленном компьютере?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitlistspace
    .vbs /S !C!

    51. Как получить данные о настройках параметров контроллера SCSI удаленного компьютера?

    (SET /P C=Enter computer name: 
    ) & CScript //nologo
    C: esourcekitscsicontroller
    .vbs /S !C!

    Преобразование отдельных команд сценариев к виду, пригодному для использования в командных файлах

    Итак, мы познакомились с командами сценариев, а теперь перейдем к замечаниям и рекомендациям. Эти сведения могут пригодиться при преобразовании команд для их дальнейшего применения в создаваемых командных (.bat) файлах:

    • Для того чтобы преобразовать однострочные команды в сценарии, содержащие много строк, скопируйте строку кода в текстовый файл и сохраните его с расширением .bat.
    • В самом начале сценария, до каких-либо других команд, поместите команду Setlocal Enabledelayedexpansion. Каждую из команд, объединенных символом одиночного амперсанда (&), следует разместить на отдельной строке, после чего символы амперсандов удалить.
    • Если команда For должна запускаться через командный (.bat) файл, синтаксис ее запуска будет несколько иным. Если вы сохранили эту команду в виде .bat-файла, то все одиночные символы процента должны быть заменены в ней знаком двойного процента (например, вместо %i следует писать %%i). Если же вы хотите запустить эту команду непосредственно из командной строки, тогда, как и прежде, используйте знаки одиночного процента.
    • Запуск .bat-файлов может выполняться либо двойным щелчком мыши, либо их перетаскиванием в окно командной строки с последующим запуском на выполнение нажатием клавиши Enter. Если необходимо, чтобы после запуска сценария двойным щелчком мыши окно командной строки оставалось открытым до нажатия на любую клавишу, включите в качестве последней строки кода сценария команду Pause.
    • Если вы хотите ускорить процесс освоения технологии сценариев и не ограничиваться только знакомством с описанными здесь однострочными командами, изучите другие материалы сайта, опубликованные на нашем сайте.
    • Постарайтесь раздобыть книгу Timothy Hill "Windows NT Shell Scripting" (Que, 1998), которая является лучшим справочным руководством по встроенным командам Windows и утилитам из пакета Resource Kit. Разумеется, с появлением новых версий утилит из Resource Kit синтаксис некоторых команд может меняться, однако эта работа по-прежнему остается весьма актуальной.

    Команды сценариев для работы с файлами, принтерами и общими каталогами

    С помощью сценариев можно создавать ресурсы с совместным доступом, выполнять аудит прав доступа и даже создавать файловые ресурсы общего пользования на кластере. Приведенные ниже примеры содержат много полезных команд, предназначенных для поиска файлов, удовлетворяющих некоторым критериям, автоматизации процедур удаления и получения информации о драйверах принтеров.

    52. Как определить, доступен ли общий ресурс?

    (SET /P CS=Enter servernamesharename: ) 
    & (If Exist !CS! ECHO !CS! online) &
    (If Not Exist !CS! ECHO !CS! offline)

    53. Как выяснить, существуют ли в заданном каталоге файлы с расширением .xls?

    If Exist computernamesharenamefoldername*.xls ECHO XLS file(s) exist

    54. Как удалить все файлы из каталога Temp?

    Del /Q /S %temp%*.*

    55. Как удалить из каталога Temp все файлы, возраст которых превышает 10 дней?

    Forfiles -p%temp% -s -m*.* -d-10 -c"CMD /C DEL /Q /F 0x22@PATH@FILE0x22"

    ПРИМЕЧАНИЕ: В системе Windows 2003 команда Forfiles имеет другой синтаксис. Для получения полной информации о синтаксисе команды наберите в командной строке:

    Forfiles /?

    56. Как удалить все пустые папки из каталога Temp?

    Forfiles -p%temp% -s -m* -c"CMD /C if @ISDIR== 
    TRUE RMDIR 0x22@PATH@FILE0x22 2>NUL&&echo
    Deleted @RELPATH@FILE||Echo Deletion skipped"

    ПРИМЕЧАНИЕ: В системе Windows 2003 команда Forfiles имеет другой синтаксис. Для получения полной информации о синтаксисе команды наберите в командной строке:

    Forfiles /?

    57. Как выяснить, сколько в заданном каталоге файлов .xls?

    (SET /P TL=Enter target folder location: )
    & SET counter=0 & For /f "tokens=1,2 delims=."
    %i in ('dir /b !TL!*.xls') do @set /A counter+=1&@echo ) %i.%j

    58. Как в заданном каталоге преобразовать имена файлов таким образом, чтобы все буквы имени стали строчными?

    For /f "tokens=*" %i in 
    ('Dir /l /b /a-d C:myfolder') do Ren "C:myfolder\%i" "%i"

    59. Как определить размер конкретного файла в килобайтах?

    For /f "tokens=4" %i in 
    ('Dir /a-d /-c C:windowssystem32 toskrnl.exe ^|Find /i " ntoskrnl.exe "')
    Do (Set /A size=%i/1024)

    ПРИМЕЧАНИЕ: Команда Set /A имеет ограничение из девяти десятичных разрядов (максимальное значение 999999999). Если в математических операциях вы попытаетесь использовать значения, превышающие девять десятичных разрядов (числа ограничиваются 32-разрядной точностью), вы можете получить неверные результаты.

    60. Как выяснить, сколько файлов находится в каталоге?

    Set Counter=& For /f "tokens=*" %i in 
    ('Dir /a-d /b %temp%') do @Set /A Counter+=1 & Echo )%i

    61. Как создать на кластере новый файловый ресурс с общим доступом?

    (CLUSTER clustername RESOURCE Sharename 
    /Create /Group:"GrpName" /Type:"File Share")
    & (CLUSTER clustername RESOURCE Sharename
    /PrivProp Path="R:MysharedFolder")
    & (CLUSTER clustername RESOURCE Sharename
    /PrivProp ShareName="Sharename")
    & (CLUSTER clustername RESOURCE Sharename
    /AddDependency:"Disk R:")
    & (CLUSTER clustername RESOURCE Sharename
    /Prop Description="Here is my description")

    62. Как определить местонахождение открытых файлов на удаленном компьютере?

    (SET /P C=Enter computer name:) & C:pstoolspsfile.exe !C!

    63. Как получить информацию об имеющихся на удаленном компьютере общих ресурсах и разрешения на доступ к ним?

    (SET /P C=Enter computer name: ) & C:
    esourcekit  srvcheck.exe !C!

    64. Как получить информацию о свойствах удаленного общего принтера?

    CScript //nologo C:
    esourcekitprncfg.vbs -g -b servernameprinter

    65. Как просмотреть только скрытые общие ресурсы удаленного компьютера?

    (SET /P C=Enter computer name: ) 
    & C: esourcekit mtshare.exe !C!|sort|find "$"

    Команды сценариев для работы с аппаратными средствами

    Информация о версии BIOS, модели сетевой платы, платы видеоадаптера или мыши, установленных на одном или нескольких компьютерах, может оказаться исключительно полезной при анализе проблем, связанных с драйверами устройств, установленными на клиенте. Для сбора информации можно воспользоваться приведенными ниже командами.

    66. Как проверить BIOS на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitcheckbios.vbs /S !C!

    67. Как получить информацию о свойствах видеоадаптера удаленного компьютера?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitlistdisplayconfig.vbs /S !C!

    68. Как получить информацию о плате видеоадаптера удаленного компьютера, включая данные о разрешении экрана?

    (SET /P C=Enter computer name:) 
    & CScript //nologo C: esourcekitlstdpconinfo.vbs /S !C!

    69. Как получить данные о параметрах указывающего устройства удаленного компьютера?

    (SET /P C=Enter computer name:) 
    & CScript //nologo C: esourcekitpointdev.vbs /S !C!

    70. Как получить данные о процессоре удаленного компьютера?

    (SET /P C=Enter computer name:) 
    & CScript //nologo C: esourcekitprocessor.vbs /S !C!

    71. Как собрать данные о конфигурации последовательного порта на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitserialport.vbs /S !C!

    72. Как собрать данные о конфигурации звукового устройства на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitsounddevice.vbs /S !C!

    73. Как получить информацию о драйвере накопителя на магнитной ленте?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekit apedrive.vbs /S !C!

    Команды сценариев для работы с сетевыми параметрами

    Современные сетевые среды имеют весьма сложную архитектуру, поэтому процедуры поиска неисправностей без применения технологии сценариев здесь могут оказаться весьма трудоемкими. В некоторых случаях, когда сетевой интерфейс не работает, единственный способ просмотреть настройки параметров сети состоит в том, чтобы физически зарегистрироваться на компьютере пользователя. Однако во многих других случаях для сбора сетевого трафика, выявления и решения проблем можно воспользоваться достаточно простыми сценариями.

    74. Как увидеть результаты выполнения команды Ipconfig /ALL на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & C:pstoolspsexec.exe !C! IPConfig /ALL

    75. Как узнать адрес MAC (Media Access Control) удаленного компьютера?

    (SET /P C=Enter computer name: ) & C:
    esourcekitgetmac.exe !C!

    76. Как получить информацию о свойствах сетевого адаптера удаленного компьютера?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitlistadapters.vbs /S !C!

    77. Как получить информацию о сетевых протоколах, установленных на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekit etworkprotocol.vbs /S !C!

    78. Как получить информацию о привязках (bindings) сетевых протоколов на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitprotocolbinding.vbs /S !C!

    Команды управления средой выполнения сценариев

    Несколько несложных приемов помогут сделать среду выполнения сценариев более удобной. Приведенные ниже команды облегчат процедуры разработки и запуска сценариев в этой среде.

    79. Как использовать блокнот Notepad для сохранения индивидуальных настроек (таких как размер шрифта) между сеансами командной строки?

    C:
    esourcekit
    eg.exe Add HKCUSoftwareMicrosoftNotepad /v fSavePageSettings 
    /t REG_DWORD /d "00000001"

    ПРИМЕЧАНИЕ: синтаксис использования утилиты reg.exe зависит от ее версии. Чтобы получить более подробную информацию о синтаксисе данной утилиты, наберите команду:

    Reg /?

    Установить обновление Reg.exe можно с помощью команды reg.exe /f.

    80. Как создать на рабочем столе компьютера с Windows 2000 ярлык для оперативной подсказки по работе с командной строкой?

    C:shortcut.exe -f -t "%SYSTEMROOT%hh.exe" -d "%SystemRoot%" -a 
    "ms-its:%WINDIR%Helpwindows.chm::/ntcmds.htm" -n
    "%USERPROFILE%desktopW2KCommandLineHelp"

    81. Как создать на рабочем столе компьютера с Windows XP ярлык для оперативной подсказки по работе с командной строкой?

    C:shortcut.exe -f -t "%windir%hh.exe" -d "%windir%" -a 
    "ms-its:%windir%Help tcmds.chm::/ntcmds.htm" -n
    "%USERPROFILE%desktopXPCommandLineHelp"

    82. Как определить, сколько времени требуется для выполнения сценария или команды?

    C:
    esourcekit	imethis.exe dir /S /AD /B

    Команды сценариев для управления параметрами безопасности

    Вопросы безопасности лежат в основе почти всего того, что мы делаем как системные администраторы. Приведенные ниже команды позволят автоматизировать с помощью сценариев те рутинные процедуры, связанные с обеспечением безопасности, с которыми администраторы имеют дело ежедневно.

    83. Как подключиться к другому компьютеру, используя учетную запись, отличную от той, под которой я зарегистрировался?

    (SET /P C=Enter computer name: ) 
    & (SET /P U=Enter user name: ) & NET USE !C!IPC$ * /USER:!U!

    84. Как получить информацию об идентификаторе SID удаленного компьютера?

    (SET /P C=Enter computer name: ) & C:pstoolspsgetsid.exe !C!

    85. Как получить список тех пользователей домена, которые имеют право на удаленный доступ (remote access)?

    (SET /P D=Enter Domain name: ) & C:
    esourcekit
    asusers.exe %D%

    86. Как организовать рассылку сообщения через Net Send всем членам локальной группы Administrators при локальной регистрации в системе?

    For /f "tokens=1,2 delims= " %i in ('C:
    esourcekitshowmbrs.exe 
    \%computername%administrators ^| Find /v "Members"')
    Do Net Send %j Test Message

    Сценарии работы со службами

    Безусловно, для получения информации о запущенных в системе службах, а также для их запуска и остановки может использоваться оснастка Computer Management консоли MMC, однако процесс заметно усложняется, если требуется управлять несколькими узлами. К тому же современные концепции безопасности требуют, чтобы администратор более тщательно отслеживал, какие службы установлены и запущены на той или иной системе. Приведенные ниже команды расширят возможности администратора, позволяя ему быстро собирать необходимые данные, не щелкая мышью в соответствующей оснастке каждого компьютера.

    87. Как получить список имеющихся на компьютере служб?

    (SET /P C=Enter computer name: ) & C:
    esourcekit
    etsvc.exe !C! /List

    88. Как определить, запущена ли на сервере служба Web?

    (SET /P C=Enter computer name: ) & C:
    esourcekit
    etsvc.exe !C! W3SVC /query

    89. Как получить перечень остановленных служб с удаленного компьютера?

    (SET /P C=Enter computer name: ) & C:
    esourcekitsclist.exe -s !C!

    Команды сценариев для управления пользователями и группами

    Создание учетных записей пользователей и групп, а также процедуры аудита могут занимать большую часть рабочего времени администратора сети предприятия. К счастью, существуют богатый выбор утилит для работы с пользователями и группами, примеры работы которых приведены ниже.

    90. Как определить, членом скольких групп я являюсь?

    Set cntr=0&for /f "tokens=1,2,3,4 delims=[]" %i in 
    ('C:joewarememberof.exe -q -u %USERDOMAIN%\%USERNAME%')
    do (SET /A cntr+=1) & (ECHO ^) %l)

    91. Как определить, членом скольких групп является другой пользователь?

    (SET /P USER=Enter domainnameusername: ) 
    & set cntr=0&for /f "tokens=1,2,3,4 delims=[]"
    %i in ('C:joewarememberof.exe -q -u %USER%')
    do (SET /A cntr+=1) & (ECHO ^) %l)

    92. Как выяснить, когда заканчивается срок действия учетной записи определенного пользователя (который является членом того домена, где находится учетная запись пользователя, зарегистрировавшегося локально)?

    (SET /P U=Enter user name: ) & C:joewareaccexp.exe 
    !U! -q -s %LOGONSERVER%

    93. Как определить, кто в данный момент локально зарегистрировался на удаленном компьютере?

    (SET /P C=Enter computer name: ) & C:pstoolspsloggedon.exe -L !C!

    94. Как получить данные по истории регистрации в системе пользователей на заданном компьютере?

    (SET /P C=Enter computer name: ) & 
    C:systools etusers.exe !C! /history /local

    95. Как получить список учетных записей пользователей, возраст пароля которых находится в интервале между 90 и 180 днями?

    C:systools
    etpwage.exe /Users /v /Min: 90 /Max:180 /Tabs

    96. Как выяснить, какие пользователи являются членами локальной группы?

    C:
    esourcekitlocal.exe "groupname" domainname

    97. Как выяснить, какие пользователи являются членами глобальной группы?

    C:
    esourcekitglobal.exe "groupname" domainname

    98. Как узнать, в каком организационном подразделении (OU) находится моя пользовательская учетная запись?

    C:joewareusername.exe -Q -format 1

    99. Как получить список пользователей, ассоциированных с процессами, запущенными на удаленном компьютере?

    (SET /P C=Enter computer name: ) 
    & C: esourcekitpulist.exe !C!

    100. Как просмотреть содержимое папок "Автозагрузка" (StartUp) для всех пользователей (All Users) и в пользовательских профилях?

    (SET /P C=Enter computer name: ) 
    & CScript //nologo C: esourcekitstartup.vbs /S !C!

    101. Как получить данные об основных параметрах учетной записи, включая сведения о ее блокировке?

    (SET /P DU=Enter domainUsername: ) 
    & For /f "tokens=1,2 delims=" %i in ("%DU%")
    do CScript //nologo C: esourcekituseraccount.vbs /D %i /N %j

  • Таблица 1. Общедоступные утилиты для сценариев
    УтилитаГде взять
    Accexp.exeJoeware.net (http://www.joeware.net/win32/index.html)
    CDRomDrives.vbsWindows 2000 Resource Kit
    CheckBIOS.vbsWindows 2000 Resource Kit
    Chkntfs.exeВстроенная команда
    Cluster.exeВстроенная команда
    Csvde.exeBuilt-in (Windows 2000 Server)
    Desktop.vbsWindows 2000 Resource Kit
    DiskPartition.vbsWindows 2000 Resource Kit
    Diskperf.exeВстроенная команда
    Drivers.exeWindows 2000 Resource Kit
    Drives.vbsWindows 2000 Resource Kit
    Dsquery.exeWindows 2003 Support Tools
    Forfiles.exeWindows 2000 Resource Kit
    Getmac.exeWindows 2000 Resource Kit
    Gettype.exeWindows 2000 Resource Kit
    Global.exeWindows 2000 Resource Kit
    Gpresult.exeВстроенная команда XP (имеет немного другой синтаксис в Windows 2000 Resource Kit)
    Ipconfig.exeВстроенная команда
    ListAdapters.vbsWindows 2000 Resource Kit
    ListDisplayConfig.vbsWindows 2000 Resource Kit
    ListFreeSpace.vbsWindows 2000 Resource Kit
    ListOS.vbsWindows 2000 Resource Kit
    ListPrinters.vbsWindows 2000 Resource Kit
    ListSpace.vbsWindows 2000 Resource Kit
    Local.exeWindows 2000 Resource Kit
    LStdpConInfo.vbsWindows 2000 Resource Kit
    Memberof.exeJoeware.net
    Nbtstat.exeВстроенная команда
    Net TimeВстроенная команда
    Net UseВстроенная команда
    Netdiag.exeWindows 2000 Support Tools
    Netpwage.exeSystemTools.com (http://www.systemtools.com/free.htm)
    Netsvc.exeWindows 2000 Resource Kit
    Netusers.exeSystemTools.com
    NetworkProtocol.vbsWindows 2000 Resource Kit
    OSReconfig.vbsWindows 2000 Resource Kit
    Pagefile.vbsWindows 2000 Resource Kit
    PingВстроенная команда
    PointDev.vbsWindows 2000 Resource Kit
    PrnCfg.vbsWindows 2000 Resource Kit
    Processor.vbsWindows 2000 Resource Kit
    ProgramGroups.vbsWindows 2000 Resource Kit
    ProtocolBinding.vbsWindows 2000 Resource Kit
    Ps.vbsWindows 2000 Resource Kit
    Psexec.exeSysinternals PsTools (http://www.sysinternals.com/ntw2k/utilities.shtml)
    Psfile.exeSysinternals PsTools
    Psgetsid.exeSysinternals PsTools
    Psinfo.exeSysinternals PsTools
    Pslist.exeSysinternals PsTools
    Psloggedon.exeSysinternals PsTools
    Psloglist.exeSysinternals PsTools
    PStop.vbsWindows 2000 Resource Kit
    Pulist.exeWindows 2000 Resource Kit
    Rasusers.exeWindows 2000 Resource Kit
    Reg.exeWindows 2000 Resource Kit (синтаксис встроенной команды XP немного другой)
    Rmtshare.exeNT Server 4.0 Resource Kit
    Sclist.exeWindows 2000 Resource Kit
    SCSIController.vbsWindows 2000 Resource Kit
    Search.vbsWindows 2000 Support Tools
    SerialPort.vbsWindows 2000 Resource Kit
    Shortcut.exeMicrosoft Windows NT Server 4.0 Resource Kit Supplement 2
    Showmbrs.exeWindows 2000 Resource Kit
    Shutdown.exeWindows 2000 Resource Kit
    SoundDevice.vbsWindows 2000 Resource Kit
    Srvcheck.exeWindows 2000 Resource Kit
    Srvinfo.exeWindows 2000 Resource Kit
    StartUp.vbsWindows 2000 Resource Kit
    TapeDrive.vbsWindows 2000 Resource Kit
    Thread.vbsWindows 2000 Resource Kit
    Timethis.exeWindows 2000 Resource Kit
    Uptime.exeWindows 2000 Resource Kit
    UserAccount.vbsWindows 2000 Resource Kit
    Username.exeJoeware.net