Public/Invoke-ServiceRecovery.ps1

function Invoke-ServiceRecovery {

    <#
    .SYNOPSIS
        -Taylor Lee
        Modified 06252019
    .DESCRIPTION
        Restart one or multiple services that share a part of a Service Displayname
 
        The purpose of this command is recover from issues with widely distributed services. Example would be an antivirus service or Remote Access Agents providing trouble.
    .EXAMPLE
        Restart specified service on all domain endpoints
 
        Invoke-ServiceRecovery -DisplayNameLike Kaseya
 
    .EXAMPLE
        Restart specified service on all remaining endpoints using the failed endpoints log.
 
        Invoke-ServiceRecovery -DisplayNameLike Kaseya -FromLog .\servicerecovery_log_0911.txt
 
    .NOTES
        Must be Run from a DC or have the ActiveDirectory Module imported
    #>


    Param (
        [Parameter(Mandatory = $true)]$DisplayNameLike,
        [Parameter(Mandatory = $false)]$FromLog
    )


    #Check For Admin Privleges
    Get-Elevation

    #Resuming recovery from a Logfile
    if ($FromLog -ne $null) {
        #Restart Services
        Get-Content $FromLog |
        ForEach-Object {
            try {
                Write-Host "Restarting Services with DisplayNameLike $DisplayNameLike on: " -ForegroundColor Green -NoNewline
                Write-Host "$_" -ForegroundColor Cyan

                Get-Service -computername $_ | Where-Object { $_.displayname -like "*$DisplayNameLike*" } | Restart-Service -Force
            }
            catch {
                $trim0 = $_
                $trim1 = $trim0 -replace ("Cannot open Service Control Manager on computer '", "")
                $trimout = $trim1 -replace ("'. This operation might require other privileges.", "")
                $trimout | Out-File $env:USERPROFILE\desktop\ServiceRecovery_Log.txt -Append
            }
        }
    }

    else {
        #Restart Services
        foreach ($computer in Get-ADComputer -Filter { (Enabled -eq $true) } | Sort-Object name | Select-Object -ExpandProperty name) {
            try {
                Write-Host "Restarting Services with DisplayNameLike $DisplayNameLike on: " -ForegroundColor Green -NoNewline
                Write-Host "$computer" -ForegroundColor Cyan

                Get-Service -computername $computer | Where-Object { $_.displayname -like "*$DisplayNameLike*" } | Restart-Service -Force
            }
            catch {
                $trim0 = $_
                $trim1 = $trim0 -replace ("Cannot open Service Control Manager on computer '", "")
                $trimout = $trim1 -replace ("'. This operation might require other privileges.", "")
                $trimout | Out-File $env:USERPROFILE\desktop\ServiceRecovery_Log.txt -Append
            }
        }

    }

    #Rename LogFile to Avoid overwrites later
    $Date = Get-Date -Format hhmm
    Rename-Item $env:USERPROFILE\desktop\ServiceRecovery_Log.txt $env:USERPROFILE\desktop\ServiceRecovery_Log_"$Date".txt
}