[cmdletbinding()]param([string]$ProcessName)
  $local:new_KillPIDs = @() + (Get-Process -name $processName | Select-Object -ExpandProperty ID)
  $local:KillPIDs = @()
  Do {
    $KillPIDs += $new_KillPIDs | Where-Object { $_ -notin $KillPIDs }
    Write-Verbose "Again"
    Write-Verbose $new_KillPIDs -join ", "
    $new_KillPIDs = $new_KillPIDs | ForEach-Object { Get-CimInstance -ClassName Win32_Process -Filter "ParentProcessId = $_" } | Select-Object -ExpandProperty ProcessId
  } Until ( -not $new_KillPIDs )

  Write-Verbose "Done"

  start-process powershell -ArgumentList "-command","Stop-Process -Force -Id @($($KillPIDs -join '', ''))" -WindowStyle Minimized