вторник, 29 января 2008 г.

PowerShell, инструкции програмисту

Краткое описание:
Microsoft Windows PowerShell — это бесплатная оболочка командной строки и язык написания сценариев для операционных систем Windows. На данный момент доступна полная версия с подробным справочным руководством на русском языке. Отличительной чертой новой командной оболочки является ее ориентированность на среду Microsoft .NET Framework.

Установочный пакет локализованной версии Windows PowerShell 1.0 для ОС Windows XP

Скачать

Установочный пакет для Windows Vista

Скачать

Начнем, значит что из себя представляет PowerShell

Это попытка Microsoft создать достойный язык написания сценариев для Windows, который не уступал бы таким языкам сценариев, какие используются в Linux и Unix системах.

Очевидно, что PowerShell должен поддерживать самые модные и современные технологии Microsoft, такие как .Net Framework, и конечно же Windows Server 2008

Естественно они не забыли о домашних меньших братьях как Windows XP, его младшенькая сестричка Vista.

Теперь суть:
1. Подержать полностью все стандартные методы, которые возможны в консоле (командной строке)
2. Возможность программирования используя .Net Framework
3. И написать максимально простой язык, который будет понятен, не только программистам, а еще и системным администраторам, он должен включать в себя максимальную гибкость и быстроту работы с этим языком.

Основные структуры языка и синтаксис:
Cmdlet - называются команды PowerShell, которые можно использовать у них есть уже готовая функциональность, это функции, которые можно вызвать и исполнить.
Cmdlet можно так же написать и самому, используя шаблон Cmdlet и откомпилировав его в assambly и зарегистрировать эту assambly в GAC, и все ваш Cmdlet готов к использованию.

Синтаксис языка:

Для создание комментариев используется - #
#$str="Hello world"

Оглавление переменных
Для создания переменной используется $, хотя его можно и не использовать, но для удобства желательно это делать
Вот пример:
$str="Hello world"

Массивы, синтаксис очень похож на синтаксис C
$strArray="Hi, ", "how ", "are, ", "you"
$strArray[1]
И выводиться how

Логические сравнение: больше, меньше или равно
-eq Равно
-ne Не равно
-gt –ge Больше или больше и равно
-lt –le Меньше или меньше и равно

Логические оператор - Если
if (условие)
{
.....
}
elseif (условние)
{
.....
}
else
{
.....
}

Циклы, аналогичны C
while (1)
{
.....
}

for ($i = 0; $i –lt 5; $i++)
{
.....
}

foreach ($z in $i)
{
.....
}

Типы:
Четки типы здесь можно не использовать, хотя при желаннее все возможно
[string]$st = "Hi"
[int]$intType = 1
И уже при не совпадении типов, вылетает ошибка

Функции и процедуры:
Так же можно использовать отдельные функции и процедуры с параметрами и без, с возвратом значения и без.

без параметров и возврата значения
function MyFunction
{
.....
}

с параметрами и возвратом значения
function MyFunction($firstParam, [string]$secondOnlyStringParam)
{
$ret_value="Hello"
.....
return $ret_value
}

Это все может прочитать в руководстве, которое постановляет с дистрибутивом вместе с PowerShell, в документе Quick Reference

Аналогии, программирование с использованием .Net Framework:

Работы с COM-обьектами и .Net аssembly вы можите без проблем создавать обьекты классов либо использовать статические методы

Вот простенькие пример для работы с COM-обьектом Internet Explorer

$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate("http://jthotblog.blogspot.com/")
$ie.Quit()
Remove-Variable ie

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

[System.Console]::WriteLine("Hello")

Создание нового обьекта класса и использование его метода

$sqlcmd = New-Object -TypeName System.Data.SqlClient.SqlCommand
$sqlcmd.CommandText="SELECT * FROM TABLE1"

Могут возникнуть проблемы с использованием стандартных сборок и своих так же, по этому их нужно подгрузить перед использованием

Для стандартных
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Build.Framework")

Для своих
[Reflection.Assembly]::LoadFile("c:\temp\MyAssembly.dll")


Запуск из .bat файла
Стандартный файл для хранения PowerShell скриптов это .ps1 файл

Для запуска файла с командной строки, можно указать полный путь к файлу либо запускать с текущей папки, там где лежит .bat файл.

powershell c:\myScript.ps1

или для текущей папки

powershell .\myScript.ps1

Но могут возникнуть проблемы с загрузкой таким методом, это проблема называться отстуствие цифровой подписи, для этого перед строкой в .bat файле, нужно написать еще 1 строку, которая разрешала бы запускать скрипты без цифровых подписей, либо если у вас есть сертификат, то вы можете подписать скрипт.

Для запуска скрипта без подписи можно использовать, вот такой Cmdlet

powershell Set-ExecutionPolicy RemoteSigned


Если вы собираетесь долго и много программировать на PowerShell, вы конечно можите использовать блокнот, но я бы вам советовал использовать бесплатную тулзовину, для написания скриптов и удобного управления ими, в этой тулзовене есть редактор скриптов, а в нем есть IntelliSense и в нем можно посмотреть полный список стандартных Cmdlet. А так же можно с помощью этой тулзовины можно удобно администрировать с используя PowerShell, это тулзовина называться PowerGUI
PowerGUI

3 комментария:

Andrey комментирует...

Мелкомягкие не перестают удивлять... Будет время попробую PowerShell в действии.

Cisco комментирует...

Спасибо за статью и ссылки. Они мне очень помогли. Толково и доступно описано. Респект.

Анонимный комментирует...

Вот здесь очень хорошая книга на русском о Powershell http://blogs.technet.com/abeshkov/archive/2008/12/24/3172943.aspx