我想停止/杀死某个进程,然后在完成我必须做的事情之后再次启动它。
这就是我已经拥有的。
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需要一些我认为可以从过程中得到的参数。但我不确定我知道该怎么做。
答案 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专家可能会有不同的&有效的方法。这只是一个快速入侵。