<# .SYNOPSIS close-program.ps1 [] [] [] .DESCRIPTION Closes the processes of the given program gracefully .EXAMPLE PS> .\close-program.ps1 "Google Chrome" "chrome.exe" .LINK https://github.com/fleschutz/PowerShell .NOTES Author: Markus Fleschutz License: CC0 #> param([string]$FullProgramName = "", [string]$ProgramName = "", [string]$ProgramAliasName = "") try { if ($ProgramName -eq "") { get-process | where-object {$_.mainWindowTitle} | format-table Id, Name, mainWindowtitle -AutoSize $ProgramName = read-host "Enter program name" } if ($FullProgramName -eq "") { $FullProgramName = $ProgramName } $Processes = get-process -name $ProgramName -errorAction 'silentlycontinue' if ($Processes.Count -ne 0) { foreach ($Process in $Processes) { $Process.CloseMainWindow() | Out-Null } start-sleep -milliseconds 100 stop-process -name $ProgramName -force -errorAction 'silentlycontinue' } else { $Processes = get-process -name $ProgramAliasName -errorAction 'silentlycontinue' if ($Processes.Count -eq 0) { throw "$FullProgramName is not started yet" } foreach ($Process in $Processes) { $_.CloseMainWindow() | Out-Null } start-sleep -milliseconds 100 stop-process -name $ProgramName -force -errorAction 'silentlycontinue' } "✔️ closed $FullProgramName, stopped $($Processes.Count) process(es)" exit 0 } catch { write-error "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" exit 1 }