Создание и запуск сценариев Powershell

Содержание

Слайд 2

Массивы, операторы и управляющие инструкции Вопрос №1 Вопрос №2 Технология PowerShell

Массивы, операторы и управляющие инструкции

Вопрос №1

Вопрос №2

Технология PowerShell Desired State Configuration


Вопрос №3

Разновидность сценариев PowerShell Workflow

Слайд 3

Массивы, операторы и управляющие инструкции Вопрос №1

Массивы,
операторы и
управляющие
инструкции

Вопрос №1

Слайд 4

Типы массивов: Текстовые Числовые Действие над массивом: Создание Выборка Изменение Массивы

Типы массивов:
Текстовые
Числовые

Действие над массивом:
Создание
Выборка
Изменение

Массивы

Слайд 5

Для создания числового массива необходимо объявить переменную, которой присваивается через запятую

Для создания числового массива необходимо объявить переменную, которой присваивается через запятую

различные числа (элементы массива)

$a1 = 1,2,3,4,5,6,7,8,9,10

Для создания текстового массива необходимо объявить переменную, которой присваивается через запятую в кавычках различные слова, буквы и др. (элементы массива)

$a2 = “A”, “B”, “C”, “D”, “E”, “F”, “G”

Выборка элементов из одномерного массива
Выборка всего массива
Выборка одного элемента массива
Выборка нескольких элементов из массива
Выборка диапазона значений из массива
Выборка объединенных диапазонов значений

$a1 = 1..10

или

$a1.Length - определить количество элементов в массиве

CAST - объявление массива
$a3 = @(1,2,3,4,5)
$a4 = @(get-process; get-date)

Слайд 6

Выборка всего массива $a1 $a2 Вывод в виде столба Write-host $a1

Выборка всего массива

$a1

$a2

Вывод в виде столба

Write-host $a1

Write-host $a2

Вывод в виде строки

Выбор

одного элемента из массива

$a1[0] - первый элемент массива

$a1[-1] - последний элемент массива

Выбор нескольких элементов из массива

$a1[1,3,5] - 2,4,6 элементы массива

$a1[0,-1] - первый и последний элементы массива

Выбор диапазона значений из массива

$a1[0..2] - 1,2,3 элементы массива

$a1[2..-1] - 3,2,1,последний элементы массива

Выбор объединённых диапазонов значений из массива

$a1[0..2+5..7] - 1,2,3,6,7,8 элементы массива

Слайд 7

Изменение значения элемента в массиве $a1[0] = 5 первому элементу массива

Изменение значения элемента в массиве

$a1[0] = 5 первому элементу массива изменили

значение на 5

Добавление элемента в конец массива

$a1 += 5 добавляем к массиву значение 5 и оно становится последним элементом

Добавление элемента в любое место массива

$a1 = $a1[0..2] + 5 + $a1[3..9] добавляем к массиву значение 5 в качестве 4-го элемента нового массива

Исключение любого элемента из массива

$a1 = $a1[0..2] + $a1[4..10] исключаем в массиве 4-ый элемент нового массива

Удаление массива

Remove-Variable –name a1 удаляем массив с именем a1

Слайд 8

Арифметические операторы

Арифметические операторы

Слайд 9

Операторы присваивания

Операторы присваивания

Слайд 10

Операторы сравнения Базовый вариант операторов сравнения по умолчанию не учитывает регистр

Операторы сравнения

Базовый вариант операторов сравнения по умолчанию не учитывает регистр

букв. Если оператор начинается с буквы “c” (например –ceq, -cne и т.д.), при сравнении регистр букв будет учитываться.
Слайд 11

Логические операторы

Логические операторы

Слайд 12

Слайд 13

Слайд 14

Clear-Host $a= Read-host ‘Введите значение переменной $a' Write-Host '##IF##' if ($a

Clear-Host
$a= Read-host ‘Введите значение переменной $a'
Write-Host '##IF##'
if ($a -eq 5)
{Write-Host

'$a = 5'}
Слайд 15

Слайд 16

Clear-Host $a= Read-host 'Введите значение переменной $a' Write-Host '##IF...ELSE##' if ($a

Clear-Host
$a= Read-host 'Введите значение переменной $a'
Write-Host '##IF...ELSE##'
if ($a -eq 5)
{Write-Host

'$a=5'}
else
{Write-Host '$a <> 5'}
Слайд 17

Слайд 18

Clear-Host $a= Read-host ' Введите значение переменной $a' Write-Host '##IF...ELSEIF…ELSE##' if

Clear-Host
$a= Read-host ' Введите значение переменной $a'
Write-Host '##IF...ELSEIF…ELSE##'
if ($a -eq

5)
{Write-Host '$a = 5'}
elseif ($a -lt 5)
{Write-Host '$a < 5'}
else
{Write-Host '$a > 5'}
Слайд 19

Практическое задание №1 Определите какой сейчас месяц с помощью Powershell и

Практическое задание №1

Определите какой сейчас месяц с помощью Powershell
и по

его номеру определите время года

Clear-Host
$zima=1,2,12
$osen=9,10,11
$vesna=3,4,5
$leto=6,7,8
$mesyaz=get-date
if (($mesyaz.Month -eq $zima[0]) -or ($mesyaz.Month -eq $zima[1]) -or ($mesyaz.Month -eq $zima[2]))
{ write-host `Сейчас зима` }
elseif ($osen[0..2] -eq $mesyaz.Month)
{ write-host `Сейчас осень` }
elseif (($mesyaz.Month -ge $vesna[0]) -and ($mesyaz.Month -le $vesna[2]))
{ write-host `Сейчас весна` }
elseif (($mesyaz.Month -ge 6) -or ($mesyaz.Month -le 8))
{ write-host `Сейчас лето` }
Изменять дату: Set-Date -Date 1.XX.15

Слайд 20

Слайд 21

Clear-Host $a= Read-host 'Введите значение переменной $a' Write-Host '##IF NOT##' if

Clear-Host
$a= Read-host 'Введите значение переменной $a'
Write-Host '##IF NOT##'
if (-not($a -eq

5))
{Write-Host '$a не равно 5'}
else
{Write-Host '$a = 5'}
Слайд 22

Слайд 23

Clear-Host $x = Read-host 'Введите значение переменной $x от 0 до

Clear-Host
$x = Read-host 'Введите значение переменной $x от 0 до 5'
Write-Host

'##SWITCH##'
switch ($x)
{ 0 {Write-Host 'Вы ввели 0'}
1 {Write-Host 'Вы ввели 1'}
2 {Write-Host 'Вы ввели 2'}
3 {Write-Host 'Вы ввели 3'}
4 {Write-Host 'Вы ввели 4'}
5 {Write-Host 'Вы ввели 5'}
}
Слайд 24

Практическое задание №2 Создайте сценарий с использованием конструкции Switch, который позволяет

Практическое задание №2

Создайте сценарий с использованием конструкции Switch, который позволяет

быстро переключать сетевые настройки операционной системы (например, локальная сеть или интернет). При этом, при включении настроек Интернет должен запускаться браузер IE, а в случае локального доступа браузер должен закрываться. После применения настроек конфигурация TCP/IP должна быть отображена на экране. В случае неправильного ввода данных должно выдаваться сообщение.

Clear-Host
$network = read-host "Введите 1 для выбора локальной сети или 2 для интернета"
switch ($network)
{
'1'
{$NetAdapter = Get-NetAdapter -Name Ethernet0;
$NetAdapter | remove-NetIPAddress;
$NetAdapter | Remove-NetRoute -DestinationPrefix 0.0.0.0/0;
$NetAdapter | Set-DnsClientServerAddress -ResetServerAddresses
$NetAdapter | New-NetIPAddress -IPAddress 10.10.10.20 -PrefixLength 24
stop-process -Name Iexplore -Force;
gip;
Write-Host "Локальная сеть"}
'2'
{$NetAdapter = Get-NetAdapter -Name Ethernet0;
$NetAdapter | remove-NetIPAddress;
$NetAdapter | Remove-NetRoute -DestinationPrefix 0.0.0.0/0;
$NetAdapter | Set-DnsClientServerAddress -ResetServerAddresses
$NetAdapter | New-NetIPAddress -IPAddress 192.168.0.2 -PrefixLength 24 -DefaultGateway 192.168.0.1
$NetAdapter | Set-DnsClientServerAddress -ServerAddresses 192.168.0.1
Start-Process "C:\Program Files (x86)\Internet Explorer\Iexplore.exe" -WindowStyle Maximized;
gip;
Write-Host “Вы в Интернете" }
Default {write-host "Не правильный ввод"}
}

Слайд 25

Слайд 26

Слайд 27

Цикл со счетчиком #for# Clear-Host for ($a = 1; $a -lt

Цикл со счетчиком

#for#
Clear-Host
for ($a = 1; $a -lt 6; $a++)
{

Write-Host $a }
Write-Host '############'
for ($i = 10; $i -gt 0; $i=$i-2)
{ Write-Host $i }
Слайд 28

Слайд 29

Clear-Host # Посчитать количество служб # $tab = "`t" $a =

Clear-Host
# Посчитать количество служб #
$tab = "`t"
$a = 1
foreach ($service

in Get-Service)
{
Write-Host $a -NoNewline
Write-Host $tab -NoNewline
Write-Host $service.Status -NoNewline
Write-Host $tab -NoNewline
Write-Host $service.Name
$a = $a + 1
}
Слайд 30

Clear-Host $tab = "`t" $a = 0 foreach ($service in Get-Service)

Clear-Host
$tab = "`t"
$a = 0
foreach ($service in Get-Service)
{ if ($service

| Where-Object -Property Status -like "Running")
{ $a = $a + 1
Write-Host $a -NoNewline
Write-Host $tab -NoNewline
Write-Host $service.Name
}
}

Практическое задание №3

Определить количество служб, находящихся в состоянии выполнения

Слайд 31

Слайд 32

Clear-Host $tab= “`t" $a=0 while ($a -le 5) { Write-Host $a $tab -NoNewline $a++ }

Clear-Host
$tab= “`t"
$a=0
while ($a -le 5)
{ Write-Host $a $tab -NoNewline
$a++

}
Слайд 33

Слайд 34

//Делать до тех пор, пока условие верно Clear-Host $a=10 do {

//Делать до тех пор, пока условие верно
Clear-Host
$a=10
do
{ $a= Read-Host 'Введите

значение переменной $a'
Write-Host $a }
while ($a -eq 10)
Слайд 35

Слайд 36

//Цикл, который повторяет набор команд, пока выполняется условие Clear-Host $a=10 do

//Цикл, который повторяет набор команд, пока выполняется условие
Clear-Host
$a=10
do
{ $a= Read-Host

'Enter $a value'
Write-Host $a }
until ($a -eq 10)
Слайд 37

Использование готовых шаблонов управляющих инструкций, DSC, Workflow Одновременно нажмите на клавиши CTRL и J

Использование готовых шаблонов управляющих инструкций, DSC, Workflow

Одновременно нажмите на клавиши

CTRL и J
Слайд 38

Установка и использование Script Analyzer и Script Browser 1.Скопировать дистрибутив ScriptBrowser

Установка и использование Script Analyzer и Script Browser

1.Скопировать дистрибутив ScriptBrowser на

рабочий стол виртуальной машины и осуществить его установку с параметрами по умолчанию.

2.Скопировать папку Scripts в каталог C:\Users\Administrator\Documents\WindowsPowerShell виртуальной машины с заменой всех содержащихся в ней файлов

3.Запустить Powershell_ise и проверить наличие новых оснасток Script Analyzer и Script Browser.

4. Перейти в Powershell_ise в оснастке Script Browser в раздел Downloads для просмотра скаченных из Internet скриптов.

5. Выбрать в Powershell_ise в оснастке Script Browser в разделе Downloads в списке второй скрипт (Get operating System info).

6. Два раза кликнуть мышью на выбранный скрипт для отображения фрагмента исходного кода. (потребуется включить разрешение в безопасности Internet Explorer).

7. Нажмите на экране кнопку Открыть для возможности загрузки скрипта в Powershel_ISE.

8. Теперь имеется возможность анализа скрипта самостоятельно или при помощи оснастки Script Analyzer.

9. В случае использования оснастки Script Analyzer перейдите в нее и нажмите кнопку на экране «Анализировать скрипт».

Слайд 39

Результат анализа скрипта при помощи оснастки Script Analyzer

Результат анализа скрипта при помощи оснастки Script Analyzer

Слайд 40

Выберите первый скрипт (Get-computers …) при помощи оснастки Script Browser и

Выберите первый скрипт (Get-computers …) при помощи оснастки Script Browser и

откройте его в Powershell_ISE.
Данный скрипт имеет графический интерфейс, который позволяет разрабатывать Powershell.
Запустите скрипт на исполнение и посмотрите его возможности

Перед нажатием кнопки Get Status предварительно создайте текстовый файл с именем, требуемым скриптом, в котором внесите имя опрашиваемого компьютера

Слайд 41

Технология PowerShell Desired State Configuration Вопрос №2

Технология
PowerShell Desired State Configuration

Вопрос №2

Слайд 42

Во многом работа системного администратора связана с выполнением повторяющиеся операций, которые

Во многом работа системного администратора связана с выполнением повторяющиеся операций, которые

сводятся к созданию, удалению, изменению настроек, установки и настройки ролей и компонентов системы. Абсолютно естественным является желание максимально автоматизировать такие задачи. Одним из инструментов, который может помочь администратору, является PowerShell Desired State Configuration (настройка требуемого состояния), которая впервые была представлена в Windows Server 2012 R2.
Используя PowerShell DSC, вы описываете как хотите, чтобы ваша система выглядела в конечном итоге, и далее происходит ее автоматическая настройка в соответствии с заданными требованиями.
Слайд 43

Конфигурация и её применение Рассмотрим, как работает Desired State Configuration на

Конфигурация и её применение
Рассмотрим, как работает Desired State Configuration на примере:

Необходимо развернуть на удаленном сервере test1:
роль Hyper-V с утилитами администрирования;
создать каталоги для хранения файлов в форматах ISO, VHD и конфигураций виртуальных машин;
внести изменения в реестр, для учета в службе Hyper-V созданных ранее каталогов.

Далее приводится конфигурационный скрипт, с помощью которого проводится эта настройка.

Слайд 44

Методика использования DSC Этап №1 Создать скрипт в Powershell_ISE

Методика использования DSC

Этап №1 Создать скрипт в Powershell_ISE

Слайд 45

Этап №2. Выполнить скрипт в Powershell_ISE (клавиша на клавиатуре F5) Этап

Этап №2. Выполнить скрипт в Powershell_ISE (клавиша на клавиатуре F5)
Этап №3.

Создать mof - файл в Powershell_ISE выполнив команду: hvconfig (название задается параметром Configuration на первом этапе)

Методика использования DSC

Слайд 46

PowerShell DSC это конфигурационный скрипт и начинается он с ключевого слова

PowerShell DSC это конфигурационный скрипт и начинается он с ключевого слова

Configuration, с помощью которого описывается главный контейнер конфигурации. По сути, этот блок является функцией. Внутри блока Сonfiguration вы можете указать желаемые настройки для каждого из компьютеров, которые есть в вашем окружении.
Блок конкретного компьютера начинается с ключевого слова Node. Далее следует имя целевого компьютера, которое может быть, как постоянным, так и задаваться при помощи переменной. Внутри блока Node вы уже указываете желаемую настройку для вашего конечного компьютера, с помощью ресурсов.
Слайд 47

Ресурсы DSC – это специализированные модули PowerShell, с помощью которых и

Ресурсы DSC – это специализированные модули PowerShell, с помощью которых и

осуществляется финальная настройка целевых узлов. Ресурсы разделяются на встроенные и пользовательские. Встроенных ресурсов всего 12. Тем не менее легко можно дописать недостающие ресурсы, если возникнет такая необходимость.
Слайд 48

Для описания того, как наша система должна будет выглядеть, используем: Ensure

Для описания того, как наша система должна будет выглядеть, используем:
Ensure

= "Present"
С помощью этой команды мы убеждаемся, что нужные нам компоненты будут присутствовать на конечном компьютере, после того, как конфигурация будет применена.
Применение конфигурации выглядит следующим образом:
Слайд 49

После запуска конфигурационного скрипта создается MOF-файл (Managed Object Format файл). Это

После запуска конфигурационного скрипта создается MOF-файл (Managed Object Format файл). Это

текстовый файл, в котором содержатся все требования по настройке, которые в дальнейшем применяются на целевом компьютере. Имя MOF-файла будет соответствовать значению Node. Сам файл будет находиться в папке, название которой будет совпадать с названием Configuration. Здесь важно отметить, что использование MOF-файлов позволяет использовать DSC не только для настройки компьютеров под управлением Windows, но и под управлением Linux.
Далее необходимо MOF-файл передать на целевой компьютер (на котором мы хотим развернуть роль). Конфигурация применяется двумя способами: с помощью метода Push (конфигурационный скрипт должен быть перенесен на конечный компьютер вручную) или метода Pull (создается Pull Server, который периодически проверяет корректность конфигурации, и если клиент сконфигурирован неверно, то Pull Server отправляет на него требуемые настройки).
Слайд 50

Применение конфигурации осуществляется с помощью следующих командлетов (в случае необходимости выбора

Применение конфигурации осуществляется с помощью следующих командлетов (в случае необходимости выбора

учетной записи):
$Session = New-CimSession -ComputerName "test1" -Credential Administrator
Start-DscConfiguration -Path C:\windows\system32\hvconfig -CimSession $Session -Wait -Verbose
или если учетные записи совпадают:
Start-DscConfiguration -Path C:\windows\system32\hvconfig -wait -verbose
Слайд 51

C помощью параметра –Path указываем путь к MOF-файлу. Время применения конфигурации

C помощью параметра –Path указываем путь к MOF-файлу. Время применения конфигурации

зависит от того, насколько соответствует текущая настройка компьютера тем требованиям, что указаны в MOF-файле.
После применения конфигурации возможность PowerShell DSC не заканчиваются. Ведь часто нам нужно определить произошли ли какие-то изменения в настройках. Сделать это можно с помощью командлета:
Test-DscConfiguration –CimSession $session
Слайд 52

Запустив его, мы запустим проверку: совпадает ли текущая конфигурация системы с

Запустив его, мы запустим проверку: совпадает ли текущая конфигурация системы с

той, что прописана в MOF-файле. Если конфигурации совпадают, то будет возвращено значение «True», в противном случае – «False».
Что делать, если мы узнаем об изменении конфигурации? Если мы используем PowerShell DSC достаточно всего лишь снова запустить командлет и все недостающие элементы будут восстановлены:

Start-DscConfiguration -Path C:\windows\system32\hvconfig -wait -verbose

Слайд 53

Преимущества PowerShell Desired State Configuration является то, что его использование позволяет

Преимущества PowerShell Desired State Configuration является то, что его использование позволяет

точно настроить конечный компьютер без каких-либо дополнительный проверок. Мы просто описываем как хотим, чтобы системы выглядела; все остальное делается автоматически, во-вторых PowerShell DSC позволяет отследить возможные изменения настроек и быстро их исправить; в-третьих, с помощью PowerShell DSC можно одновременно и одинаково сконфигурировать несколько компьютеров.
Слайд 54

Практическое задание №1 Включите удаленное управление на сервере test1, настройте доверие

Практическое задание №1

Включите удаленное управление на сервере test1, настройте доверие между

компьютерами и проверьте возможность удаленного управления сервером test1 с компьютера test2.

Практическое задание №2

Создайте файл скрипта DSC на компьютере test2 и выполните его. Примените mof – файл на удаленном сервере. Перегрузите удаленный сервер и проверьте применение требуемой конфигурации.

Практическое задание №3

Проверьте состояние исполненной конфигурации. Измените параметры конфигурации (удалите подкаталог ISO) на сервере test1 и проверьте состояние измененной конфигурации. Исправьте измененную конфигурацию на исходную.

Слайд 55

Разновидность сценариев PowerShell Workflow Вопрос №3

Разновидность сценариев PowerShell Workflow

Вопрос №3

Слайд 56

Windows PowerShell Workflow (рабочий процесс) нововведение Windows Management Framework версии 3.0,

Windows PowerShell Workflow (рабочий процесс) нововведение Windows Management Framework версии 3.0,

представляющий собой специализированную разновидность сценариев Windows PowerShell. Он описывает набор операций, одни из которых должны выполняться в определенной последовательности, тогда как другие могут выполняться параллельно.
Windows PowerShell Workflow устанавливается вместе с Windows Server 2012 и Windows 8. Он также доступен для Windows 7, Windows Server 2008 и Windows Server 2008 R2. Для запуска рабочего процесса обязательно нужна одна из этих ОС. Однако адресатом рабочего процесса, т. е. системой, в который запускаются задания, может быть любая версия Windows, в зависимости от того, какое именно задание вы пытаетесь выполнить.
Слайд 57

При написании рабочих процессов используется стандартный синтаксис Windows PowerShell. Windows PowerShell

При написании рабочих процессов используется стандартный синтаксис Windows PowerShell. Windows PowerShell

Workflow активно использует функции удаленного выполнения (remoting) Windows PowerShell.
Windows PowerShell Workflow не выполняет рабочий процесс, а преобразовывает сценарий в XAML (англ. eXtensible Application Markup Language) — расширяемый язык разметки для приложений, основанный на XML языке разметки для декларативного программирования приложений, разработанный Microsoft, а затем передает его Windows Workflow Foundation (WWF), являющейся частью Microsoft .NET Framework.
Слайд 58

Слайд 59

WWF принимает XAML-данные и выполняет рабочий процесс. В WWF предусмотрены контрольные

WWF принимает XAML-данные и выполняет рабочий процесс. В WWF предусмотрены контрольные

точки для отслеживания хода рабочего процесса. Поэтому, если компьютер, на котором выполняется рабочий процесс, по каким-либо причинам завершит работу (например, его выключат), то после повторного запуска компьютера выполнение процесса продолжится с того места, на котором оно остановилось.
Кроме того, можно вручную приостанавливать и возобновлять рабочие процессы. Например, у вас может быть рабочий процесс, который выполняет определенный набор заданий до момента, когда требуется ручное вмешательство. Вы можете сделать так, чтобы в этот момент он приостанавливал работу и автоматически отправлял сообщение об изменении статуса по электронной почте. После выполнения ручных операций можно возобновить рабочий процесс и позволить ему выполняться дальше.
Слайд 60

Если нужно, рабочие процессы могут выполнять операции параллельно. Например, если у

Если нужно, рабочие процессы могут выполнять операции параллельно. Например, если у

вас имеется набор независимых заданий, которые можно выполнять в любом порядке, то их можно запустить примерно в одно и то же время. Это сократит общее время выполнения рабочего процесса, а значит, повысит эффективность. Кроме того, WWF отслеживает каждый этап рабочего процесса. Это значит, что можно сгенерировать подробный журнал аудита с данными о том, какие задания выполнялись, очень полезный при устранении неполадок.
Слайд 61

Практический пример использования workflow Задача: Развернуть 50 виртуальных машин одинаковой конфигурации

Практический пример использования workflow
Задача: Развернуть 50 виртуальных машин одинаковой конфигурации с

именами VM<номер> от 1 до 50.
Решение № 1. Написать код без использования массивов и циклов: Последовательный запуск 50 раз командлета New-VM с различными именами виртуальных машин.
Решение № 2. Использовать массивы и циклы:
 1..50 | ForEach-Object { New-VM -Name VM$_ -MemoryStartupBytes 512MB –NewVHDPath C:\HV\VHD\VM$_.vhdx -NewVHDSizeBytes 10GB }
 В цикле задания выполняются последовательно. Этот тот случай, когда рабочий процесс может серьезно увеличить скорость выполнения вашего скрипта.
Слайд 62

Решение №3. Использование workflow. Для этого необходимо добавить параметр –Parallel в

Решение №3. Использование workflow. Для этого необходимо добавить параметр –Parallel в

командлете ForEach-Object, который позволяет выполнять 5 потоков одновременно. Таким образом, если ваше оборудование справится с нагрузкой, то создание виртуальных машин может стать до 5 раз быстрее.
 workflow New-VirtualMachines
{
$VMs = 1..50
foreach -parallel ($VM in $VMs)
{
New-VM -Name VM$VM -MemoryStartupBytes 512MB –NewVHDPath C:\HV\VHD\VM$VM.vhdx -NewVHDSizeBytes 10GB
}
}
Слайд 63

Рабочие процессы могут принимать параметры, так же, как и функции, например

Рабочие процессы могут принимать параметры, так же, как и функции, например

следующий рабочий процесс в качестве входных параметров принимает имя виртуальной машины, число создаваемых виртуальных машин и размер виртуального диска:
workflow New-VirtualMachines
{
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,Position=0)]$VMName,
[Parameter(Mandatory=$true,Position=1)]$VMCount,
[Parameter(Mandatory=$true,Position=2)]$VHDSize
)
$VMs = 1..$VMCount
foreach -parallel ($VM in $VMs)
{
New-VM -Name $VMName$VM -MemoryStartupBytes 512MB -NewVHDPath C:\HV\VHD\$VMName$VM.vhdx -NewVHDSizeBytes $VHDSize
}
}
Вызываем рабочий процесс так же, как и функцию:
New-VirtualMachines -VMName VM -VMCount 50 -VHDSize 10GB
Слайд 64

Оценка времени исполнение скрипта с использованием цикла с последовательным выполнением $watch

Оценка времени исполнение скрипта с использованием
цикла с последовательным выполнением
$watch =

[System.Diagnostics.Stopwatch]::StartNew()
$watch.Start() #Запуск таймера
1..50 | ForEach-Object { New-VM -Name VM$_ -MemoryStartupBytes 512MB –NewVHDPath C:\HV\VHD\VM$_.vhdx -NewVHDSizeBytes 10GB }
$watch.Stop() #Остановка таймера
Write-Host $watch.Elapsed

Практическое задание № 1

Слайд 65

Удалите созданные виртуальные машины и жесткие диски //Удалить созданные виртуальные жесткие

Удалите созданные виртуальные машины и жесткие диски
//Удалить созданные виртуальные жесткие диски
Remove-Item

-Path c:\hv\vhd\*
//Удалить созданные виртуальные машины
Remove-VM -ComputerName test1 -Name vm* -Force
Слайд 66

Оценка времени исполнение скрипта с использованием workflow $watch = [System.Diagnostics.Stopwatch]::StartNew() $watch.Start()

Оценка времени исполнение скрипта с использованием workflow
$watch = [System.Diagnostics.Stopwatch]::StartNew()
$watch.Start() #Запуск таймера
workflow

New-VirtualMachines
{
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,Position=0)]$VMName,
[Parameter(Mandatory=$true,Position=1)]$VMCount,
[Parameter(Mandatory=$true,Position=2)]$VHDSize
)
$VMs = 1..$VMCount
foreach -parallel ($VM in $VMs)
{
New-VM -Name $VMName$VM -MemoryStartupBytes 512MB -NewVHDPath C:\HV\VHD\$VMName$VM.vhdx -NewVHDSizeBytes $VHDSize
}
}
New-VirtualMachines -VMName VM -VMCount 50 -VHDSize 10GB
$watch.Stop() #Остановка таймера
Write-Host $watch.Elapsed

Практическое задание № 2

Слайд 67

Удалите созданные виртуальные машины и жесткие диски //Удалить созданные виртуальные жесткие

Удалите созданные виртуальные машины и жесткие диски
//Удалить созданные виртуальные жесткие диски
Remove-Item

-Path c:\hv\vhd\*
//Удалить созданные виртуальные машины
Remove-VM -ComputerName test1 -Name vm* -Force
Слайд 68

Проверка функции Workflow – восстановление при сбое Подключитесь к удаленному серверу

Проверка функции Workflow – восстановление при сбое
Подключитесь к удаленному серверу (test1)

и запустите сценарий Powershell Workflow (прз.№3 без таймера). Посмотрите на начало развертывания виртуальных машин Hyper-V на удаленном сервере с помощью Hyper-V менеджера. Поставьте на паузу виртуальную машину Vmware (test1), на которой начался рабочий процесс. Подождите 30 секунд и включите оставленную виртуальную машину Vmware. Посмотрите информацию, выдаваемую сценарием workflow (на test2) и процесс развертывания виртуальных машин Hyper-V на удаленном сервере (test1). Примечание: разрыв сетевого соединения не должен быть более 4 минут. В случае разрыва соединения более 4 минут сессия прервется и для ее восстановления необходимо будет подключаться заново.
WARNING: The network connection to test1 has been interrupted. Attempting to reconnect for up to 4
minutes...
WARNING: Attempting to reconnect to test1 ...
WARNING: The network connection to test1 has been restored.

Практическое задание №3

Слайд 69

Удалите созданные виртуальные машины и жесткие диски //Удалить созданные виртуальные жесткие

Удалите созданные виртуальные машины и жесткие диски
//Удалить созданные виртуальные жесткие диски
Remove-Item

-Path c:\hv\vhd\*
//Удалить созданные виртуальные машины
Remove-VM -ComputerName test1 -Name vm* -Force
Слайд 70

Приостановка и продолжение сценария Powershell workflow Обратите внимание: Внутри блока parallel,

Приостановка и продолжение сценария Powershell workflow
Обратите внимание: Внутри блока parallel, контрольная

точка не создается, пока параллельная обработка не завершится для всех данных! Для создания контрольных точек в тело цикла необходимо добавить Checkpoint-Workflow.
workflow New-VirtualMachines
{
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,Position=0)]$VMName,
[Parameter(Mandatory=$true,Position=1)]$VMCount,
[Parameter(Mandatory=$true,Position=2)]$VHDSize
)
$VMs = 1..$VMCount
foreach ($VM in $VMs) # -parallel должен отсутствовать
{
New-VM -Name $VMName$VM -MemoryStartupBytes 512MB -NewVHDPath C:\HV\VHD\$VMName$VM.vhdx -NewVHDSizeBytes $VHDSize
Checkpoint-Workflow
}
}

Практическое задание №4