停止然后在PowerShell中启动一个进程

时间:2011-02-23 13:10:41

标签: powershell

我想停止/杀死某个进程,然后在完成我必须做的事情之后再次启动它。

这就是我已经拥有的。

Clear-host
$processes = Get-Process devenv 
$processes.Count
if($processes.Count -gt 1)
{
    $i = 0
    Write-host "There are multiple processes for devenv."
    foreach($process in $processes)
    {
        $i++
        $i.ToString() + '. ' + $process.MainWindowTitle
    }
    $in = Read-host "Give a number of the process to kill: "
    write-host
    write-host "killing and restarting: " + $processes[$in-1].MainWindowTitle
    $processes[$in-1].Kill()
    $processes[$in-1].WaitForExit()
    $processes[$in-1].Start()

}
else
{
    write-host "something else"
}

但是Start需要一些我认为可以从过程中得到的参数。但我不确定我知道该怎么做。

1 个答案:

答案 0 :(得分:5)

$processes[$in-1].Start()不起作用。您需要捕获要杀死的processinfo并再次启动相同的应用程序。您可以使用Win32_Process WMI类获取进程二进制和命令行信息。

例如,

Clear-host
$processes = Get-Process notepad 
$processes.Count
if($processes.Count -gt 1)
{
    $i = 0
    Write-host "There are multiple processes for notepad."
    foreach($process in $processes)
    {
        $i++
        $i.ToString() + '. ' + $process.MainWindowTitle
    }
    $in = Read-host "Give a number of the process to kill: "
    write-host
    write-host "killing and restarting: " + $processes[$in-1].MainWindowTitle

    #Get the process details
    $procID = $processes[$in-1].Id
    $cmdline = (Get-WMIObject Win32_Process -Filter "Handle=$procID").CommandLine
    $processes[$in-1].Kill()
    $processes[$in-1].WaitForExit()
}

在上面的示例中,我使用WMI获取所选进程的命令行信息。如果这是带有一些打开文本文件的记事本过程,则该过程的命令行看起来像"C:\WINDOWS\system32\NOTEPAD.EXE" C:\Users\ravikanth_chaganti\Desktop\debug.log

现在,您需要做的就是:以某种方式调用该命令行(这部分不在我写的示例中)。一个非常生硬的方法是:

Start-Process -FilePath $cmdline.Split(' ')[0] -ArgumentList $cmdline.Split(' ')[1]

但是,在您的情况下,可能没有任何参数列表。

希望这会给你一个想法。其他PowerShell专家可能会有不同的&有效的方法。这只是一个快速入侵。