首页 文章

除了使用-noexit标志外,Powershell启动进程Runspace不会启动

提问于
浏览
0

所以我用Runspaces写了这个小GUI . 它在ISE中运行时按预期工作,如果我从PS提示符启动它,但是当我尝试从快捷方式运行它时,只要我不使用-noexit标志就不会启动它 . 但是当使用-noexit标志时,即使关闭GUI,它也会使Powershell进程继续运行 .

我使用这个tecnuiqe作为我的GUI:Powershell GUI Template

这就是我的快捷方式:C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoProfile -sta -WindowStyle Hidden -file“C:\ Temp \ Runspaceversion.ps1”

那不会工作...但如果我这样做

C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoProfile -sta -WindowStyle Hidden -noexit -file "C:\IT\Checklist\Runspaceversion.ps1"

它有效,但当我退出Gui时,我得到了powershell进程闲置....

3 回答

  • 0

    正在使用的模板中没有退出代码 .

    当窗户关闭时,这会引发......

    #region Window Close 
        $syncHash.Window.Add_Closed({
            Write-Verbose 'Halt runspace cleanup job processing'
            $jobCleanup.Flag = $False
    
            #Stop all runspaces
            $jobCleanup.PowerShell.Dispose()
    
        })
    

    改变那个块以包含这样的东西......

    #region Window Close 
        $syncHash.Window.Add_Closed({
            Write-Verbose 'Halt runspace cleanup job processing'
            $jobCleanup.Flag = $False
    
            #Stop all runspaces
            $jobCleanup.PowerShell.Dispose()
            $jobProcessInfo = (Get-WmiObject win32_process `
            -Filter {name = 'powershell.exe' and commandline like '%PowerShell_GUI_Template.ps1%'})
            Stop-Process -Id $jobProcessInfo.ProcessId
    
        })
    

    当然,这可能是一种蛮力的方式,但我下拉了模板,这适用于在关闭窗体窗口时关闭关联的主进程 .

    这就是我在快捷方式中所拥有的 .

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -noexit "& { D:\Scripts\PowerShellTips\PowerShell_GUI_Template.ps1 }
    
  • 0

    问题是默认情况下PowerShell控制台关闭,也会终止所有关联的运行空间和线程,包括刚刚创建的表单 . 这是因为 BeginInvoke() 启动表单但随后恢复当前线程 .

    基本上PowerShell必须运行 . 而不是 BeginInvoke() 你可以尝试 RunDialog() ,它将保持主线程,直到Form关闭,此时PowerShell也将退出 .

  • 0

    我设法绕过它,通过带有$ PID的Paramater杀死了启动GUI的会话,并且正如Postnote所说,在退出GUI时终止了进程 .

相关问题