Я пытаюсь выполнить некоторые из моих пользовательских кодов асинхронно в Powershell . Следующее пытается проверить наличие обновлений в фоновом потоке:
Function CheckUpdates($manager)
{
. "$PSScriptRoot\..\commands\upgradecmd.ps1";
$upgradeCmd = New-Object UpgradeCmd -ArgumentList $manager;
[bool]$upgradesAvailable = $false;
try
{
$Global:silentmode = $true;
$upgradeCmd.preview = $true;
Start-Job -ArgumentList $upgradeCmd -ScriptBlock { param($upgradeCmd) $upgradeCmd.Run(); };
Get-Job | Receive-Job;
$upgradesAvailable = $upgradeCmd.upgradesAvailable;
}
finally
{
$Global:silentmode = $false;
}
if ($upgradesAvailable)
{
WriteWarning "Upgrades detected.";
WriteWarning "Please, run the upgrade command to update your Everbot installation.";
}
}
Проблема в том, что внутри задания (в ScriptBlock ) PS ничего не узнает о моем пользовательском методе "Run ()", поэтому он не знает, как его вызвать. Я попытался «включить» класс в работу, используя параметр -InitializationScript
с небольшим успехом.
После поиска в Интернете кажется, что способ сделать это - использовать PS Jobs , в PS нет обработки потоков или что-то вроде "async". Дело в том, что я просто хочу запустить метод некоторого класса моего кода PS асинхронно.