Игорь Любин - PowerShell - ConfeT&QA 2011
Transcript of Игорь Любин - PowerShell - ConfeT&QA 2011
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
Как приступить к работе?
5
http://support.microsoft.com/kb/968929
Пустое синее окошечко
6
Как узнать команды?
Get-Command
7
Как узнать команды?
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
Командлеты
<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 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
Алиасы
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 "[email protected]" `
-From "[email protected]" `
-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:\scripts\test.ps1 `
-computerName $remoteComputer
33
Автоматизация с 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
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: [email protected]
> Skype: igor.lyubin
39