sergey vasin

The IT blog

Weekend Scripter: Определяем используемые телефонные номера – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Приглашенный блогер Tim Bolton рассказывает об использовании Windows PowerShell для определения используемых телефонных номеров.

Microsoft Scripting Guy, Ed Wilson на связи. Существует огромное множество выполняемых вручную задач, которые можно полностью исключить, используя Windows PowerShell. Также замечательно то, насколько мало требуется времени, чтобы создать что-нибудь полезное в Windows PowerShell. Довольно интересен тот факт, что даже «знающие PowerShell» люди зачастую продолжают выполнять некоторые задачи вручную – по крайней мере, я знаю, что так делаю я.

Да, я признаю… порой я по-прежнему выполняю некоторые задачи вручную. Почему? Ну иногда я просто ленюсь. Я использовал мышь гораздо дольше, чем Windows PowerShell. Но должен сказать, что с появлением Windows 8 и Windows PowerShell 3.0 это случается все реже и реже. Это потому, что в них существует такое количество встроенных командлетов (и функций), что зачастую действительно проще использовать Windows PowerShell, чем мышь. Все наши новые продукты будут включать в себя Windows PowerShell. Это отличные новости для тех людей, которые просто «хотят выполнить свою работу».

Изучайте Windows PowerShell – это сбережет ваши время и силы.

Сегодня я хочу представить вам еще один гостевой пост, автором которого является Tim Bolton. Tim изучает Windows PowerShell. Его статья полезна сама по себе, но кроме этого, она может послужить хорошим стимулом для тех, кто еще только собирается изучать эту замечательную технологию.

Вы также можете прочитать чрезвычайно популярный пост за авторством Тима — Why Should I Learn Powershell? Real World Example Saves the Day!

Итак, Тим.

Определяем используемые телефонные номера

После того, как мне пришлось вручную определять используемые номера телефонов путем просмотра файла Excel и набора каждого указанного номера, я опять вспомнил о следующем правиле Windows PowerShell: если что-то приходится выполнять более двух раз – автоматизируйте это.

Сейчас одна из моих основных задач – это назначение телефонных номеров новым пользователям, а также переназначение номеров в зависимости от того, работают ли они внутри компании. Благодаря помощи и вдохновению моих коллег — Brian Peacock и Arturo (Art) Carrera – этот скрипт появился на свет.

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

#FAIL –

Function Get-Extension {

param(

$Extension = (Read-Host «What is the Extension you want to check? «)

)

$CSUser=Get-csuser | where {$_.LineURI -like “*$Extension»}

$GetUser=Get-user | where {$_.Phone -like “*$Extension”»}

$GetUM=Get-UMMailbox -resultsize unlimited | where {$_.PhoneNumber -like «*$Extension»}

$obj = New-Object -TypeName PSObject

$obj | Add-Member -MemberType NoteProperty -Name «CS Display Name» -Value ($CSUser.DisplayName)

$obj | Add-Member -MemberType NoteProperty -Name «Line URI» -Value ($CSUser.LineURI)

$obj | Add-Member -MemberType NoteProperty -Name «AD Phone» -Value($GetUser.Phone)

$obj | Add-Member -MemberType NoteProperty -Name «Exchange SIP» -Value ($GetUM.SIPResourceIdentifier)

$obj | Add-Member -MemberType NoteProperty -Name «Exchange Extension» -Value ($GetUM.Extensions)

Write-Output $obj

}

После того как я добавил несколько фильтров в качестве значений для параметра –Filter, время выполнения скрипта сократилось до 2-3 минут. Вроде бы неплохо, но это же Windows PowerShell, не так ли. Поэтому, несмотря на то, что это второе поколение скрипта, все равно это больше похоже на #FAIL –

Function Get-Extension {

param(

$Extension = (Read-Host «What is the Extension you want to check? «)

)

$CSUser=Get-csuser -Filter «LineURI -like ‘*$Extension'»

$GetUser=Get-user -Filter «Phone -like ‘*$Extension'»

$GetUM=Get-UMMailbox -resultsize unlimited | where {$_.PhoneNumber -like «*$Extension»}

$obj = New-Object -TypeName PSObject

$obj | Add-Member -MemberType NoteProperty -Name «CS Display Name» -Value ($CSUser.DisplayName)

$obj | Add-Member -MemberType NoteProperty -Name «Line URI» -Value ($CSUser.LineURI)

$obj | Add-Member -MemberType NoteProperty -Name «AD Phone» -Value($GetUser.Phone)

$obj | Add-Member -MemberType NoteProperty -Name «Exchange SIP» -Value ($GetUM.SIPResourceIdentifier)

$obj | Add-Member -MemberType NoteProperty -Name «Exchange Extension» -Value ($GetUM.Extensions)

Write-Output $obj

}

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

Кроме того (к моему удивлению) оказалось возможным использовать параметр –Filter в командлете Get-UMMailbox, что снизило время выполнения скрипта до 15 секунд!

#WINNER!

Function Get-Extension {

param(

[parameter(Mandatory = $true)]

[String] $Extension)

$CSUser=Get-csuser -Filter «LineURI -like ‘*$Extension'»

$GetUser=Get-User -Filter «Phone -like ‘*$Extension'»

$GetOther=Get-User -Filter «OtherFax -Like ‘*$Extension*'»

$GetUM=Get-UMMailbox -Filter «EmailAddresses -Like ‘*$Extension*'» # Exchange

$NotFound = «Extension Not Found»

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

  1. Да, да, да Josh, я знаю, что используя Write-Host я убиваю щенков, но как и в предыдущий раз, это сделано исключительно в целях визуальной верификации.

  2. Стал ли скрипт выполняться быстрее при использовании параметра –Filter? Да! Сначала скрипт выполнялся 4-6 минут, затем 2-3 минуты и в итоге мы сократили время его выполнения до 15 секунд.

  3. Почему New-Object? Просто сейчас я читаю 19 главу книги Learn Windows PowerShell in a Month of Lunches (второе издание) и это показалось мне неплохой идеей.

  4. Почему вы запрашиваете также OtherFax? Причиной этому является то, что раньше в компании использовали номера телефонов вместо номеров факсов и наоборот. Если искать только по номерам телефонов или добавочным номерам можно с ума сойти, пытаясь понять, почему не работает определенный номер.

  5. Jeffrey, я использовал [string], в соответствии с предложением Брайана, для того, чтобы исключить запрос номера, что позволяло скрипту работать чуть быстрее, но вскоре я обнаружил (к своему удивлению), что теперь я могу использовать параметр –Filter командлета Get-UMMailbox, что в ином случае было невозможным. Почему существуют подобные ограничения я не знаю. Я думаю этот вопрос стоило бы задать команде Exchange.

  6. Это еще один повод изучать Windows PowerShell. Не стоит просто копировать работу других людей. Этим вы делаете себе сомнительную услугу. Я никогда раньше не указывал параметр как строку, но теперь я понемногу начиняю разбираться в этом. Чем больше я изучаю Windows PowerShell, тем больше мне хочется его использовать.

Ссылка на скрипт в репозитории: http://gallery.technet.microsoft.com/scriptcenter/Get-Extension-a4213c52.

~Tim

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/29/weekend-scripter-finding-in-use-phone-extensions.aspx


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

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


Реклама

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

Январь 4, 2013 в 14:19

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

Tagged with

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s