我想停止/杀死某个进程,然后在完成我必须做的事情后重新启动。
这就是我已经拥有的。
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)
但是开始需要一些参数,我认为我可以从过程中获得。但是我不确定我知道该给什么。
该$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专家可能具有不同而有效的方法。这只是一个快速的技巧。
| 归档时间: |
|
| 查看次数: |
11577 次 |
| 最近记录: |