Last active
November 19, 2022 04:57
-
-
Save x-limitless-x/cfd6e4247a645264795308bb688d09ec to your computer and use it in GitHub Desktop.
This powershell script automatically closes any Unrar processes that hang and are considered "zombie" processes due to them causing no further processing.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Author: Blake Drumm (x-limitless-x) | |
#Created: November 18th, 2022 | |
# | |
#Description: This powershell script automatically closes any Unrar processes that hang and are considered "zombie" processes due to them causing no further processing. | |
$runningIds = $null | |
$lastWriteTime = $null | |
$fileToCheck = $null | |
$Minutes = 20 | |
$runningIds = (Get-Process -Name Unrar -ErrorAction SilentlyContinue).Id | |
$lastWriteTime = (Get-ItemProperty -Path 'C:\Temp\Unrar_running_ids.txt').LastWriteTime.AddMinutes($Minutes) | |
$fileToCheck = (Get-Content 'C:\Temp\Unrar_running_ids.txt' -ErrorAction SilentlyContinue) | |
Write-Output "Script Location: $($global:MyInvocation.MyCommand.Definition)`n---------------------------------------------" | Out-File 'C:\Temp\Unrar_Powershell_script.log' | |
if ($runningIds) | |
{ | |
Write-Output "`nFound running Id's for Unrar.exe: $runningIds" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
if ($fileToCheck) | |
{ | |
Write-Output "`nFound file: C:\Temp\Unrar_running_ids.txt" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
$fileToCheck = $fileToCheck.Split("`n") | |
if ((Get-Date) -ge $lastWriteTime) | |
{ | |
Write-Output "`nIts been $Minutes minutes" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
foreach ($id in $runningIds) | |
{ | |
Write-Host "$id and $fileToCheck" | |
if ($fileToCheck -match $id) | |
{ | |
Write-Output "`nStopping process id: $id" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
Write-Output "`n$(Get-Date | Out-String) - Stopping process ids: $id" | Out-File 'C:\Temp\Unrar_Powershell_script_stopping.log' -Append | |
Stop-Process -Id $id -Force | |
} | |
else | |
{ | |
Write-Output "`nNo matches found.`n`nWriting out new file: C:\Temp\Unrar_running_ids.txt" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
$runningIds | Out-File 'C:\Temp\Unrar_running_ids.txt' | |
} | |
} | |
} | |
else | |
{ | |
$Difference = $lastWriteTime - (Get-Date) | |
Write-Output "`nIts been less than $Minutes minutes since file has been written to: C:\Temp\Unrar_running_ids.txt" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
Write-Output "`nNext valid run time: $(($lastWriteTime | Out-String).Trim())" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
Write-Output "`n$([math]::Round($Difference.TotalMinutes, 1)) minutes until next valid run" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
} | |
} | |
else | |
{ | |
$runningIds | Out-File 'C:\Temp\Unrar_running_ids.txt' | |
Write-Output "`nWriting out new file: C:\Temp\Unrar_running_ids.txt" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
} | |
} | |
else | |
{ | |
Write-Output "`nNo running processes for Unrar.exe found" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
$null | Out-File 'C:\Temp\Unrar_running_ids.txt' | |
} | |
Write-Output "`n---------------------------------------------`nLast ran: $((Get-Date | Out-String).Trim())" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
Write-Output "`nTask Scheduler next run time: $(((Get-ScheduledTaskInfo -TaskName 'Fix Unrar Process Script').NextRunTime | Out-String).Trim())" | Out-File 'C:\Temp\Unrar_Powershell_script.log' -Append | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment