Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在powershell中停止然后启动进程_Powershell - Fatal编程技术网

在powershell中停止然后启动进程

在powershell中停止然后启动进程,powershell,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) { $

我想停止/终止某个进程,然后在完成我必须做的事情后重新启动它

这是我已经拥有的

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"
}

但是开始需要一些参数,我想我可以从这个过程中得到。但我真的不知道该送什么

进程[$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\u chaganti\Desktop\debug.log

现在,您需要做的就是:以某种方式调用该命令行(我编写的示例中没有这一部分)。一个非常直截了当的方法是:

Start-Process -FilePath $cmdline.Split(' ')[0] -ArgumentList $cmdline.Split(' ')[1]
但是,在您的情况下,可能没有任何参数列表


希望这能给你一个想法。其他PowerShell专家可能有不同的高效方法。这只是一个快速的破解。

我一直在尝试,但无论我告诉win7/64x什么,它似乎都不知道win32_进程类。嗯……我在win7 x64系统上编写/尝试了这个示例。你到底尝试了什么?我仔细地尝试了你所描述的,得到了一个无效的类异常,当我得到wmiobject-list时,我在其中没有看到win32_进程,我以管理员身份运行powershell ISE,这也没有帮助。哇,当运行这个:Get-WMIObject-Namespace root\cimv2-Class WIn32\u ProcessGet-WMIObject:Invalid Class位于第1行char:14+Get-WMIObject时,您看到了什么