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

            Игорь Любин
О себе




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

$city = “Москва”
$work = “Undev.ru”
$SQAdays = 3, 5, 8, 9

$testingExperience = 4 # года
$powershellExperience = 2 # года




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




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
Для чего нам PowerShell?




Get-Task
>   Собирать логи, копировать файлы
>   Запускать/останавливать программы и службы
>   Выполнять скрипты на удаленной машине
>   Проверить почту и вытащить нужную информацию из письма
>   Управлять виртуальными машинами VmWare
>   Устанавливать дополнительные пакеты в VS2010




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




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


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




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




Get-Command




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




Get-Command –Verb Set
CommandType   Name
-----------   ----
Cmdlet        Set-Acl
Cmdlet        Set-Alias
Cmdlet        Set-AuthenticodeSignature
Cmdlet        Set-Content
Cmdlet        Set-Date
Cmdlet        Set-ExecutionPolicy
Cmdlet        Set-Item
Cmdlet        Set-ItemProperty
Cmdlet        Set-Location
Cmdlet        Set-PSBreakpoint
Cmdlet        Set-PSDebug
...



                                                       8
Командлеты




<Verb>-<Noun>




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




Get-Process   #   Получить список процессов
Remove-Item   #   Удалить что-то
Get-Help      #   Получить справку
Set-Alias     #   Создать новый алиас
New-Item      #   Создать новый объект/файл




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




Get-ChildItem




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




Get-ChildItem
   Каталог: D:

Mode              LastWriteTime      Length Name
----              -------------      ------ ----
d----      06.09.2011      0:33             books
d----      27.08.2011      1:09             distr
d-r--      11.10.2011      0:14             documents
d-r--      10.10.2011     14:45             downloads
d-r--      10.10.2011     19:42             Dropbox
d----      15.06.2011     20:49             games
d-r--      03.08.2011     20:00             music
d----      15.06.2011     22:48             pictures
d----      29.09.2011      1:27             svn
d-r--      19.09.2011      5:11             video



                                                        12
Алиасы




Get-ChildItem
dir
ls




                         13
Алиасы




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
Справка




Get-Help
help
man




                     15
Справка




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
Справка




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
Справка




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
Конвейер




Get-ChildItem "*.txt" | Get-Content
<Содержимое текстового файла 1>
<Содержимое текстового файла 2>
...




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




Get-Help Registry | Set-Content reg.txt

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




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




Get-Childitem | `
    Measure-Object -Property Length –Sum

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




                                                               21
Объекты




“string” | Get-Member
TypeName: System.String

Name            MemberType
----            ----------
GetType         Method
Split           Method
Substring       Method
ToLower         Method
ToUpper         Method
Length          Property
...




                                       22
Переменные




# Нетипизированные
$processList = Get-Process

# Типизированные
[DateTime]$date = "02/14/11"




                                  23
Объекты .Net




$wget = New-Object System.Net.WebClient
$wget.DownloadString("http://google.com")
<Выводится HTML страница google.com>




                                                      24
Объекты .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
Домашнее задание




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

Get-PSDrive
Where-Object
Foreach-Object




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




Copy-Item $fromFile -Destination $toFile




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




$wget = New-Object System.Net.WebClient

$wget.Credentials = `
    [System.Net.CredentialCache]::DefaultNetworkCredentials

$wget.DownloadFile($fromFile, $toFile)




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




Get-Service
Start-Service $service
Stop-Service $service




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




Send-MailMessage `
  -To "user01@example.com" `
  -From "user02@example.com" `
  -Subject "Mail from Powershell" `
  -Body "Hello"




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




$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
Виртуальные машины 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
Отправка почты




Invoke-Command `
  -filepath c:scriptstest.ps1 `
  -computerName $remoteComputer




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




#   http://wasp.codeplex.com/

Import-Module "D:downloadsWASPWASP.dll"
D:downloadsWASPnpp.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
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
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
Пример подсветки кода




# 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
Итоги




Get-Results
>   Получили информацию о первичных понятиях PowerShell
     >   Командлеты
     >   Алиасы
     >   Конвейер
>   Узнали важные команды
     >   Get-Command
     >   Get-Help
     >   Get-Member
>   Разобрали решение практических задач
     >   Собирать логи, копировать файлы
     >   Запускать/останавливать программы и службы
     >   Выполнять скрипты на удаленной машине
     >   Проверить почту и вытащить нужную информацию из письма
     >   Управлять виртуальными машинами VmWare
     >   Устанавливать дополнительные пакеты в VS2010



                                                                  38
Конец




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: ilyubin@yandex.ru
    >   Skype: igor.lyubin



                                                                            39

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

  • 1.
    PowerShell – швейцарскийнож для тестировщика Игорь Любин
  • 2.
    О себе $speaker =“Игорь Любин” $degree = “К. ф.-м. н.” $education = “КГУ” $city = “Москва” $work = “Undev.ru” $SQAdays = 3, 5, 8, 9 $testingExperience = 4 # года $powershellExperience = 2 # года 2
  • 3.
    Синее окошечко 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
  • 4.
    Для чего намPowerShell? Get-Task > Собирать логи, копировать файлы > Запускать/останавливать программы и службы > Выполнять скрипты на удаленной машине > Проверить почту и вытащить нужную информацию из письма > Управлять виртуальными машинами VmWare > Устанавливать дополнительные пакеты в VS2010 4
  • 5.
    Как приступить кработе? http://support.microsoft.com/kb/968929 5
  • 6.
  • 7.
  • 8.
    Как узнать команды? Get-Command–Verb Set CommandType Name ----------- ---- Cmdlet Set-Acl Cmdlet Set-Alias Cmdlet Set-AuthenticodeSignature Cmdlet Set-Content Cmdlet Set-Date Cmdlet Set-ExecutionPolicy Cmdlet Set-Item Cmdlet Set-ItemProperty Cmdlet Set-Location Cmdlet Set-PSBreakpoint Cmdlet Set-PSDebug ... 8
  • 9.
  • 10.
    Примеры командлетов Get-Process # Получить список процессов Remove-Item # Удалить что-то Get-Help # Получить справку Set-Alias # Создать новый алиас New-Item # Создать новый объект/файл 10
  • 11.
  • 12.
    Выполнение команд Get-ChildItem Каталог: D: Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 06.09.2011 0:33 books d---- 27.08.2011 1:09 distr d-r-- 11.10.2011 0:14 documents d-r-- 10.10.2011 14:45 downloads d-r-- 10.10.2011 19:42 Dropbox d---- 15.06.2011 20:49 games d-r-- 03.08.2011 20:00 music d---- 15.06.2011 22:48 pictures d---- 29.09.2011 1:27 svn d-r-- 19.09.2011 5:11 video 12
  • 13.
  • 14.
    Алиасы 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
  • 15.
  • 16.
    Справка 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
  • 17.
    Справка 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
  • 18.
    Справка 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
  • 19.
    Конвейер Get-ChildItem "*.txt" |Get-Content <Содержимое текстового файла 1> <Содержимое текстового файла 2> ... 19
  • 20.
    Примеры использования конвейра Get-HelpRegistry | Set-Content reg.txt <В файл reg.txt сохраняется справка по реестру> 20
  • 21.
    Примеры использования конвейра Get-Childitem| ` Measure-Object -Property Length –Sum <Выводится суммарный размер всех файлов в папке> 21
  • 22.
    Объекты “string” | Get-Member TypeName:System.String Name MemberType ---- ---------- GetType Method Split Method Substring Method ToLower Method ToUpper Method Length Property ... 22
  • 23.
    Переменные # Нетипизированные $processList =Get-Process # Типизированные [DateTime]$date = "02/14/11" 23
  • 24.
    Объекты .Net $wget =New-Object System.Net.WebClient $wget.DownloadString("http://google.com") <Выводится HTML страница google.com> 24
  • 25.
    Объекты .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
  • 26.
    Домашнее задание # Самостоятельно Get-PSDrive Where-Object Foreach-Object 26
  • 27.
  • 28.
    Копирование файлов $wget =New-Object System.Net.WebClient $wget.Credentials = ` [System.Net.CredentialCache]::DefaultNetworkCredentials $wget.DownloadFile($fromFile, $toFile) 28
  • 29.
  • 30.
    Отправка почты Send-MailMessage ` -To "user01@example.com" ` -From "user02@example.com" ` -Subject "Mail from Powershell" ` -Body "Hello" 30
  • 31.
    Работа с почтой $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
  • 32.
    Виртуальные машины 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
  • 33.
    Отправка почты Invoke-Command ` -filepath c:scriptstest.ps1 ` -computerName $remoteComputer 33
  • 34.
    Автоматизация с WASP # http://wasp.codeplex.com/ Import-Module "D:downloadsWASPWASP.dll" D:downloadsWASPnpp.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
  • 35.
    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
  • 36.
    NuGet в VS2010 Install-PackageSelenium.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
  • 37.
    Пример подсветки кода #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
  • 38.
    Итоги Get-Results > Получили информацию о первичных понятиях PowerShell > Командлеты > Алиасы > Конвейер > Узнали важные команды > Get-Command > Get-Help > Get-Member > Разобрали решение практических задач > Собирать логи, копировать файлы > Запускать/останавливать программы и службы > Выполнять скрипты на удаленной машине > Проверить почту и вытащить нужную информацию из письма > Управлять виртуальными машинами VmWare > Устанавливать дополнительные пакеты в VS2010 38
  • 39.
    Конец 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: ilyubin@yandex.ru > Skype: igor.lyubin 39