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

>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 к серверу), но его можно рассматривать как рабочий прототип. =)

Реклама

>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), которые смогут помочь решить задания в соревновании с минимальными знаниями. Надеюсь, Вася Гусев меня не заплюет ;)

>Поисковые запросы, PoSh, размер файлов и поиски решения.

>

Иногда просматриваю поисковые запросы, приводящие на мой блог. Иногда там есть подсказки на небольшие новые темы. Так было и вчера. Поисковый запрос выглядел так: “подсчитать размер всех файлов powershell”.

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

Get-ChildItem C:test -recurse | Measure-Object -property length -sum

я немного задумался и понял, что такой простой вопрос не мог не возникать у кучи людей. И потому вполне может быть (и даже должно) решение давным давно выложено там, где я всегда искал ответы на заре той эпохи, когда я только начинал писать скрипты (я все еще учусь, но уже не по каждому поводу прибегаю к чьей-то помощи. Так… Через раз… Прогресс =) ). Таким местом для меня всегда был и остается Microsoft Script Center, который не подвел и в этот раз, выдав целую статью по искомому поводу.

Почему я решил написать об этом так много букв? Да потому, что до сих пор очень часто вижу запросы на написание каких-то мелких скриптов, когда для их написания достаточно того самого Script Center и спинного мозга. А иногда и просто можно найти ответ прямо там. То есть смело гуглим по сайту http://www.microsoft.com/technet/scriptcenter и находим то, что нужно первой строчкой:

image 

Хотел развернуть эту тему дальше – на то, как собирать скрипты из кусочков (точнее, как это делаю я), но передумал и решил предложить Васе Гусеву развить эту тему. А моралью данной статьи будем считать просто необходимость сначала искать примеры или куски скриптов в наиболее крупных репозиториях, а потом уже по всему интернету =)

>Второй вопрос с запуска. Установление VPN соединения из скрипта.

>Вопрос был о том, как в Vista автоматически (точнее из скрипта или .bat файла) соединиться с VPN сервером.
Многим этот вопрос покажется несерьезным, особенно по сравнению с запуском трех великолепных продуктов, однако:
1) вопрос был задан и требует ответа
2) а чем человек, задавший его хуже сисадмина большой распределенной сети — он тоже решает свою задачу и заслуживает в ней помощи
3) кто я такой, чтобы решать, что важно, а что нет =)
4) я не знал ответа на этот вопрос. ;)
и 5) когда я начал копать, то был крайне удивлен многобразию способов (а я еще не все нашел, наверняка) и тому, как много я забыл =)

Итак, есть как минимум два подхода для решения этой задачи:

  • настройка Dial-On-Demand соединения
  • скрипты.

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

Теперь, собственно, нужно создать файлы, которыми мы будем стартовать соединение. Создадим папку c:vpn и создадим там ярлык для этого соединения, скажем, для простоты «VPN_Connection.lnk». А теперь мы можем запускать этот ярлык как нам захочется:

1) можно поместить его в папку «Автозагрузка», тогда соединение, по идее, должно стартовать автоматически. Надо попробовать у себя дома, хтя я сомневаюсь, что на моем дохлом ноутбуке этот номер пройдет ;)

2) можно создать .bat файл следующего содержимого:

c:vpnvpn_connection.lnk

и запускать его откуда нам заблагорассудится.

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

Invoke-Item c:vpnvpn_connection.lnk

А уж что прописывать в качестве дополнительных проверок и действий — решайте сами %)

Note: не забывайте брать в кавычки пулный путь к файлу, если он содержит пробелы. Как-то так, например:

Invoke-Item «c:vpn ConnectionVpn Connection.lnk»

Теперь, поговорим о Demand Dial или Dial On Demand. Тут все еще проще. В дополнение к настройкам, произведенным во вкладке «Параметры» в начале разговора о предыдущем методе, нужно еще перейти на вкладку «Доступ» и поставить галочки «Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера» и «Устанавливать подключение при попытке доступа к Интернету».

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

а) они действительно при желании смогут это сделать

б) есть риск «схлопотать по шее» от админа этой сети =)

Заключение:

Собственно, как видно, в этой области мало что поменялось со времен чуть ли не Windows 98, а то и более старых версий (память она только у компьютеров с каждым годом улучшается =) ). Настолько мало изменилось, что я был очень удивлен, вспомнив про еще один способ: команду rasdial, с которой, впрочем, предоставлю читателю возможность разобраться самому — должно же быть в жизни место подвигу ;)

Надеюсь, что ответил на вопрос заданный на Запуске и даже больше.

>На старт… Внимание…

>А «Марш!!!» будет чуть позже… Еще пару недель и даже меньше =)
Но на сайте Winter Scripting Games 2008, о которых я писал ранее, уже появилось расписание мероприятий с ответами на часто задаваемые вопросы =)
Так что добро пожаловать и готовьте свои редакторы скриптов (notepad? PowerShellPlus? vi?) к бою. Кстати про vi: это не шутка — в этом году решать задачи можно на
1) VBScript
2) PowerShell
3) Perl
И снова повторюсь: добро пожаловать!

>PoSh’лые маски и автозавершение по кнопке табуляции…

>Громкий заголовок получился. Прямо как я люблю =)
Возвращаясь к теме, поясню: я начинаю тихо фанатеть от PowerShell. Очередной повод для этого обнаружился сегодня в блоге команды, создающей этот чудо-язык.
Вернемся к теме окончательно: есть такая функция — автозаполнение. То есть завершение недонабранной команды при нажатии Tab. Никого этой функцией не удивишь, разумеется, но в PoSh у нее есть некая вкусность, о которой я раньше не знал (что, впрочем, может и не помешать такой ерундовине быть реализованной в каком-либо еще shell). Чтобы далеко не ходить и много не объяснять, я просто приведу здесь некоторые эксперименты и их результаты. Давайте вместе наберем строку
*-pro
и нажмем Tab. Результат:
Get-Process
Еще раз Tab:
Stop-Process
И так далее.
Эксперимент №2:
*-p*p
и жмем Tab:
Add-PSSnapin
еще Tab:
Get-PSProvider
Итого: автозавершение понимает маски в строке. Правда, не всегда до конца корректно, но все равно при некоторой сноровке можно этим здорово пользоваться, хотя бы потому, что глаголов в командлетах PoSh много меньше, чем существительных.
=)