Skip to content

Instantly share code, notes, and snippets.

@x-limitless-x
Last active November 19, 2022 04:57
Show Gist options
  • Save x-limitless-x/cfd6e4247a645264795308bb688d09ec to your computer and use it in GitHub Desktop.
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.
#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