Test-ScriptCopRule.ps1
function Test-ScriptCopRule { [CmdletBinding(DefaultParameterSetName='TestCommandInfo')] param( [Parameter(ParameterSetName='TestCommandInfo',Mandatory=$true,ValueFromPipeline=$true)] [Management.Automation.CommandInfo] $CommandInfo ) process { <# Only 3 types of commands can possibly be ScriptCopRules: - 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 } <# The parameter sets must have a specific name. The commands may have more than one parameter set. These parameter sets indicate the command can find problems - TestCommandInfo - TestCmdletInfo - TestScriptInfo - TestFunctionInfo - TestApplicationInfo - TestModuleInfo - TestScriptToken - TestHelpContent These parameter sets indicate the command can fix problems - RepairScriptCop #> $parameterSetNames = 'TestCommandInfo','TestCmdletInfo','TestScriptInfo', 'TestFunctionInfo','TestApplicationInfo','TestModuleInfo', 'TestScriptToken','TestHelpContent' $matchingParameterSets = $CommandInfo.ParameterSets | Where-Object { $parameterSetNames -contains $_.Name } if (-not $matchingParameterSets) { $ofs = ", " Write-Error "$CommandInfo could not be a script cop rule because it does not have any of the correct parameter sets: $parameterSetNames " return } foreach ($matchingParameterSet in $matchingParameterSets) { switch ($matchingParameterSet.Name) { TestCommandInfo { $hasCommandParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'CommandInfo' -and $_.ParameterType -eq [Management.Automation.CommandInfo] } if (-not $hasCommandParameter) { Write-Error 'The TestCommandInfo parameter set does not have a CommandInfo parameter, or it is not the correct type' return } } TestFunctionInfo { $hasFunctionParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'FunctionInfo' -and $_.ParameterType -eq [Management.Automation.FunctionInfo] } if (-not $hasFunctionParameter) { Write-Error 'The TestFunctionInfo parameter set does not have a FunctionInfo parameter, or it is not the correct type' return } } TestModuleInfo { $hasModuleParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'ModuleInfo' -and $_.ParameterType -eq [Management.Automation.PSModuleInfo] } if (-not $hasModuleParameter) { Write-Error 'The TestModuleInfo parameter set does not have a ModuleInfo parameter, or it is not the correct type' return } } TestCmdletInfo { $hasCmdletParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'CmdletInfo' -and $_.ParameterType -eq [Management.Automation.CmdletInfo] } if (-not $hasCmdletParameter) { Write-Error 'The TestCmdletInfo parameter set does not have a CmdletInfo parameter, or it is not the correct type' return } } TestApplicationInfo { $hasApplicationParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'ApplicationInfo' -and $_.ParameterType -eq [Management.Automation.ApplicationInfo] } if (-not $hasApplicationParameter) { Write-Error 'The TestApplicationInfo parameter set does not have a ApplicationInfo parameter, or it is not the correct type' return } } TestScriptInfo { $hasScriptParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'ScriptInfo' -and $_.ParameterType -eq [Management.Automation.ExternalScriptInfo] } if (-not $hasScriptParameter) { Write-Error 'The TestScriptInfo parameter set does not have a ScriptInfo parameter, or it is not the correct type' return } } TestHelpContent { $hasScriptParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'HelpContent' } if (-not $hasScriptParameter) { Write-Error 'The TestHelpContent parameter set does not have a HelpContent parameter, or it is not the correct type' return } } TestScriptToken { $hasCommandParameter = $matchingParameterSet.Parameters | Where-Object { $_.Name -eq 'ScriptToken' -and $_.ParameterType -eq [Management.Automation.PSToken[]] } if (-not $hasCommandParameter) { Write-Error 'The TestScriptToken parameter set does not have a ScriptToken parameter, or it is not the correct type' return } } } } } } |