function Try
    {
        param
        (
            [ScriptBlock]$Command = $(throw "The parameter -Command is required."),
            [ScriptBlock]$Catch   = { throw $_ },
            [ScriptBlock]$Finally = {}
        )
         {
            $local:ErrorActionPreference = "SilentlyContinue"
            trap
            {
                trap
                {
                     {
                        trap { throw $_ }
                        $Finally
                    }
                    throw $_
                }
                $_ |  { $Catch }
            }
            $Command
        }
         {
            trap { throw $_ }
            $Finally
        }
    }
# Example usage 
    Try {
        echo " ::Do some work..."
        echo " ::Try divide by zero: $(0/0)"
    } -Catch {
        echo "  ::Cannot handle the error (will rethrow): $_"
        #throw $_
    } -Finally {
        echo " ::Cleanup resources..."
    }