PowerShell - [решено] Poweshell RunspacePool — Многопоток
-
rulesss2
PowerShell - [решено] 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
})
Подскажите, пожалуйста, что я сделал не так?
$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
-
rulesss2
Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток
Цитата rulesss2:
ни кто не знает?
Сформулируйте задачу, а не вопрос "почему не работает", тогда, возможно, что-то подскажут.
И код обрамляйте специальными тегами...
ни кто не знает?
PowerShell - [решено] Poweshell RunspacePool — Многопоток
Сформулируйте задачу, а не вопрос "почему не работает", тогда, возможно, что-то подскажут.
И код обрамляйте специальными тегами...
-
rulesss2
Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток
Зачем с пауэршеллом использовать psexec? У него есть свои механизмы удалённого запуска.
https://docs.microsoft.com/ru-ru/pow...powershell-7.1
-
DJ Mogarych
Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток
Суть в том, что psexec выполняет код на 51 компьютере по очереди. Через RunspacePool я пытаюсь создать выполнение кода хотя бы на 8 компьютерах одновременно.
Цитата rulesss2:
Зачем с пауэршеллом использовать psexec? У него есть свои механизмы удалённого запуска.
Enter-PSSession Не работает. Блокирует антивирус. Возможности управлять им нет, по этому пришлось использовать psexec.
Цитата rulesss2:
Зачем с пауэршеллом использовать psexec? У него есть свои механизмы удалённого запуска.
PowerShell - [решено] Poweshell RunspacePool — Многопоток
Enter-PSSession Не работает. Блокирует антивирус. Возможности управлять им нет, по этому пришлось использовать psexec.
-
rulesss2
Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток
Цитата rulesss2:
Возможности управлять им нет
Договориться с теми, кто им управляет?
Invoke-command запускает сразу 32 сессии.
Цитата rulesss2:
Enter-PSSession Не работает
Если через psexec на удалённой машине выполнить
Код:
, тоже нет?
Возможности управлять им нет
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 — Многопоток
Все варианты пробовал. Договориться не вариант. Этот код пробовал "Служба 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
Ошибка при попытки подключения.
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 — Многопоток
Все варианты пробовал. Договориться не вариант. Этот код пробовал "Служба 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
Ошибка при попытки подключения.
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 — Многопоток
rulesss2, Посмотрите в сторону workflow, который позволяет выполнять код параллельно. Или ставьте PowerShell Core, где у Foreach-Object есть -Parallel и -ThrottleLimit.
То, что вам не позволяет антивирус, это конечно сильно. Он скорее должен ругаться на psexec.
То, что вам не позволяет антивирус, это конечно сильно. Он скорее должен ругаться на psexec.
-
Foreigner
Re: PowerShell - [решено] Poweshell RunspacePool — Многопоток
Цитата rulesss2:
Не получается добавить в код который написал в первом посте.
Откажитесь от него, перепишите с использованием workflows.
Просто сравните время выполнения:
Код:
Не получается добавить в код который написал в первом посте.
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