Несколько раз я обращался к вопросу использования 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
Теперь скорость выполнения моего скрипта для большого числа целевых компьютеров выросла многократно.
Полезные ссылки:
Filed under: Powershell | Tagged: Powershell, Workflow |
у вас в последнем блоке кода вылезла css разметка..
Спасибо. Исправил.