在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时,您看到了什么