Курс по PowerShell (6434A) в моём исполнении :)

teacher1 10-12 марта, в Москве, в учебном центре Инвента, я буду читать курс по Windows PowerShell. Это официальный Microsoft’овский курс – 6434A – Automating Windows Server 2008 Administration with Windows PowerShell. С его программой можно ознакомиться тут.

Хотя в названии и фигурирует Windows Server 2008 – большая часть информации касается PowerShell вообще, независимо от операционной системы, а Windows Server 2008 используется лишь для демонстрации функционала PowerShell.

Курс подойдет и для людей совсем не знакомых с PowerShell, и для уже обладающих некоторыми знаниями. Обучение начинается с установки PowerShell и рассмотрения базового функционала. Затем идёт работа с конвейерами, форматированием вывода, и конструкциями контроля выполнения, и т.д. Ближе к концу вы научитесь использовать возможности PowerShell для работы с WMI, ADSI, COM, и .NET на реальных примерах. В курсе много лабораторных работ, что очень важно для хорошего усвоения материала.

Внимание, бонус! Курс не ограничивается программой курса :) Если мы будем укладываться по времени – можно пытать меня всевозможными вопросами, я с удовольствием расскажу вам всё что знаю о PowerShell, лишь бы это было интересно и другим слушателям :)

Продолжительность курса – 3 дня, с 9 утра, до 17 вечера.

Стоимость – 13500 руб.

Записаться можно тут. И лучше сделать это пораньше, так как количество мест ограничено.

До встречи :)

Создание локального пользователя и мешающее ничто

Недавно ко мне обратились с вопросом о странном поведении достаточно простой функции. Она создаёт локального пользователя с заданным именем и паролем, и должна возвращать в качестве результата объект с двумя свойствами: UserName и Password (Ну на самом деле функция была чуть сложнее, но нам интересна только эта часть :) ). Читать далее…

Опубликовано в Learn, PowerShell, Scripting, Tips. Метки: . Комментарии (3) »

Выдираем ссылки из вебстранички

Для большинства случаев использования регулярных выражений в PowerShell применяются операторы -match, -replace, и командлет Select-String. Но иногда их возможностей недостаточно, и тогда на помощь приходит класс [regex] принося всю мощь регулярных выражений .Net :) Одно из самых простых его применений – выборка из куска текста нескольких вхождений одного выражения. Для примера – достанем ссылки из кода вебстраницы. Сразу замечу что выражение определяющее url не точное, но в большинстве случаев его будет более чем достаточно.
Итак, для начала объявим функцию для загрузки кода веб-страницы (это обновлённая версия Get-WWWString):

function Get-WwwString ([string]$Url, [string]$Encoding="windows-1251", [System.Management.Automation.PSCredential]$ProxyCredential = $GlobalCreds)            
{            
        $wc = new-object System.Net.WebClient            
        $wc.Encoding = [System.Text.Encoding]::GetEncoding($Encoding)            
        $wc.UseDefaultCredentials = $true            
        if ($ProxyCredential) {$wc.Proxy.Credentials = $ProxyCredential.GetNetworkCredential()}            
        $wc.DownloadString($url)            
}

Теперь загружаем страницу, и вытаскиваем ссылки…

$Text = Get-WwwString "http://ya.ru"            
            
[regex]$reg = '"(\w+://[^"]+)"'            
$match = $reg.match($Text)            
while ($match.Success)            
{            
    $match.Groups[1].value            
    $match = $match.nextMatch()            
}
Опубликовано в 2.0, Learn, PowerShell, Scripting. Метки: . Комментарии отключены

Как создать свой объект в PowerShell

Пост чтоб ссылаться на него, а то часто спрашивают :)

Самый красивый и правильный способ – использовать командлеты New-Object, и Add-Member:

$obj = New-Object psobject            
$obj | Add-Member -type noteproperty -name Prop1 -Value "Abc"            
$obj | Add-Member -type noteproperty -name Prop2 -Value 123

К сожалению этот способ относительно громоздкий, и при написании “ad-hoc” скриптов, или в интерактивной консоли, часто используют командлет Select-Object. Он оставляет от переданного ему объекта только указанные свойства. Причем свойства можно указывать даже отсутствующие у объекта раньше :) А вместо имён свойств можно использовать специальные хеш-таблицы в которых еще и указывать их значения :)

$o = 0 | Select-Object @{name="Prop1";expression={"Abc"}}, @{n="Prop2";e={123}}

Мы передаём на Select-Object объект 0 (ноль), впрочем можно использовать и любой другой, например "" (пустую строку). Ни одно из свойств исходного объекта мы не указываем и они удаляются. Зато добавляем пару новых :)

Ну и до кучи – хэш-таблицы (hashtable). Это не объекты, но ведут себя в некоторых случаях довольно похоже.

$h = @{prop1="Abc";prop2=123}            
$h["prop3"]=456            
$h.prop1 = "Def"

Обратите внимание на такую фичу – к свойствам хеш-таблиц можно обращаться как к массивам по индексу – $h["свойство"], так и как к объектам: $h.свойство.

Upd: Спасибо Вадиму за напоминание, в PowerShell 2.0 можно еще вот так легко создать свой класс с помощью кода C#, и затем его экземпляр:

Add-Type @'
public class MyClass
{
    public string prop1 = "blabla";
    public bool prop2 = true;
}
'@            
            
$Object = New-Object MyClass

Аналогично можно сделать и в 1.0, но там вызывать C# код уже несколько сложнее.

Удаление дублей папок RSS в Outlook

Я недавно описывал как делается удаление всех папок из папки RSS в Outlook, но не все решили совсем отказаться от использования любимого Outlook’а в качестве RSS ридера :) Некоторым надо лишь удалить дубликаты папок. Для этого надо добавить совсем немного изменений :)

$outlook = New-Object -com outlook.application
$ns = $Outlook.GetNamespace("MAPI")
$Rss = $ns.getdefaultfolder(25)
$rss.Folders | ?{$_.Name -match '\(\d+\)$'} | %{$_.Name; $_.delete()}

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

Кстати, при подключении к Outlook из сценариев, иногда возникает такое вот окно:

OutlookAutomation

Кто нибудь знает как можно его отключить?  Очень бы пригодилось для сценариев автоматизации Outlook запускаемых через планировщик.

Follow

Get every new post delivered to your Inbox.

Join 30 other followers