Test-ScriptCopFixer.ps1

function Test-ScriptCopFixer
{
    [CmdletBinding(DefaultParameterSetName='TestCommandInfo')]
    param(
    [Parameter(ParameterSetName='TestCommandInfo',Mandatory=$true,ValueFromPipeline=$true)]
    [Management.Automation.CommandInfo]
    $CommandInfo
    )
    
    process {
        <#
         
        Only 3 types of commands can possibly be ScriptCopFixers:
         
        - FunctionInfo
        - CmdletInfo
        - ExternalScriptInfo
         
        #>

        
        
        if ($CommandInfo -isnot [Management.Automation.FunctionInfo] -and
            $CommandInfo -isnot [Management.Automation.CmdletInfo] -and
            $CommandInfo -isnot [Management.Automation.ExternalScriptInfo]
        ) {
            Write-Error "$CommandInfo is not a function, cmdlet, or script" 
            return        
        }
                
        if (-not $commandInfo.Parameters.Rule -and
            $commandInfo.Parameters.Rule.ParameterType -ne [PSObject]) 
        {
            Write-Error "$CommandInfo is missing the -Rule parameter"
            return
        }
        
        if (-not $commandInfo.Parameters.ItemWithProblem -and
            $commandInfo.Parameters.ItemWithProblem.ParameterType -ne [PSObject]) 
        {
            Write-Error "$CommandInfo is missing the -ItemWithProblem parameter"
            return
        }
        
        if (-not $commandInfo.Parameters.Problem -and
            $commandInfo.Parameters.Problem.ParameterType -ne [Management.Automation.ErrorRecord]) 
        {
            Write-Error "$CommandInfo is missing the -Problem parameter"
            return
        }
        
        if (-not $commandInfo.Parameters.NotInteractive -and
            $commandInfo.Parameters.NotInteractive.ParameterType -ne [Switch]) 
        {
            Write-Error "$CommandInfo is missing the -NonInteractive switch"
            return
        }                        
    }
}