![]() |
Poweshell RunspacePool — Многопоток
Добрый день. Написал код, но не работает с RunspacePool.
$button_OK.Add_Click({ $RunspacePool = [runspacefactory]::CreateRunspacePool(1,8) $RunspacePool.ApartmentState = "MTA" $RunspacePool.Open() $Work = [powershell]::Create().AddScript($scriptblock) $scriptblock = { if ($CheckBox_ESPP.Checked){ & C:\PSTools\psexec.exe -h -nobanner -accepteula @C:\comps.txt powershell.exe -inputformat none "Invoke-Expression -Command 'hostname'; Get-Item C:\EASOPS\ESPP\In; Get-Item C:\EASOPS\ESPP\Out" } if ($CheckBox_GMMQ.Checked){ & C:\PSTools\psexec.exe -h -nobanner -accepteula @C:\comps.txt powershell.exe -inputformat none "Invoke-Expression -Command 'hostname'; Get-Item C:\GMMQ\Export; Get-Item C:\GMMQ\Import" } if ($CheckBox_Size.Checked){ & C:\PSTools\psexec.exe -h -nobanner -accepteula @C:\comps.txt powershell.exe -inputformat none "Invoke-Expression -Command 'hostname'; Get-PSDrive C" } } $Work.RunspacePool = $RunspacePool $Work.BeginInvoke() $RunspacePool.Close() | Out-Null $RunspacePool.Dispose() | Out-Null }) Подскажите, пожалуйста, что я сделал не так? |
Столько просмотров, ни кто не знает?
|
Цитата:
И код обрамляйте специальными тегами... |
Зачем с пауэршеллом использовать psexec? У него есть свои механизмы удалённого запуска.
https://docs.microsoft.com/ru-ru/pow...powershell-7.1 |
Суть в том, что psexec выполняет код на 51 компьютере по очереди. Через RunspacePool я пытаюсь создать выполнение кода хотя бы на 8 компьютерах одновременно.
Цитата:
|
Цитата:
Invoke-command запускает сразу 32 сессии. Цитата:
Код:
winrm -qc |
Все варианты пробовал. Договориться не вариант. Этот код пробовал "Служба WinRM уже настроена на прием запросов на компьютере."
Enter-PSSession : Сбой подключения к удаленному серверу xxxx. Сообщение об ошибке: Клиенту не удается подключит ься к узлу назначения, указанному в запросе. Убедитесь, что служба на узле назначения работает и принимает запросы. Озн акомьтесь с журналами и документацией для определения запущенной на узле назначения службы WS-Management (чаще всего эт о IIS или WinRM). Если это служба WinRM, то для анализа состояния и настройки этой службы используйте на удаленном узле команду "winrm quickconfig". Подробности см. в разделе справки "about_Remote_Troubleshooting". строка:1 знак:1 + Enter-PSSession xxxx + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (xxxx:String) [Enter-PSSession], PSRemotingTransportException + FullyQualifiedErrorId : CreateRemoteRunspaceFailed Ошибка при попытки подключения. |
rulesss2, Посмотрите в сторону workflow, который позволяет выполнять код параллельно. Или ставьте PowerShell Core, где у Foreach-Object есть -Parallel и -ThrottleLimit.
То, что вам не позволяет антивирус, это конечно сильно. Он скорее должен ругаться на psexec. |
С workflow беда. Не получается добавить в код который написал в первом посте. Если кто-то поможет, буду очень благодарен. На psexec антивирус не ругается. Команды выполняются, просто хочу ускорить процесс выполнения.
|
Цитата:
Просто сравните время выполнения: Код:
$list = 'ya.ru','google.com','yahoo.com' |
Цитата:
Код:
$computer = Get-Content -Path C:\comps.txt |
Цитата:
2. В workflow в InlineScript {} необходимо использовать $using ($using:computer) переменную. Попробуйте. 3. Попробуйте без InlineScript {}, прямо в foreach () {}. 4. workflow test необходимо вызвать: Код:
$computers = Get-Content -Path C:\comps.txt |
Время: 20:20. |
Время: 20:20.
© OSzone.net 2001-