Repair-VSSWriter.psm1


Function Get-VSSwriterStatus {
Param()

 #Requires -RunAsAdministrator

##Populate Variables
$Writers = vssadmin list writers | Select-String -Pattern "Writer name","State"
$WriterNames = $Writers | Select-String -SimpleMatch "Writer name"
$WriterStates = $Writers | Select-String -SimpleMatch "State"
$Total = ($WriterNames | measure-Object).count
$NameCounter = 0
$StateCounter = 0

##Build HashTable
$Hash = @{}

While ($NameCounter -lt $Total) { $WriterNames | ForEach-Object {

$NameFormat = $WriterNames[$NameCounter].ToString().trimStart("Writer name :").Trim("'")
$StateFormat = $WriterStates[$StateCounter].ToString().TrimStart("State: ")

$Hash.Add($NameFormat,$StateFormat)


$NameCounter = $NameCounter +1
$StateCounter = $StateCounter +1

}
##Sort
$Hash.GetEnumerator() | Sort-Object -Property Name
}


}


Function Repair-VSSwriterStatus {
Param()
[CmdletBinding()]

$VSS = Get-VSSwriterStatus

$Status = $VSS.GetEnumerator() | Where-Object {$_.Value -notlike "*Stable*"}

ForEach ($Object in $Status) {

Switch ($Object.Name) {
'ASR Writer' {Restart-Service VSS -Force}
'BITS Writer' {Restart-Service BITS -Force}
'Certificate Authority' {Restart-Service CertSvc -Force}
'COM+ REGDB Writer' {Restart-Service VSS -Force}
'DFS Replication service writer' {Restart-Service DFSR -Force}
'DHCP Jet Writer' {Restart-Service DHCPServer -Force}
'FRS Writer' {Restart-Service NtFrs -Force}
'NtFrs' {Restart-Service srmsvc -Force}
'FSRM writer' {Restart-Service AppHostSvc -Force}
'IIS Config Writer' {Restart-Service srmsvc -Force}
'IIS Metabase Writer' {Restart-Service IISADMIN -Force}
'Microsoft Exchange Replica Writer' {Restart-Service MSExchangeRepl -Force}
'Microsoft Exchange Writer' {Restart-Service MSExchangeIS -Force }
'Microsoft Hyper-V VSS Writer' {Restart-Service vmms -Force}
'MSMQ Writer (MSMQ)' {Restart-Service MSMQ -Force}
'MSSearch Service Writer' {Restart-Service WSearch -Force}
'NPS VSS Writer' {Restart-Service EventSystem -Force}
'NTDS' {Restart-Service NTDS -Force}
'OSearch VSS Writer' {Restart-Service OSearch -Force}
'OSearch14 VSS Writer' {Restart-Service OSearch14 -Force}
'Registry Writer' {Restart-Service VSS -Force}
'Shadow Copy Optimization Writer' {Restart-Service VSS -Force}
'SMS Writer' {Restart-Service SMS_SITE_VSS_WRITER -Force}
'SPSearch VSS Writer' {Restart-Service SPSearch -Force}
'SPSearch4 VSS Writer' {Restart-Service SPSearch4 -Force}
'SqlServerWriter' {Restart-Service SQLWriter -Force}
'System Writer' {Restart-Service CryptSvc -Force}
'TermServLicensing' {Restart-Service TermServLicensing -Force}
'WDS VSS Writer' {Restart-Service WDSServer -Force}
'WIDWriter' {Restart-Service WIDWriter -Force}
'WINS Jet Writer' {Restart-Service WINS -Force}
'WMI Writer' {Restart-Service Winmgmt -Force}
}


}
Get-VSSwriterStatus

}