使用PowerShell在Windows上杀死一个子进程

时间:2019-02-15 04:36:57

标签: powershell powershell-v4.0

我有以下脚本,但它似乎不会杀死子进程。我如何杀死子进程?

当它运行时,看起来还不错,但是剩下一个对话框,然后当我检查任务管理器时,原始进程仍在运行。这让我思考脚本是否正确运行。另一个奇怪的部分是,我自然会看到这些进程(.exe程序)在任务栏上正在运行,但是在脚本运行之后,它们看起来好像没有在运行。但是再次,我检查了任务管理器,并确定它们仍在运行。

$ErrorActionPreference = "SilentlyContinue"
Stop-Transcript | Out-Null
$ErrorActionPreference = "Continue"
Start-Transcript -Path C:\Scripts\Errors\errors.log -Append
$process = Get-Process -Name "IVR1","IVR2","IVR3"
$IVR1path = "C:\IVR1"
$IVR2path = "C:\IVR2"
$IVR3path = "C:\IVR3"
if ($process) {
    $Process | Stop-Process -Force
    Start-Sleep -s 5
    cd $IVR1path
    Start-Process ".\IVR1.exe"
    cd IVR2path
    Start-Process ".\IVR2.exe"
    cd IVR3path
    Start-Process ".\IVR3.exe"
    cd ..
    cd ..
    $From = "IVR1@example.com.au"
    $To = "myemail@example.com.au"
    $cc = "myemail@example.com.au"
    $Subject = "**TEST** - IVR1 has been recovered"
    $Body = "The IVR has been successfully recovered"
    $SMTPServer = "mail.example.com.au"
    Send-MailMessage -From $From -to $To -cc $cc -Subject $Subject -Body $Body -SmtpServer $SMTPServer
    Stop-Transcript
}

有人会提出任何建议吗?可能是由于子进程未终止或原始进程被挂起?

1 个答案:

答案 0 :(得分:0)

我认为您滥用了实现目标所需的工具。使用https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-process?view=powershell-4.0和页面末尾列出的函数(全部有关过程生命周期)。 旁注:在脚本执行的操作中添加更多详细信息(写输出变量值),以便您了解正在发生的事情(或使用调试器,因为我不确定所粘贴的大部分代码是否已执行)。