Powershell Workflow – настройка ограничений


Несколько раз я обращался к вопросу использования Powershell Workflow для массового конфигурирования рабочих станций пользователей. Эта технология проста, удобна и, если знать некоторые секреты, чрезвычайно эффективна. Если вы не видели эти статьи, то рекомендую начать с Powershell 4 – Foreach –Parallel теперь еще быстрее!

Собственно я начал применять Powershell Workflow именно потому, что это позволяет распараллелить операции и многократно ускорить процесс настройки большого числа компьютеров в реальном масштабе времени (речь о тысячах компьютеров). К сожалению трудно найти практические описания, как применять Powershell Workflow наиболее эффективными путями.

Основной проблемой для меня было увеличение числа одновременно выполняемых Workflow с 30 до 100 и более. Когда соответствующий параметр появился в Foreach –Parallel, это очень помогло. Но это было частным решением, не охватывающим все варианты применения Workflow, которые я использовал.

Статья High Level Architecture of Windows PowerShell Workflow (Part 2) говорит о том, что за ограничения отвечает компонент Workflow Job Throttle Manager. Но мои поиски по этим ключевым словам окончились неудачей. Но где-то эти параметры должны быть!

Более внимательное прочтение статьи помогло: забавно, что решение было не в тексте, а на скриншоте (не люблю скриншоты кода!).

Нужные параметры спрятаны тут:


Get-PSSessionConfiguration Microsoft.Powershell.workflow | fl *

В результате получаем полный набор параметров среды выполнения Workflow в Powershell:


Architecture                    : 64

Filename                        : %windir%\system32\pwrshplugin.dll

PSSessionConfigurationTypeName  : Microsoft.PowerShell.Workflow.PSWorkflowSessionConfiguration

MaxConcurrentCommandsPerShell   : 1000

PersistencePath                 : C:\Users\1\AppData\Local\Microsoft\Windows\PowerShell\WF\PS

Capability                      : {Shell}

AllowedActivity                 : {PSDefaultActivities}

xmlns                           : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration

PersistWithEncryption           : False

MaxConcurrentUsers              : 5

RemoteNodeSessionIdleTimeoutSec : 60

Name                            : microsoft.powershell.workflow

OutOfProcessActivity            : {InlineScript}

SessionConfigurationData        :                              <SessionConfigurationData>

                                     <Param Name="ModulesToImport"

                                  Value="%windir%\system32\windowspowershell\v1.0\Modules\PSWorkflow"/>

                                                   <Param Name="PrivateData">

                                  <PrivateData>                                         <Param Name="enablevalidation"

                                  Value="true" />                                     </PrivateData>

                                                </Param>                             </SessionConfigurationData>



MaxSessionsPerWorkflow          : 5

SupportsOptions                 : true

ProcessIdleTimeoutSec           : 1209600

ExactMatch                      : true

RunAsUser                       :

IdleTimeoutms                   : 7200000

SessionThrottleLimit            : 100

OutputBufferingMode             : Block

MaxActivityProcesses            : 5

ResourceUri                     : http://schemas.microsoft.com/powershell/microsoft.powershell.workflow

ActivityProcessIdleTimeoutSec   : 60

MaxPersistenceStoreSizeGB       : 10

SecurityDescriptorSddl          : O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)

MaxShellsPerUser                : 25

ModulesToImport                 : %windir%\system32\windowspowershell\v1.0\Modules\PSWorkflow

AutoRestart                     : false

MaxShells                       : 25

MaxConnectedSessions            : 100

MaxMemoryPerShellMB             : 1024

PSVersion                       : 4.0

Uri                             : http://schemas.microsoft.com/powershell/microsoft.powershell.workflow

SDKVersion                      : 2

XmlRenderingType                : text

RunAsPassword                   :

MaxProcessesPerShell            : 15

ParentResourceUri               : http://schemas.microsoft.com/powershell/microsoft.powershell.workflow

MaxIdleTimeoutms                : 2147483647

MaxRunningWorkflows             : 30

WorkflowShutdownTimeoutMSec     : 500

EnableValidation                : true

Enabled                         : true

UseSharedProcess                : true

MaxSessionsPerRemoteNode        : 5

MaxDisconnectedSessions         : 1000

AssemblyName                    : Microsoft.PowerShell.Workflow.ServiceCore, Version=3.0.0.0, Culture=neutral,

                                  PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL

lang                            : en-US

Permission                      : BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

 

Остаётся поправить нужный параметр:


$oMaxRunningWorkflows  = New-PSWorkflowExecutionOption -MaxRunningWorkflows  100

Set-PSSessionConfiguration Microsoft.PowerShell.Workflow -SessionTypeOption $o</span>MaxRunningWorkflows  <span style="color: black; font-family: Courier New; font-size: 10pt;">-Force

Теперь скорость выполнения моего скрипта для большого числа целевых компьютеров выросла многократно.

Полезные ссылки:

Get-PSSessionConfiguration

Set-PSSessionConfiguration

New-PSWorkflowExecutionOption

комментария 2

  1. у вас в последнем блоке кода вылезла css разметка..

Оставьте комментарий