为什么[PowerShell]::Create()创建线程去执行函数不成功


PowerShell交流中心分类: Questions为什么[PowerShell]::Create()创建线程去执行函数不成功
0
lightexpensive asked 5 年 ago

everybody,通过[PowerShell]::Create()创建的线程执行cmdlet没问题。但是当改为调用函数就不成功,为什么?有什么解决方法吗?
当然,我的函数本身是没问题的。
我的目的是创建一个线程去执行任务,超过一定时间未完成的话,就关闭该任务。
如下代码,把$code换成$task1,是没问题的。
脚本代码如下:

Start your code here
$code = {  $cb.Scan($PrepareFileName, $NailDirName, $HtmlFileName) }
    $task1 = { Start-Sleep -Seconds 9; Get-Service }
    $newThread = [PowerShell]::Create().AddScript($code)
    $handleTh = $newThread.BeginInvoke()
    $nTimes = 0;
    do
    {
        $nTimes++;
        if($handleTh.IsCompleted -or $nTimes -gt 2)
        {
          break;  
        }
        Start-Sleep -Milliseconds 500

} while($true)

$newThread.EndInvoke($handleTh)
$newThread.Runspace.Close()
$newThread.Dispose()

1 Answers
2
Best Answer
六翼天使 answered 5 年 ago

这个应该和invoke-command和start-job的情况类似,环境是独立的,外部定义的函数不能传递过去,可以尝试在线程内部定义函数