public/Get-VSSWriters.ps1

function Get-VSSWriters {
    Param (
        [string[]]
        $ComputerName,
        [System.Management.Automation.PSCredential]
        $Credential
    )
        
    $scriptblock = {
        function Get-VSSWriter {    
            Param (
                [ValidateSet('Stable', 'Failed')]
                [String] 
                $Status
            ) #Param
    
            #Command to retrieve all writers, and split them into groups
            Write-Verbose "Retrieving VSS Writers"
            VSSAdmin list writers | 
            Select-String -Pattern 'Writer name:' -Context 0, 4 |
            ForEach-Object {
    
                #Removing clutter
                Write-Verbose "Removing clutter "
                $Name = $_.Line -replace "^(.*?): " -replace "'"
                $State = $_.Context.PostContext[2] -replace "^(.*?): "
                $LastError = $_.Context.PostContext[3] -replace "^(.*?): "
                $Id = $_.Context.PostContext[0] -replace "^(.*?): "
                $InstanceId = $_.Context.PostContext[1] -replace "^(.*?): "
                
    
                #Create object
                Write-Verbose "Creating object"
                foreach ($Prop in $_) {
                    $object = [pscustomobject]@{
                        ComputerName = $env:COMPUTERNAME
                        Name       = $Name
                        State      = $State
                        LastError  = $LastError
                        Id         = $Id
                        InstanceId = $InstanceId
                        
                    } 
                }#foreach
    
                #Change output based on Status provided
                If ($PSBoundParameters.ContainsKey('Status')) {
                    Write-Verbose "Filtering out the results"
                    $object | Where-Object { $_.State -like "*$Status" }
                } #if
                else {
                    $object
                } #else
            }#foreach-object
        }#function
        Get-VSSWriter
    }#end Scriptblock
    
    #Execute Scriptblock on Computername(s) with set parameters.
    $params = @{
        ScriptBlock = $scriptblock
    }
    if ($ComputerName){
        $params['ComputerName'] = $ComputerName
    }
    if ($Credential){
        $params['Credential'] = $Credential
    }
    Invoke-Command @params

}