我有以下脚本,但它似乎不会杀死子进程。我如何杀死子进程?
当它运行时,看起来还不错,但是剩下一个对话框,然后当我检查任务管理器时,原始进程仍在运行。这让我思考脚本是否正确运行。另一个奇怪的部分是,我自然会看到这些进程(.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
}
有人会提出任何建议吗?可能是由于子进程未终止或原始进程被挂起?
答案 0 :(得分:0)
我认为您滥用了实现目标所需的工具。使用https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-process?view=powershell-4.0和页面末尾列出的函数(全部有关过程生命周期)。 旁注:在脚本执行的操作中添加更多详细信息(写输出变量值),以便您了解正在发生的事情(或使用调试器,因为我不确定所粘贴的大部分代码是否已执行)。>