Архив рубрики: Scripting

>Lync and fortunes

>

lync1

“Продаю параошют. Использовался только один раз, ни разу не открывался. Небольшие кровоподтеки.”

“Жизнь – крутая штука. Купи шлем.”

“Не могу придумать умную фразу, чтобы поделиться ей.”

Некоторые люди очень любят помещать забавные предложения вроде этих в свой мессенджер. Я-то точно люблю. В случае с OCS это можно было сделать вручную (как, впрочем, и в Lync). Но только одно такое сообщение всё время… Скууучно. Особенно, если Вы накопили множество таких фраз. Менять их вручную – почти такое же скучное занятие, как не менять их. Вот потратить кучу (пусть даже и небольшую) времени, чтобы  создать маленькую програмку, которая будет это делать за нас – это наш метод! 

Как бы то ни было, я пробовал в своё время сделать это с OCS клиентом, но мне это не удалось. То ли я плохо пытался, то ли решение не было достаточно простым для меня… В любом случае, обычно в “следующей версии” всё лучше, чем в предыдущей (если по началу у Вас ничего не получается, назовите это “версия 1.0”) и в Lync мы получили новый SDK, с несомненными улучшениями, такими, как возможность менять строку статуса программно Подмигивающая рожица

Вкратце: Вы можете прочитать о той части SDK, которая помогла мне построить мой скрипт, потом прочитать о написании скриптов на PowerShell для Lync c помощью extencibility API и наконец прочитать о том, как управлять именно нужным параметром. Ещё один шаг, который нужно предпринять: скачать и установить SDK. После этого можно будет написать и использовать собственные скрипты для любых задач, связанных с Lync.

Или можно просто использовать этот скрипт:

 

#Load Assembly

$assemblyPath = «C:Program Files (x86)Microsoft LyncSDKAssembliesDesktopMicrosoft.Lync.Model.DLL»

Import-Module $assemblyPath

 

#Initialize objects

$client = [Microsoft.Lync.Model.LyncClient]::GetClient()

$self = $client.Self;

 

#Get a fortune

$Fortunes = Get-Content c:tempfortunes.txt

$linesNumber = $Fortunes.Length

$todaysFortuneNumber = Get-Random Maximum $linesNumber Minimum 1

$todaysFortune = $Fortunes[$todaysFortuneNumber 1]

 

#Publish personal note of the local user

$contactInfo = new-object ‘System.Collections.Generic.Dictionary[Microsoft.Lync.Model.PublishableContactInformationType, object]’

$contactInfo.Add([Microsoft.Lync.Model.PublishableContactInformationType]::PersonalNote $todaysFortune)

$ar = $self.BeginPublishContactInformation($contactInfo, $null, $null)

$self.EndPublishContactInformation($ar)

 

Он явно не идеален и не делает всех тех вещей, которые нужно бы делать (например, не проверяет, а подключен ли клиент Lync к серверу), но его можно рассматривать как рабочий прототип. =)

Реклама

>BITS и PowerShell

>

Вася Гусев меня пристыдил тем фактом, что я распространял знание о BITSAdmin, вместо соответствующих командлетов PowerShell. Что ж, в какой-то мере он был определенно прав:

  • 1) PowerShell великолепно самодокументирован

2) Писать скрипты на нем намнооого проще, чем в стандартном интерпретаторе комманд

3) Его при некоторых условиях может ыбть чуть проще использовать в некоторых базовых ситуациях типа “просто дай мне этот чертов файл”

4) Многие просто любят PoSh.

Потому я чуток почитал (Disclaimer: действительно “чуток”, потому если ниже есть ошибки, то прошу мне на них указать) и мне показалось, что задача, типа описанной мной в упомянутой статье должна решаться (и Вася тоже так сказалSmile ) одной командой:

Start-BitsTransfer –source <URL> –destination <PathToFile>

но мне, как выяснилось, нужно было лучше изучить вопрос:

image

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

image

и теперь у нас есть наши командлеты:

image

Ну-с, приступим:

image

Отлично, не правда ли? Оно даже показывает прогресс закачки визуально. А вот и не прекрасно, потому что как только я отклчил мой сетевой интерфейс, моя закачка была отменена и я не смог найти никаких ее следов:

image

Даже несмотря на то, что утверждалось, что “BITS will try again” – он так этого и не сделал и не было ни одной зарегистрированной BITS-задачи. Я, если честно, не знаю почему (пусть мне объяснят =) ), но нашел как этого избежать. Просто добавьте параметр “-Asynchronous” к строке и все сработает как нужно, хотя уже и нельзя будет увидеть этот прекрасновидный статус загрузки:

image

image

Однако, даже несмотря на то, что статус закачки сменился в конце концов на “Transferred”, в целевой папке был только .tmp файл. На самом деле, команда без параметра “-Asynchronous” просто выыкладывает Вам файл, куда нужно, но мы уже знаем недостатки этого метода. Так что я вынужден был закатить солнце закончить закачку вручную:

image 

В общем, не слишком большая разница с BITSAdmin. К тому же я не смог найти как добиться такого же эффекта, как с fasion BITSAsmin /MONITOR.

Суммируя:

1) PoSh при скриптинге — рулит

2) Вы можете использовать для интерактивных задач любой набор команд, который Вам нравится. Однако помните, что BITSAdmin могут отменить в любой момент

Потому, пока я не прочитаю внимательно все сам или мне не объяснят, как делать по другому, я буду использовать PoSh, везде, где смогу, а мониторить задачи буду с помощью BITSAdmin. ;)

>Как поменять атрибут в AD: варианты №2

>

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

создание какого-нибудь графического приложения

Есть множество вариантов: C#, VBScript, C, черт в ступе. Так как я несколько ленив, то вместо создания собственного приложения с нуля я взял некий скрипт, приложенный к Windows Administration Resource Kit из состава Windows 2008 resource kit, который называется “Object_Attribute_EmployeeNumber.hta”. Он позволяет просмотреть и изменить атрибут EmployeeNumber. Так как ранее я демонстрировал изменение EmployeeID, то и здесь мне пришлось внести некоторые правки типа замены слова “number” на слово “ID” (осторожно – не везде “number” нуждаетсяс в замене!), как здесь:

image

ну и поправить кое-какие баги. Минут 20 работы, правда. Как только я сделал это – вуаля:image

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

В любом случае, есть еще один метод:

расширение возможностей ADUC и других консолей

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

>Scripting Games: началось!

>

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

1) Это интересно

2) Для начинающих это полезно

3) Это даже где-то весело =)

правила оценки скриптов: http://blogs.technet.com/heyscriptingguy/archive/2010/04/26/judging-criteria-for-the-2010-scripting-games.aspx

Задача 1 для начинающих: http://blogs.technet.com/heyscriptingguy/archive/2010/04/26/2010-scripting-games-beginner-event-1-updating-and-creating-registry-keys.aspx

Задача 1 для продвинутых: 2010-scripting-games-advanced-event-1-updating-and-creating-registry-keys.aspx

Успехов =)

>Scripting Games 2010

>2010 Scripting Games

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

Коротенько:

  • Регистрироваться, как я уже писал, тут.
  • Баннер, как в начале этого поста, брать тут.
  • Учебное пособие здесь.
  • FAQ здесь. (Я сделаю чуть ниже краткое изложение вопросов и ответов)

Вольный и сокращенный перевод FAQ:

Q: как подавать свои решения?

A: В этом году нужно загружать свои скрипты через PoShCode.

Q: Должен ли я посылать свои скрипты точно в какой-либо день?

A: Нет, все равно все будет оценено. Хотя в принципе, рекомендуется не затягивать

Q: Как мне учавствовать в Летних Скриптовых Играх 2010?

A: В первую очередь, зарегистрироваться. Потом ждать объявлений в TechNet Script Center или на Twitter.

Q: Могу я учавствовать больше, чем в одном дивизионе?

A: Да

Q: А призы будут?

A: Ну конечно!

Q: Как мне выиграть приз?

A: Будет 11 розыгрышей во время Игр. 10 ежедневных и один – большой приз в конце Игр. Ежедневные разыгрываются случайно между всеми участниками этого дня, итоговый приз – игроку, набравшему наибольшее количество баллов.

Q: Что, если мне понадобится помощь?

A: Будет открыт специальный форум.

Q: Могу ли я посмотреть на скрипты, поданные другими участниками?

A: Конечно! Вы даже можете улучшить их код и подать на рассморение.

Ну а дальше попробуем пройтись по самым простым техникам (самым-самым, правда – я отнюдь не герой в PowerShell), которые смогут помочь решить задания в соревновании с минимальными знаниями. Надеюсь, Вася Гусев меня не заплюет ;)

>Scripting Games 2010: регистрация открыта!

>

Бесплатно и для всех. Подробности: http://blogs.technet.com/heyscriptingguy/archive/2010/04/01/registration-now-open-for-2010-scripting-games-no-foolin.aspx

2010 Scripting Games

Grab this badge here!

Детали для тех, кто по аглицки не читает – завтра =)

>DPM: разбавим бекап скриптами.

>

image Прекрасно, когда мы в состоянии использовать некоторые возможности DPM, чтобы сделать резервную копию приложения целиком (например, SharePoint или виртуальную машину Hyper-V). Однако, что делать, когда недостаточно просто взять system state, добавить к нему диск C, чтобы получить работоспособный бекап (например, OCS или Windows 2008 Bare Metal Recovery) или наша ферма MOSS 2007 сконфигурирована способом, делающим невозможным его бекап “в один клик” (некоторые сценарии SQL Mirroring ломают возможность такого бекапа)?

Что же… Именно здесь в игру могут вступить скрипты. Data Protection Manager позволяет, на самом деле, запускать скрипты до и/или после бекапа.Трудно ли это? Нет. Могу ли я рекомендовать для создания сложных, критических для бизнеса функций? Увы, тоже не стал бы рекомендовать это делать без крайней необходимости.

Давайте обсудим, почему:

  1. Сложность. На самом-то деле, достаточно лишь разместить Ваши скрипты на локальном диске защищаемого компьютера и сделать правки в одном из конфигурационных файлов. причем скрипт может быть любым: шелл, VBS, PoSh, да хоть Perl. Например, скрипт для BMR-резервирования может выглядеть так:

@echo off
setlocal enabledelayedexpansion
set BACKUP_TARGET=\BackupServerServerBackup
rd /s /q "%BACKUP_TARGET%WindowsImageBackup%computername%"
wbadmin start backup -backuptarget:"%BACKUP_TARGET%" -allcritical -quiet
if %ERRORLEVEL% == 0 (
rem    pushd "%BACKUP_TARGET%WindowsImageBackup%computername%"
rem    for /f "tokens=*" %%i in (‘dir /b /s *.vhd’) do move /Y "%%i"

)

(код почти из этого документа)

В любом случае, наиболее важная часть всей процедуры содержится в файле ScriptingConfig.xml, который обычно лежит в c:Program FilesMicrosoft Data Protection ManagerDPMScripting.

Содержимое этого файла по-умолчанию:

<?xml version="1.0" encoding="utf-8" ?>
   </ScriptConfiguration>

Что нам нужно, так это добавить немного дополнительных настроек внутрь тега <ScriptConfiguration>. В конечном счете файл будет выглядеть, например, вот так:

<?xml version="1.0" encoding="utf-8" ?>

<ScriptConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/2003/dls/ScriptingConfig.xsd">

<DatasourceScriptConfig DataSourceName="c:">

  <PreBackupScript>"Path-To-Script or command line to run script"</PreBackupScript>

  <PostBackupScript />
  <TimeOut>90</TimeOut>
   </DatasourceScriptConfig>
  </ScriptConfiguration>

Все вполне очевидно, как можно видеть:

  • DataSourceName – имя источника данных перед бекапом которого (или после него) нужно выполнить скрипт
  • PreBackupScript – строка, которую необходимо выполнить перед резервным копированием
  • PostBackupScript – строка, которую нужно выполнить после бекапа
  • TimeOut – таймаут в минутах

Довольно несложно, не так ли?

2. Почему я не рекомендую использовать эту технику, если только Вы не нуждаетесь в ней чрезвычайно сильно? Ну… На самом деле, достаточно трудно судить, успешно ли было выполнение скрипта. Консоль DPM ничего не скажет Вам по этому поводу. Например, говоря о BMR для Windows Server 2008, мы можем бекапить, на самом деле, любой файл, присутствующий на файловой системе, предварив создание резервной копии скриптом, который запускает WBAdmin. Если сам файл будет скопирован успешно, то Вы получите зеленую галочку, невзирая на степень успешности резервирования BMR имиджа. Путями быть в курсе успешности бекапа могут быть:

  • Сделать тестовое восстановление. (прекрасная идея, на самом деле, однако, предположите, что у Вас сотни серверов, с бекапом каждую неделю… Проверять их раз в 7 дней – mission impossible)
  • Сделать скрипт достаточно сложным, чтобы он сам распознавал ошибки и рапортовал о них. Снова не самая худшая идея, однако, это полностью неуправляемая вещь, к тому же, превращающаяся в еще одну систему мониторинга, что не слишком хорошо сказывается на всяких там TCO
  • Использовать сторонние инструменты третьих компаний

Впрочем, для некоторых задач это все еще великолепный инструмент.