Архив рубрики: Секреты CLI

>Миграция заданий из 2003 в 2008

>
Что ж, самое время мне все-таки выучить синтаксис команды schtasks, который я так не желал учить. Некоторое время назад мне пришлось решать проблему перемещения ряда задач с одного сервера на другой. Сама по себе задача не слишком радующая, а тут еще пришлось копировать их с Windows 2003 на Windows 2008. Когда переносимая задача одна это легко делается вручную, но если их много… Вот тут-то и наступает момент триумфа schtasks!
Что он может для нас сделать, так это экспортировать задачу с удаленного сервера в формат XML. Предположим, мы имеем задачу “Command Prompt”, которая единоразово запускает cmd.exe:
image
image
image
Давайте используем наше секретное оружие (запускать на Win 2008, не ниже):
image
В файле Task.xml мы получим следующее содержание:

   1: <?xml version="1.0" encoding="utf-16"?>
   2: <Task version="1.1" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
   3:   <RegistrationInfo>
   4:     <Author>trofimov</Author>
   5:   </RegistrationInfo>
   6:   <Triggers>
   7:     <TimeTrigger>
   8:       <Enabled>true</Enabled>
   9:       <StartBoundary>2011-04-10T23:43:00</StartBoundary>
  10:     </TimeTrigger>
  11:   </Triggers>
  12:   <Settings>
  13:     <Enabled>true</Enabled>
  14:     <DeleteExpiredTaskAfter>PT0S</DeleteExpiredTaskAfter>
  15:     <ExecutionTimeLimit>PT259200S</ExecutionTimeLimit>
  16:     <Hidden>false</Hidden>
  17:     <WakeToRun>false</WakeToRun>
  18:     <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
  19:     <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
  20:     <RunOnlyIfIdle>false</RunOnlyIfIdle>
  21:     <Priority>5</Priority>
  22:     <IdleSettings>
  23:       <Duration>PT600S</Duration>
  24:       <WaitTimeout>PT3600S</WaitTimeout>
  25:       <StopOnIdleEnd>false</StopOnIdleEnd>
  26:       <RestartOnIdle>false</RestartOnIdle>
  27:     </IdleSettings>
  28:   </Settings>
  29:   <Principals>
  30:     <Principal>
  31:       <UserId>System</UserId>
  32:     </Principal>
  33:   </Principals>
  34:   <Actions>
  35:     <Exec>
  36:       <Command>C:WINDOWSsystem32cmd.exe</Command>
  37:       <WorkingDirectory>C:WINDOWSsystem32</WorkingDirectory>
  38:     </Exec>
  39:   </Actions>
  40: </Task>

которое мы можем импортировать в наш сервер W2008R2 с помощью schtasks или даже через GUI:

image

image

image

Разумеется, schtasks более эффективен в случае перемещения многих задач, однако GUI намного более эффектен ;)

Реклама

>Секреты %System%System32: change

>

CLIЕще один “старичок”. Я уже и не припомню, когда я в последний раз его использовал, однако, кому-то команда все еще может понадобиться. Я, например, использовал ее при установке нового ПО на терминальных серверах. Или чтобы прекратить доступ пользователей к нему. Теперь я практически не работаю с терминальными решениями, да и говорят, что в новых ОС есть другие способы решения этих проблем. В любом случае, Windows 2003 все еще с нами, потому и change списывать со счетов пока рано. 

Вкратце оно может следующее:

  • Запретить или разрешить логон на терминальный сервер change logon disable. После перезагрузки все вернется на место.
  • Изменение привязки портов. Я никогда это не использовал и, надеюсь, Вам тоже не придется, потому что в статье базы знаний MS написано, что эта команда “Изменяет сопоставления COM-портов для совместимости DOS-приложений”. Ни за какие коврижки не хочу с этим снова возиться =) 
  • Подготовить сервер для установки нового ПО. Файлы .ini, их сопоставление и все такое. Для установки нужно сказать change user install, а после ее завершения change user execute.

И это все, что данная команда умеет. Однако, если я забывал это сделать, то с какими чудесныи багами приходилось встречаться… =)))

Вот только чего я не понимаю: зачем эта команда присутствует на Windows 7.Кто-нибудь знает? =)))

>Секреты %SystemRoot%System32: certreq

>

CLIСледущие два кандидата в мою серию о содержимом папки System32 – bootcfg & cacls (я иду в алфавитном порядке, ка видно) – отпали сами собой. Почему? Потому что они устарели и, что не менее важно – я осилил их новые варианты. Более того, BCDEdit, пришедший на смену bootcfg я уже даже описал. Так что я пропущу эти две команды и перейду сразу к certreq.

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

  • создать запрос на сертификат, который позднее можно “подать на рассмотрение” в CA
  • собственно, запросить сертификат у CA
  • получить сертификат или информацию о нем от CA
  • подписать запрос на сертификат
  • ну и всякое разное, что можно вообще делать с сертификатами =)

Разумеется, все это достаточно хорошо скриптуется, хотя, если честно, то я использовал команду всего несколько раз. И все-таки, там где я это делал, обойтись без нее было бы достаточно сложно. Так что имейте ее в виду ;)

Дальнейшей чтиво:

Синтаксис certreq

Поподробнее о нем же

Advanced Certificate Enrollment and Management

>Секреты %SystemRoot%System32: BITSAdmin

>

CLIЕще один мой старый устаревший друг. Но хоть и устаревший, а старый друг, лучше новых. В первую очередь он лучше потому, что я все еще не нашел времени хорошо ознакомиться со всякими там PoSh-командлетами вида *-BITSTransfer. Во-вторых… Да нет никаких “во-вторых”, как обычно =) Тем не менее команда совершенно великолепная, и я хотел бы сделать ей посвящение этой стьей. Хотя обычно я ее использовал просто чтобы быть уверенным, что нужный мне файл скачается, даже если сетевое подключение пропадало, с ее помощью можно вытворять массу кунштюков: скачать или наоборот закачать файлы, повторить провалившуюся задачу, скачать только определенную часть файла, выставить кучу параметров типа аутентификации… Крутая, в общем =) 

Но, повторюсь, у меня она в основном скачивала файлы. Давайте посмотрим как можно реализовать эту задачу на примере.

Начнем с создания задачи:

BITSAdmin /CREATE /DOWNLOAD DownloadJob1

image

Легко видеть, что задача была создана, ей назначен некий GUID, который Вы можете использовать позднее (я буду использовать имя). А еще прекрасно видно уведомление о том, что команда устарела. =( Давайте посмотрим внутрь созданной задачи:

BITSadmin /LIST /VERBOSE

image

(ага, МНОГО информации). Очевидно, на данный момент в задаче нет никаких заданий (FILES: 0 / 0), так что давайте кое-что туда добавим:

BITSadmin /ADDFILE DownloadJob1 <URL> <PathToSavedFile>

image

Все добавилось и даже уже создан временный файл:

image

добавим еще один:

image

и увидим второй временный файл:

image

Оба файла пока имеют размер 0 байт. Теперь мы можем получить больше информации о нашей задаче:

image

Тут уже видны оба скачиваемых файла (JOB FILES) и… Мы уже можем подождать, когда файлы скачаются? Увы, нет, поскольку задача еще не запущена (STATE: SUSPENDED). Нам нужно запустить ее и это очень просто:

BITSADMIN /RESUME DownloadJob1

image

Теперь наша задача в состоянии TRANSFERRING, мы можем видеть как много байт (BYTES) или файлов (FILES) уже передано и все такое. И тут – БАМС! Что-то пошло не так и у нас оборвалось соединение: image. Будет ли это мешать нашей скачке? Да:

image

Состояние закачки теперь TRANSIENT_ERROR. Должны ли мы беспокоиться об этом и предпринимать какие-то действия? Нет, поскольку как только соединение восстановится, наша закачка перейдет в состояние QUEUD и потом продолжится автоматически:

image

Смотреть изредка на эту большую картинку постоянно вводя команду /LIST неинтересно, так что мы будем наблюдать за скачиванием по другому: 

BITSadmin /MONITOR /REFRESH 1

image

Эта команда будет отображать состояние наших задач, периодически (в примере каждую секунду) его обновляя:

image

Ну и как только наши файлы скачаются:

image

мы сможем пойти в место, куда из скачивали и… Ой… Что это?

image

Файлы имеют соответствующие размеры, но их имена… Все нормально, файлы еще в виде временных, поскольку задача не завершена, хотя закачка уже и окончена. Нам остался один последний маленький шажок:

BITSadmin /COMPLETE downloadJob1

image

Опять “ой”. Похоже, BITSadmin считает имена заданий чувствительными к регистру. Запомним это и введем команду по-новой:

BITSadmin /COMPLETE DownloadJob1

image

Вуаля! Файлы на своих местах и больше нет никакой работы – все по мне =)

image

З.Ы. Простите мне этот маленький экзерсис по поводу устаревшей программы: просто не смог удержаться Winking smile

З.З.Ы. Если она Вам тоже нравится, читаем тут, тут и тут.

>Секреты %SystemRoot%System32: BCDEdit

>

CLI

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

Например, Вы можете включить и сконфигурировать EMS (Emergency Management Services) для любой из загрузочных опций в Вашем списке. Или можно включить отладку ядра. Злые языки поговаривают, что даже можно обеспечить двойную загрузку с какой-нибудь посторонней ОС (скажем, FreeBSD), если Вам вдруг приспичит. Надо попробовать как-нибудь… =)

Чтение:

http://technet.microsoft.com/en-us/library/cc709667(WS.10).aspx

http://technet.microsoft.com/en-us/library/cc731662(WS.10).aspx

http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/BCDedit_reff.docx

>Секреты %SystemRoot%System32: Auditpol

>

CLIА вот эта команда очень даже полезна в случае, если Вам нужно тонко настроить аудит. Например, Вы не сможете только с помощью GUI установить “Audit directory service changes” не установив “Audit directory service replication” и еще парочку, потому что “Средства с интерфейсом Windows, позволяющего просматривать или задавать подкатегории политики аудита, в Windows Server 2008 нет”. Так что Вы крайне нуждаетесь в этой утилите, если есть нужда в настройке подкатегорий аудита. Так же она Вам нужна для создания скриптов, изменяющих или анализирующих SACL. А еще она пригодится для резервного копирования и восстановления политик аудита (скажем, Вам нужно на время поиска решения проблемы включить расширенный аудит, а потом выключитьт его). А еще она может полностью или частично сбросить политики аудита.

Обалдеть! Пишу вот это и преисполняюсь благоговения. Мне следовало лучше использовать этот инструмемнт Winking smileСинтаксис весьма обширен, так что читайте сами, а я приведу здесь лишь самый простой пример использования утилиты:

image

Have fun! =)

>Секреты %SystemRoot%System32: Schtasks

>

CLIПосле моего предыдущего поста из этой серии о команде AT я получил некий фидбек от людей, очевидно, не любящих читать до конца Winking smile Впрочем, они вполне справедливо указали мне на то, что AT устарела и хорошо бы использовать schtasks. Они знали! =)

Несмотря на все мои ужимки, schtasks и впрямь значительно более мощная утилита и, раз уж она так всем нравится, я решил посвятить следующее сообщение серии ей, а не auditpol, которая следует за AT в моем списке. Приступим.

Schtasks

По сравнению с AT данная команда является большим шагом вперед. Правда, посмотрите только на ее подкоманды: create, change, run, end, delete, query. Собственно, этот инструмент позволяет делать абсолютно все, что Вы можете сделать с помощью консоли Scheduled Tasks в панели управления. А так как это утилита командной строки, то все это еще можно и заскриптовать. Как обычно, впрочем, такая мощь имеет свою обратную сторону: описание ее синтаксиса состоит из 33 страниц в MS Word шрифтом размера 8,5. 33 страницы! И все же рекомендую переключаться на нее, потому что, буду честным, если Вам хочется хоть чуть-чуть большего, чем может Вам предоставить команда AT, то особых вариантов у Вас нет. Кроме того, если лениться чуть меньше и освоить ее синтаксис, то результат может приятно удивить:

schtasks /create /tn “Shutdown Friends Machine” /tr “shutdown /s /f /t 0” /sc minute /mo 5 /s friend

Эта команда заменяет все строки из моего примера в статье про AT.