Script: *close-program.ps1* ======================== This PowerShell script closes a program's processes gracefully. Parameters ---------- ```powershell PS> ./close-program.ps1 [[-FullProgramName] ] [[-ProgramName] ] [[-ProgramAliasName] ] [] -FullProgramName Specifies the full program name Required? false Position? 1 Default value Accept pipeline input? false Accept wildcard characters? false -ProgramName Specifies the program name Required? false Position? 2 Default value Accept pipeline input? false Accept wildcard characters? false -ProgramAliasName Specifies the program alias name Required? false Position? 3 Default value Accept pipeline input? false Accept wildcard characters? false [] This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. ``` Example ------- ```powershell PS> ./close-program "Google Chrome" "chrome.exe" ``` Notes ----- Author: Markus Fleschutz | License: CC0 Related Links ------------- https://github.com/fleschutz/PowerShell Script Content -------------- ```powershell <# .SYNOPSIS Closes a program's processes .DESCRIPTION This PowerShell script closes a program's processes gracefully. .PARAMETER FullProgramName Specifies the full program name .PARAMETER ProgramName Specifies the program name .PARAMETER ProgramAliasName Specifies the program alias name .EXAMPLE PS> ./close-program "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 isn't running" } foreach ($Process in $Processes) { $_.CloseMainWindow() | Out-Null } Start-Sleep -milliseconds 100 stop-process -name $ProgramName -force -errorAction 'silentlycontinue' } if ($($Processes.Count) -eq 1) { "✔️ $FullProgramName closed, 1 process stopped" } else { "✔️ $FullProgramName closed, $($Processes.Count) processes stopped" } exit 0 # success } catch { "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" exit 1 } ``` *(generated by convert-ps2md.ps1 using the comment-based help of close-program.ps1 as of 03/27/2024 17:36:25)*