PowerShell
Фоновые задания PowerShell
Поиск…
Вступление
Рабочие места были представлены в PowerShell 2.0 и помогли решить проблему, присущую инструментам командной строки. В двух словах, если вы запустите длительную задачу, ваше приглашение недоступно, пока задача не завершится. В качестве примера долговременной задачи подумайте об этой простой команде PowerShell:
Get-ChildItem -Path c: \ -Recurse
Для получения полного списка каталогов вашего диска C: потребуется некоторое время. Если вы запустите его как «Job», консоль вернет управление, и вы сможете позже зафиксировать результат.
замечания
Работа PowerShell выполняется в новом процессе. У этого есть плюсы и минусы, которые связаны между собой.
Плюсы:
- Работа выполняется в чистом процессе, включая среду.
- Задание может выполняться асинхронно с вашим основным процессом PowerShell
Минусы:
- Изменения в рабочей среде не будут присутствовать в задании.
- Параметры передаются и возвращаемые результаты сериализуются.
- Это означает, что если вы измените объект параметра во время выполнения задания, он не будет отражен в задании.
- Это также означает, что если объект не может быть сериализован, вы не можете его передать или вернуть (хотя PowerShell может копировать любые параметры и передавать / возвращать PSObject.)
Основное создание рабочих мест
Запустите блок сценариев в качестве фонового задания:
$job = Start-Job -ScriptBlock {Get-Process}
Запустите сценарий в качестве фонового задания:
$job = Start-Job -FilePath "C:\YourFolder\Script.ps1"
Запустите задание с помощью Invoke-Command
на удаленном компьютере:
$job = Invoke-Command -ComputerName "ComputerName" -ScriptBlock {Get-Service winrm} -JobName "WinRM" -ThrottleLimit 16 -AsJob
Начать работу как другой пользователь (запрашивает пароль):
Start-Job -ScriptBlock {Get-Process} -Credential "Domain\Username"
Или же
Start-Job -ScriptBlock {Get-Process} -Credential (Get-Credential)
Начать работу как другой пользователь (нет приглашения):
$username = "Domain\Username"
$password = "password"
$secPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username, $secPassword)
Start-Job -ScriptBlock {Get-Process} -Credential $credentials
Управление базой данных
Получить список всех заданий в текущем сеансе:
Get-Job
Ожидание выполнения задания до получения результата:
$job | Wait-job | Receive-Job
Тайм-аут задания, если он работает слишком долго (10 секунд в этом примере)
$job | Wait-job -Timeout 10
Остановка задания (завершает все задачи, которые ожидаются в очереди заданий до окончания):
$job | Stop-Job
Удалите задание из списка текущих заданий текущего сеанса:
$job | Remove-Job
Примечание . Следующие действия будут работать только в Workflow
Jobs.
Приостановить работу Workflow
(пауза):
$job | Suspend-Job
Возобновление Workflow
:
$job | Resume-Job