PowerShell - [решено] Poweshell RunspacePool — Многопоток

Аватара пользователя
rulesss2

PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение rulesss2 »

Добрый день. Написал код, но не работает с 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

})



Подскажите, пожалуйста, что я сделал не так?
Аватара пользователя
rulesss2

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение rulesss2 »

Столько просмотров, ни кто не знает?
Аватара пользователя
rulesss2

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение rulesss2 »

Цитата rulesss2:



ни кто не знает?
PowerShell - [решено] Poweshell RunspacePool — Многопоток




Сформулируйте задачу, а не вопрос "почему не работает", тогда, возможно, что-то подскажут.

И код обрамляйте специальными тегами...
Аватара пользователя
rulesss2

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение rulesss2 »

Зачем с пауэршеллом использовать psexec? У него есть свои механизмы удалённого запуска.



https://docs.microsoft.com/ru-ru/pow...powershell-7.1
Аватара пользователя
DJ Mogarych

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение DJ Mogarych »

Суть в том, что psexec выполняет код на 51 компьютере по очереди. Через RunspacePool я пытаюсь создать выполнение кода хотя бы на 8 компьютерах одновременно.




Цитата rulesss2:



Зачем с пауэршеллом использовать psexec? У него есть свои механизмы удалённого запуска.
PowerShell - [решено] Poweshell RunspacePool — Многопоток




Enter-PSSession Не работает. Блокирует антивирус. Возможности управлять им нет, по этому пришлось использовать psexec.
Аватара пользователя
rulesss2

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение rulesss2 »

Цитата rulesss2:



Возможности управлять им нет
PowerShell - [решено] Poweshell RunspacePool — Многопоток




Договориться с теми, кто им управляет?



Invoke-command запускает сразу 32 сессии.




Цитата rulesss2:



Enter-PSSession Не работает
PowerShell - [решено] Poweshell RunspacePool — Многопоток




Если через psexec на удалённой машине выполнить



Код:

Код: Выделить всё

winrm -qc
или
powershell -command "Enable-PSRemoting -Force"

, тоже нет?
Аватара пользователя
DJ Mogarych

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение DJ Mogarych »

Все варианты пробовал. Договориться не вариант. Этот код пробовал "Служба 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

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение rulesss2 »

Все варианты пробовал. Договориться не вариант. Этот код пробовал "Служба 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



Ошибка при попытки подключения.
Аватара пользователя
Foreigner

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение Foreigner »

rulesss2, Посмотрите в сторону workflow, который позволяет выполнять код параллельно. Или ставьте PowerShell Core, где у Foreach-Object есть -Parallel и -ThrottleLimit.



То, что вам не позволяет антивирус, это конечно сильно. Он скорее должен ругаться на psexec.
Аватара пользователя
Foreigner

Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток

Сообщение Foreigner »

Цитата rulesss2:



Не получается добавить в код который написал в первом посте.
PowerShell - [решено] Poweshell RunspacePool — Многопоток




Откажитесь от него, перепишите с использованием workflows.



Просто сравните время выполнения:



Код:

Код: Выделить всё

$list = 'ya.ru','google.com','yahoo.com'
workflow Test-Ping
{
param ([string[]] $list)
    foreach -parallel ($l in $list)
    {
        Test-Connection $l -count 2
    }
}
Test-Ping $list
Ответить

Вернуться в «Скриптовые языки администрирования Windows»