Поиск…


Вступление

Рабочие места были представлены в PowerShell 2.0 и помогли решить проблему, присущую инструментам командной строки. В двух словах, если вы запустите длительную задачу, ваше приглашение недоступно, пока задача не завершится. В качестве примера долговременной задачи подумайте об этой простой команде PowerShell:

Get-ChildItem -Path c: \ -Recurse

Для получения полного списка каталогов вашего диска C: потребуется некоторое время. Если вы запустите его как «Job», консоль вернет управление, и вы сможете позже зафиксировать результат.

замечания

Работа PowerShell выполняется в новом процессе. У этого есть плюсы и минусы, которые связаны между собой.

Плюсы:

  1. Работа выполняется в чистом процессе, включая среду.
  2. Задание может выполняться асинхронно с вашим основным процессом PowerShell

Минусы:

  1. Изменения в рабочей среде не будут присутствовать в задании.
  2. Параметры передаются и возвращаемые результаты сериализуются.
    • Это означает, что если вы измените объект параметра во время выполнения задания, он не будет отражен в задании.
    • Это также означает, что если объект не может быть сериализован, вы не можете его передать или вернуть (хотя 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 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow