Игорь Любин - PowerShell - ConfeT&QA 2011

39
PowerShell швейцарский нож для тестировщика Игорь Любин

Transcript of Игорь Любин - PowerShell - ConfeT&QA 2011

Page 1: Игорь Любин - PowerShell - ConfeT&QA 2011

PowerShell – швейцарский нож для тестировщика

Игорь Любин

Page 2: Игорь Любин - PowerShell - ConfeT&QA 2011

О себе

$speaker = “Игорь Любин”$degree = “К. ф.-м. н.”

$education = “КГУ”

$city = “Москва”

$work = “Undev.ru”

$SQAdays = 3, 5, 8, 9

$testingExperience = 4 # года

$powershellExperience = 2 # года

2

Page 3: Игорь Любин - PowerShell - ConfeT&QA 2011

Синее окошечко

Get-Host

Name : ConsoleHost

Version : 2.0

InstanceId : 67c14f3c-2df0-46a0-aa8a-bed1a616a1ef

UI : InternalHostUserInterface

CurrentCulture : ru-RU

CurrentUICulture : en-US

PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy

IsRunspacePushed : False

Runspace : System.Management.Automation.Runspaces.LocalRunspace

3

Page 4: Игорь Любин - PowerShell - ConfeT&QA 2011

Для чего нам PowerShell?

Get-Task

> Собирать логи, копировать файлы

> Запускать/останавливать программы и службы

> Выполнять скрипты на удаленной машине

> Проверить почту и вытащить нужную информацию из письма

> Управлять виртуальными машинами VmWare

> Устанавливать дополнительные пакеты в VS2010

4

Page 5: Игорь Любин - PowerShell - ConfeT&QA 2011

Как приступить к работе?

5

http://support.microsoft.com/kb/968929

Page 6: Игорь Любин - PowerShell - ConfeT&QA 2011

Пустое синее окошечко

6

Page 7: Игорь Любин - PowerShell - ConfeT&QA 2011

Как узнать команды?

Get-Command

7

Page 8: Игорь Любин - PowerShell - ConfeT&QA 2011

Как узнать команды?

Get-Command –Verb Set

CommandType Name----------- ----Cmdlet Set-AclCmdlet Set-AliasCmdlet Set-AuthenticodeSignatureCmdlet Set-ContentCmdlet Set-DateCmdlet Set-ExecutionPolicyCmdlet Set-ItemCmdlet Set-ItemPropertyCmdlet Set-LocationCmdlet Set-PSBreakpointCmdlet Set-PSDebug...

8

Page 9: Игорь Любин - PowerShell - ConfeT&QA 2011

Командлеты

<Verb>-<Noun>

9

Page 10: Игорь Любин - PowerShell - ConfeT&QA 2011

Примеры командлетов

Get-Process # Получить список процессов

Remove-Item # Удалить что-то

Get-Help # Получить справку

Set-Alias # Создать новый алиас

New-Item # Создать новый объект/файл

10

Page 11: Игорь Любин - PowerShell - ConfeT&QA 2011

Выполнение команд

Get-ChildItem

11

Page 12: Игорь Любин - PowerShell - ConfeT&QA 2011

Выполнение команд

Get-ChildItem

Каталог: D:\

Mode LastWriteTime Length Name---- ------------- ------ ----d---- 06.09.2011 0:33 booksd---- 27.08.2011 1:09 distrd-r-- 11.10.2011 0:14 documentsd-r-- 10.10.2011 14:45 downloadsd-r-- 10.10.2011 19:42 Dropboxd---- 15.06.2011 20:49 gamesd-r-- 03.08.2011 20:00 musicd---- 15.06.2011 22:48 picturesd---- 29.09.2011 1:27 svnd-r-- 19.09.2011 5:11 video

12

Page 13: Игорь Любин - PowerShell - ConfeT&QA 2011

Алиасы

Get-ChildItem

dir

ls

13

Page 14: Игорь Любин - PowerShell - ConfeT&QA 2011

Алиасы

Get-Alias

CommandType Name Definition

----------- ---- ----------

Alias cat Get-Content

Alias cd Set-Location

Alias clear Clear-Host

Alias cp Copy-Item

Alias diff Compare-Object

Alias echo Write-Output

Alias mv Move-Item

Alias ps Get-Process

Alias pwd Get-Location

Alias rm Remove-Item

...

14

Page 15: Игорь Любин - PowerShell - ConfeT&QA 2011

Справка

Get-Help

help

man

15

Page 16: Игорь Любин - PowerShell - ConfeT&QA 2011

Справка

Get-Help New-Item

ИМЯ

New-Item

ОПИСАНИЕ

Создает новый элемент.

СИНТАКСИС

New-Item [-Path] <string[]> [-Credential <PSCredential>] [-Force]

[-ItemType <string>] [-Value <Object>] [-Confirm] [-WhatIf]

[-UseTransaction] [<CommonParameters>]

ОПИСАНИЕ

Командлет New-Item создает новый элемент и задает его значение. Типы создаваемых элементов зависят от местоположения этих элементов. Например, в файловой системе командлет New-Item создает файлы и папки. В реестре командлет New-Item создает разделы и записи реестра.

16

Page 17: Игорь Любин - PowerShell - ConfeT&QA 2011

Справка

Get-Help New-Item –Examples

-------------------------- ПРИМЕР 1 --------------------------

new-item -path . -name testfile1.txt -type "file" -value "This is a text string."

-------------------------- ПРИМЕР 2 --------------------------

new-item -path c:\ -name logfiles -type directory

-------------------------- ПРИМЕР 3 --------------------------

new-item -path $profile -type file -force

17

Page 18: Игорь Любин - PowerShell - ConfeT&QA 2011

Справка

Get-Help var

Name Category

---- --------

Get-Variable Cmdlet

New-Variable Cmdlet

Set-Variable Cmdlet

Remove-Variable Cmdlet

Clear-Variable Cmdlet

Variable Provider

about_Automatic_Variables HelpFile

about_environment_variables HelpFile

about_preference_variables HelpFile

about_Variables HelpFile

18

Page 19: Игорь Любин - PowerShell - ConfeT&QA 2011

Конвейер

Get-ChildItem "*.txt" | Get-Content

<Содержимое текстового файла 1>

<Содержимое текстового файла 2>

...

19

Page 20: Игорь Любин - PowerShell - ConfeT&QA 2011

Примеры использования конвейра

Get-Help Registry | Set-Content reg.txt

<В файл reg.txt сохраняется справка по реестру>

20

Page 21: Игорь Любин - PowerShell - ConfeT&QA 2011

Примеры использования конвейра

Get-Childitem | `

Measure-Object -Property Length –Sum

<Выводится суммарный размер всех файлов в папке>

21

Page 22: Игорь Любин - PowerShell - ConfeT&QA 2011

Объекты

“string” | Get-Member

TypeName: System.String

Name MemberType

---- ----------

GetType Method

Split Method

Substring Method

ToLower Method

ToUpper Method

Length Property

...

22

Page 23: Игорь Любин - PowerShell - ConfeT&QA 2011

Переменные

# Нетипизированные

$processList = Get-Process

# Типизированные

[DateTime]$date = "02/14/11"

23

Page 24: Игорь Любин - PowerShell - ConfeT&QA 2011

Объекты .Net

$wget = New-Object System.Net.WebClient$wget.DownloadString("http://google.com")

<Выводится HTML страница google.com>

24

Page 25: Игорь Любин - PowerShell - ConfeT&QA 2011

Объекты .Net

[System.Net.DNS]::resolve("87.250.250.3")

HostName AddressList

-------- -----------

www.yandex.ru {87.250.250.3}

http://msdn.microsoft.com/en-us/

25

Page 26: Игорь Любин - PowerShell - ConfeT&QA 2011

Домашнее задание

# Самостоятельно

Get-PSDrive

Where-Object

Foreach-Object

26

Page 27: Игорь Любин - PowerShell - ConfeT&QA 2011

Копирование файлов

Copy-Item $fromFile -Destination $toFile

27

Page 28: Игорь Любин - PowerShell - ConfeT&QA 2011

Копирование файлов

$wget = New-Object System.Net.WebClient

$wget.Credentials = `

[System.Net.CredentialCache]::DefaultNetworkCredentials

$wget.DownloadFile($fromFile, $toFile)

28

Page 29: Игорь Любин - PowerShell - ConfeT&QA 2011

Работа со службами

Get-Service

Start-Service $service

Stop-Service $service

29

Page 30: Игорь Любин - PowerShell - ConfeT&QA 2011

Отправка почты

Send-MailMessage `

-To "[email protected]" `

-From "[email protected]" `

-Subject "Mail from Powershell" `

-Body "Hello"

30

Page 31: Игорь Любин - PowerShell - ConfeT&QA 2011

Работа с почтой

$outlook = New-Object -ComObject outlook.application

$inboxFolder = `

$outlook.GetNamespace("MAPI").getdefaultfolder("olFolderInbox")

$lastMessage = $inboxFolder.Items | Sort-Object ReceivedTime | `

Select-Object -Last 1

Write-Host $lastMessage.Body

31

Page 32: Игорь Любин - PowerShell - ConfeT&QA 2011

Виртуальные машины VmWare

# http://blogs.vmware.com/vipowershell/2008/04/manage-vmware-w.html

Add-PSSnapin VMware.VimAutomation.Core

Connect-VIServer $serverName -Protocol https -Port 8333

$vm = Get-VM -Name $vmName

if ($vm.PowerState -eq "PoweredOn")

{

Stop-VM $Server

}

$snapshot = Get-Snapshot -VM $vm -Name $snapshotName

Set-VM $Server -Snapshot $snapshot

Start-VM $Server

Disconnect-VIServer

Remove-PSSnapin VMware.VimAutomation.Core

32

Page 33: Игорь Любин - PowerShell - ConfeT&QA 2011

Отправка почты

Invoke-Command `

-filepath c:\scripts\test.ps1 `

-computerName $remoteComputer

33

Page 34: Игорь Любин - PowerShell - ConfeT&QA 2011

Автоматизация с WASP

# http://wasp.codeplex.com/

Import-Module "D:\downloads\WASP\WASP.dll"

D:\downloads\WASP\npp.5.8.Installer.exe

$w = "Installer*"

Select-Window $w | Set-WindowActive

Select-Window $w | Select-Control "OK" | Send-Click

$w = "*Notepad*"

Select-Window $w | Select-Control "&Далее >" | Send-Click

Select-Window $w | Select-Control "Принима&ю" | Send-Click

Select-Window $w | Select-Control "&Далее >" | Send-Click

Select-Window $w | Select-Control "Установить" | Send-Click

34

Page 35: Игорь Любин - PowerShell - ConfeT&QA 2011

NuGet в VS2010

Get-Package –ListAvailable Selenium

Id Version

-- -------

Selenium.RC 2.8.0

Selenium.Support 2.8.0

Selenium.WebDriver 2.8.0

Selenium.WebDriverBackedSel... 2.8.0

...

35

Page 36: Игорь Любин - PowerShell - ConfeT&QA 2011

NuGet в VS2010

Install-Package Selenium.WebDriver

Attempting to resolve dependency 'Newtonsoft.Json (= 4.0.2)'.

Attempting to resolve dependency 'DotNetZip (= 1.9.1.8)'.

Successfully installed 'Newtonsoft.Json 4.0.2'.

Successfully installed 'DotNetZip 1.9.1.8'.

Successfully installed 'Selenium.WebDriver 2.8.0'.

Successfully added 'Newtonsoft.Json 4.0.2' to Workshop.

Successfully added 'DotNetZip 1.9.1.8' to Workshop.

Successfully added 'Selenium.WebDriver 2.8.0' to Workshop.

36

Page 37: Игорь Любин - PowerShell - ConfeT&QA 2011

Пример подсветки кода

# http://powergui.org

$date = Get-Date -Format "yyyy-MM-dd"

$time = Get-Date -Format "HH:mm:ss"

# Проверка: есть ли файл для скачивания?

if ( Test-Path $fileForDownload )

{

mkdir $sourceDir

Copy-Item $fileForDownload -Destination $sourceDir

}

37

Page 38: Игорь Любин - PowerShell - ConfeT&QA 2011

Итоги

Get-Results

> Получили информацию о первичных понятиях PowerShell> Командлеты

> Алиасы

> Конвейер

> Узнали важные команды> Get-Command

> Get-Help

> Get-Member

> Разобрали решение практических задач> Собирать логи, копировать файлы

> Запускать/останавливать программы и службы

> Выполнять скрипты на удаленной машине

> Проверить почту и вытащить нужную информацию из письма

> Управлять виртуальными машинами VmWare

> Устанавливать дополнительные пакеты в VS2010

38

Page 39: Игорь Любин - PowerShell - ConfeT&QA 2011

Конец

Stop-Process POWERPNT

Спасибо за внимание! Вопросы?

Ссылки:> http://habrahabr.ru/blogs/powershell/113913/

> http://www.techdays.ru/Category.aspx?Tag=PowerShell

> http://support.microsoft.com/kb/968929

> http://msdn.microsoft.com/en-us/

> http://powergui.org

> http://blogs.vmware.com/vipowershell/2008/04/manage-vmware-w.html

> http://wasp.codeplex.com/

> http://nuget.org/

> E-mail: [email protected]

> Skype: igor.lyubin

39