$processes[$in-1].Start()
не будет работать.Вам нужно захватить информацию о процессах, которую вы убиваете, и снова запустить то же приложение.Вы можете получить двоичные данные процесса и информацию о командной строке, используя класс WMI Win32_Process.
Например,
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 может быть другой и эффективный подход.Это просто быстрый взлом.