This is a quick n dirty script for restarting failing VSS writers. Written on a 2016 server with multiple sources of writers to services I found on other sites.
$hash = @{"ASR Writer" = "VSS"}
$hash.add("BITS Writer","BITS")
$hash.add("Certificate Authority","CertSvc"}
$hash.add("COM+ REGDB Writer","VSS")
$hash.add("DFS Replication service writer","DFSR")
$hash.add("DHCP Jet Writer","DHCPServer")
$hash.add("FRS Writer","NtFrs")
$hash.add("FSRM writer","srmsvc")
$hash.add("IIS Config Writer","AppHostSvc")
$hash.add("IIS Metabase Writer","IISADMIN")
$hash.add("Microsoft Exchange Writer","MSExchangeIS")
$hash.add("Microsoft Hyper-V VSS Writer","vmms")
$hash.add("MSMQ Writer (MSMQ)","MSMQ"}
$hash.add("NPS VSS Writer","EventSystem")
$hash.add("NTDS","NTDS")
$hash.add("OSearch VSS Writer","OSearch")
$hash.add("OSearch14 VSS Writer","OSearch14")
$hash.add("OSearch15 VSS Writer","OSearch15"}
$hash.add("Registry Writer","VSS")
$hash.add("Shadow Copy Optimization Writer","VSS")
$hash.add("SPSearch VSS Writer","SPSearch")
$hash.add("SPSearch4 VSS Writer","SPSearch4")
$hash.add("SqlServerWriter","SQLWriter")
$hash.add("System Writer","CryptSvc")
$hash.add("TermServLicensing","TermServLicensing")
$hash.add("WINS Jet Writer","WINS")
$hash.add("WMI Writer","Winmgmt")
$vssState = vssadmin list writers
$vssStateState = $vssState.split("\n")
$services = [System.Collections.ArrayList]@()
for ($i=0; $i - $vssstate.length;$i++){
if ($vssState[$i] -match "Failed") {
$services.add($hash.($vssState[$i-3].substring(14,$vssState[$i-3].length-15)))
}
}
$services = $services | select -Unique
$services
for ($i=0; $i - $services.length;$i++){
restart-service $services[$i] -force
}