在Powershell中停止然后启动进程

chr*_*ie1 4 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"
}
Run Code Online (Sandbox Code Playgroud)

但是开始需要一些参数,我认为我可以从过程中获得。但是我不确定我知道该给什么。

rav*_*nth 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()
}
Run Code Online (Sandbox Code Playgroud)

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

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

Start-Process -FilePath $cmdline.Split(' ')[0] -ArgumentList $cmdline.Split(' ')[1]
Run Code Online (Sandbox Code Playgroud)

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

希望这能给您一个想法。其他PowerShell专家可能具有不同而有效的方法。这只是一个快速的技巧。