Как запустить Python Script с удаленной машины через Powershell в асинхронном режиме?

У меня есть функция powershell, которая работает только синхронно. Я хотел бы обновить эту функцию, чтобы я мог параллельно запускать несколько вызовов скрипта Python. Кто-нибудь знает, как асинхронно вызывать скрипт Python с использованием powershell, имея в виду, что каждый скрипт Python по сути является циклом while, который не заканчивается до тех пор, пока не пройдет 24 часа. Функция powershell принимает на удаленной машине виртуальную среду python, путь к скрипту python и аргументы.

Вот что было сделано до сих пор:

function Run-Remote($computerName, $pname, $scriptPath, $pargs)
{
    $cred = Get-QRemote-Credential
    Invoke-Command -ComputerName $computerName -Credential $cred -ScriptBlock {powershell -c "$Using:pname '$Using:scriptPath' $Using:pargs"} -ConfigurationName QRemoteConfiguration
}

1 ответ

Решение

Действительно простое исправление, просто добавьте "-AsJob" к команде invoke. Это заставит PowerShell ускорить новый процесс для каждой отправляемой вами команды. Затем используйте "Get-Job | Wait-Job" в конце скрипта, чтобы дождаться завершения всех процессов. И "Get-Job | Receive-Job", чтобы получить любые данные обратно.

Я рекомендую прочитать о работах PowerShell, они полезны, но не интуитивно понятны.

function Run-Remote($computerName, $pname, $scriptPath, $pargs)
{
    $cred = Get-QRemote-Credential
    Invoke-Command -AsJob -ComputerName $computerName -Credential $cred -ScriptBlock {powershell -c "$Using:pname '$Using:scriptPath' $Using:pargs"} -ConfigurationName QRemoteConfiguration
}

Get-Job | Wait-Job
Другие вопросы по тегам