powerShell7

advertisement
Interactive vs. Background
• При выполнении некоторых длительных команд в
оболочке, вы можете предпочесть, чтобы они
происходили в фоновом режиме, так что вы могли бы
продолжать использовать оболочку для других задач.
• Одним из способов достижения этой цели могло бы
быть простое открытие второго окна оболочки, но это
связано с использованием немного большего объема
памяти и процессорного времени на вашем компьютере,
и дает вам еще одно окно в управлении. Другим
вариантом является выполнение команд в качестве
фонового задания.
Фоновый WMI
• Командлет Get-WmiObject…

часто занимает много времени для запуска, особенно, когда
вы извлекаете информацию из нескольких удаленных
компьютеров.

поддерживает -AsJob параметр, который приводит к
выполнению его в фоновом режиме.
Get-WmiObject –computer (gc names.txt) –class
CIM_DataFile –AsJob
Управление заданиями
• Четыре важных командлета для управления задагиями

Get-Job

Remove-Job

Wait-Job

Stop-Job
Job Output

Когда работа завершена, выводы ее команды будут
сохраняться в памяти как часть рабочего объекта. Вы
можете использовать Receive-Job для получения этих
результатов с кэш-памяти.

Receive-Job помещает объекты в конвейер. Предположим,
вы начинаете работу с помощью следующей команды:
Receive-Job –id 2 | Sort State | Where { $_.State –ne
"Stopped" }
• Вы также можете присвоить результаты Receive-Job
переменной .
$results = Receive-Job –id 2
• Когда вы получаете итог работы, оболочка удаляет итог из кэш-
памяти задания.
• Указывая параметр сохранения, однако, вы можете поручить
оболочке оттавить результаты в кэше задания используя параметр keep
Commands as Jobs
• Фоновые задания не ограничиваются WMI. Другие
командлеты поддерживают параметр AsJob, и вы
можете использовать любые из этих команд, чтобы
начать новую фоновую работу
• любая команда может стать фоновой работой с
помощью Start-Job командлета. ls
Start-Job -scriptblock {Get-Process}
Удаленное исполнение
• Существует несколько форм удаленного исполнения:

командлеты, которые имеют computerName parameter и не
используют Windows PowerShell Remoting .

Некоторые командлеты предназначены созданы для связи с
удаленным компьютером. Active Directory командлеты,
например .

Windows PowerShell Remoting способен делать удаленное
подключение к одному или нескольким компьютерам и
запускать команды, которые находятся на этих
компьютерах .
Windows PowerShell Remoting
• 1-to-1 Remoting: В этом случае, вы подключаетесь к
одному удаленному компьютеру и запускаете команды
оболочки на нем, точно так, как если бы вы зашли в
консоль и открыли Windows PowerShell окно.
• 1-to-Many Remoting, или Fan-Out Remoting: В этом
случае, вы даете команду, которая будет выполнена на
одном или нескольких удаленных компьютерах
одновременно. Вы не работаете с каждым удаленным
компьютером интерактивно, а, скорее, ваши команды
выдаются и выполняются в пакетном режиме, и
результаты возвращаются на компьютер для вашего
пользования.
• Many-to-1 Remoting или Fan-In Remoting: Этот
сценарий предполагает, что несколько администраторов
осуществляют удаленное подключение к одному
компьютеру. Как правило, эти администраторы будут
иметь различные разрешения на удаленном компьютере
и могут работать в ограниченном пространстве внутри
оболочки.
1-to-1 Shell
• 1-to-1 shell позволяет быстро получить удаленную
командную строку

Аналогично Telnet, SSH, или PSExec \\computerName cmd
Enter-PSSession –comp server-r2
• Для выхода используйте
Exit-PSSession
1-to-Many Remoting

1-to-1 Remoting полезен, когда
вам нужно всего лишь
выполнить команды на
удаленном компьютере. Тем не
менее, если вам нужно
выполнить те же команды на
нескольких удаленных
компьютерах с помощью 1-to-1

Invoke-Command исполняются
синхронно
Invoke-Command –scriptblock { Dir c:\demo }
–computerName Server1,Server2,Server3
Pipeline Binding
• Recall that some cmdlets bind their pipeline input
ByPropertyName. This means that property names must
match.

Problem: The –computerName parameter of Invoke-Command
binds ByPropertyName, but some cmdlets produce objects
that use the Name property instead.

Solution: Create custom objects to change the property name.
Get-ADComputer –filter * |
Select
@{Label='ComputerName';Expression={$_.Name}} |
Get-Service –name *
Работа с результатами
• Имейте в виду, что Windows PowerShell командлеты
возвращают объекты, как их выводы. К сожалению,
объекты программного обеспечения не могут быть
переданы по сети. Вместо этого, WinRM сериализирует
объекты в XML-формате, так как XML это просто текст,
и текст может быть передан по сети довольно легко.
Объекты принимаются на компьютере, а затем
десериализируются обратно в объекты. Такое
преобразование в и из XML отражается на том, как вы
можете использовать объекты
Invoke-Command –script { Get-Service } –computer
Server1,Server2 | Sort PSComputerName | FormatTable –groupby PSComputerName
Многокомпьютерные задания
• Задания, выполняемые на нескольких удаленных
компьютерах сожержат дочерние задания

Задания верхнего уровня представляют задание в целом

Дочерние задания представляют задачи на каждом
конкретном компьютере
• Чтобы посмотреть имена дочерних заданий…
Get-Job -id 1 | Select childjobs
• Получить их…
Get-Job -name job2
• Получить их результаты…
Receive-Job –name Job2 –keep
Распределение нагрузки
• Избегайте…
Invoke-Command –script { Get-Service } –computer Server1 |
Where { $_.Status –eq "Running"} |
Sort Name |
Export-CSV c:\services.csv
• Делайте так…
Invoke-Command –script {
Get-Service |
Where { $_.Status –eq "Running" } |
Sort Name
} | Export-CSV c:\services.csv
Download