function Invoke-WinUtilScript { <# .SYNOPSIS Invokes the provided scriptblock. Intended for things that can't be handled with the other functions. .PARAMETER Name The name of the scriptblock being invoked .PARAMETER scriptblock The scriptblock to be invoked .EXAMPLE $Scriptblock = [scriptblock]::Create({"Write-output 'Hello World'"}) Invoke-WinUtilScript -ScriptBlock $scriptblock -Name "Hello World" #> param ( $Name, [scriptblock]$scriptblock ) try { Write-Host "Running Script for $Name" Write-WinUtilLog -Component "Script" -Message "Running script for $Name" Invoke-Command $scriptblock -ErrorAction Stop Write-WinUtilLog -Component "Script" -Message "Completed script for $Name" } catch [System.Management.Automation.CommandNotFoundException] { Write-Warning "The specified command was not found." Write-Warning $PSItem.Exception.message Write-WinUtilLog -Level "ERROR" -Component "Script" -Message "Command not found while running script for $Name`: $($PSItem.Exception.Message)" } catch [System.Management.Automation.RuntimeException] { Write-Warning "A runtime exception occurred." Write-Warning $PSItem.Exception.message Write-WinUtilLog -Level "ERROR" -Component "Script" -Message "Runtime exception while running script for $Name`: $($PSItem.Exception.Message)" } catch [System.Security.SecurityException] { Write-Warning "A security exception occurred." Write-Warning $PSItem.Exception.message Write-WinUtilLog -Level "ERROR" -Component "Script" -Message "Security exception while running script for $Name`: $($PSItem.Exception.Message)" } catch [System.UnauthorizedAccessException] { Write-Warning "Access denied. You do not have permission to perform this operation." Write-Warning $PSItem.Exception.message Write-WinUtilLog -Level "ERROR" -Component "Script" -Message "Access denied while running script for $Name`: $($PSItem.Exception.Message)" } catch { # Generic catch block to handle any other type of exception Write-Warning "Unable to run script for $Name due to unhandled exception." Write-Warning $psitem.Exception.StackTrace Write-WinUtilLog -Level "ERROR" -Component "Script" -Message "Unhandled exception while running script for $Name`: $($psitem.Exception.Message)" } }