sergey vasin

The IT blog

Используем PowerShell и web-сервис для получения списка праздников – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает, как использовать Windows PowerShell для получения даты определенного праздника с использованием web-сервиса.

Используем web-сервис для получения даты праздника

Наверное должен существовать интернациональный web-сервис, содержащий информацию о праздниках, однако у меня не получилось его обнаружить с помощью запросов Bing. Я нашел сервис, содержащий информацию о праздниках для нескольких стран. И это HolidayService2. Он содержит 6 методов. Открытие страницы в Internet Explorer показывает эти методы.

01

Для использования методов web-сервиса мне понадобится командлет New-WebServiceProxy. Возвращенный им объект я сохраню в переменной. Наиболее важный параметр этого командлета – это URI web-сервиса. В этом примере параметры Class и Namespace не так важны. Для удобства, я обычно сохраняю URI в отдельных переменных. В результате у меня получились две строки кода.

$URI = «http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx»

$proxy = New-WebServiceProxy -Uri $URI -Class holiday -Namespace webservice

Вызываем метод web-сервиса

Что мне нужно сделать, так это выяснить как пользоваться этим web-сервисом. В частности, этот сервис довольно хорош, поскольку он построен с использованием .NET Framework и он возвращает объекты .NET – к этому мы еще вернемся. Итак, не нужно знать какие страны или регионы поддерживаются этим сервисом. Для этого я вызову метод GetCountriesAvailable.

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

Для вызова метода GetCountriesAvailable, я начну вводить его имя и затем нажму Tab, что автоматически добавит недостающую часть имени.

$proxy.GetCountriesAvailable()

Команда и ее вывод приведены на рисунке.

02

Итак, теперь я знаю страны и регионы поддерживаемые сервисом. Теперь мне нежно получить список праздников, известных сервису. Для этого я вызову метод GetHolidaysAvailable.

$proxy.GetHolidaysAvailable(«UnitedStates»)

Это очень здорово, что сервис возвращает объекты, так что я могу передать из другим командлетам Windows PowerShell. Например, довольно сложно просматривать список праздников в случайном порядке, но ничто нам не мешает отсортировать его в алфавитном порядке.

$proxy.GetHolidaysAvailable(«UnitedStates») | sort code

03

Хотите узнать, как различаются праздники Северной Ирландии от праздников Республики Ирландия? Для этого я дважды вызову метод GetHolidaysAvailable (по одному для каждого региона), сохраню результаты в переменных и укажу их в качестве параметров командлета Compare-Object. Эти команды приведены ниже.

$in = $proxy.GetHolidaysAvailable(«IrelandNorthern») | sort code

$ir = $proxy.GetHolidaysAvailable(«IrelandRepublicOf») | sort code

Compare-Object -Property code -ReferenceObject $in -DifferenceObject $ir

04

Получаем дату праздника

Теперь попробуем получить дату праздника. Несколько моих попыток показаны на рисунке.

05

Вместо тог, чтобы раскрашивать консоль красным, я пожалуй вернусь к web-странице HolidayService2 и взгляну на параметры метода GetHolidayDate. Тут даже есть небольшая форма, которую я могу использовать для проверки. Web-страница с определениями SOAP приведена на рисунке.

06

Итак, правильный способ использования метода GetHolidayDate:

PS C:\> $proxy.GetHolidayDate(«UnitedStates»,»LABOR-DAY»,2013)

Monday, September 2, 2013 12:00:00 AM

Заметьте, что возвращенная дата выглядит точно как объект System.DateTime. А так как это действительно объект .NET, я могу делать с ним весьма интересные вещи. Например, если мне хочется узнать, сколько времени осталось до дня труда в Соединенных Штатах, я могу воспользоваться командлетом New-TimSpan.

PS C:\> New-TimeSpan -Start (get-date) -End ($proxy.GetHolidayDate(«UnitedStates»,»LABOR-DAY»,2013))

Days : 196

Hours : 11

Minutes : 19

Seconds : 45

Milliseconds : 909

Ticks : 171479859090373

TotalDays : 198.472059132376

TotalHours : 4763.32941917703

TotalMinutes : 285799.765150622

TotalSeconds : 17147985.9090373

TotalMilliseconds : 17147985909.0373

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/18/use-powershell-and-a-web-service-to-find-holidays.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Апрель 2, 2013 в 09:41

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with

Добавить комментарий

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

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s