1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# -Version Requires 2.0 <# .SYNOPSIS A brief description of the Check-NTMetaCharacters function. .DESCRIPTION A detailed description of the Check-NTMetaCharacters function. .PARAMETER SubjectItem This is the string to escape .PARAMETER Escape This escapes the string referenced. .PARAMETER Remove this removes the detected metacharacters .PARAMETER EscapeCharacter Used to specify what to use as the escape character .EXAMPLE The follo0wing command escapes the charicters with in the string as to continue the use with in the sting without being evaluated. PS C:\> Check-NTMetaCharacters -SubjectItem 'Value1[1234]' -Escape .OUTPUTS System.PSObject .NOTES Created by Nigel Tatschner 2015, tatux.co.uk. #> function Check-NTMetaCharacters { [CmdletBinding(DefaultParameterSetName = 'Default')] [OutputType([PSObject], ParameterSetName = 'Default')] [OutputType([PSObject], ParameterSetName = 'Escape')] [OutputType([PSObject], ParameterSetName = 'Remove')] [OutputType([psobject])] param ( [Parameter(ParameterSetName = 'Escape', Mandatory = $true, ValueFromPipeline = $true, ValueFromRemainingArguments = $true, Position = 0, HelpMessage = 'Pass a sting to validate')] [Parameter(ParameterSetName = 'Remove')] [Parameter(ParameterSetName = 'Default')] [ValidateNotNullOrEmpty()] [Alias('si')] [System.String] $SubjectItem, [Parameter(ParameterSetName = 'Escape')] [Parameter(ParameterSetName = 'Default')] [Alias('e')] [switch] $Escape, [Parameter(ParameterSetName = 'Remove')] [Parameter(ParameterSetName = 'Default')] [Alias('r')] [switch] $Remove, [Parameter(ParameterSetName = 'Escape', HelpMessage = 'Choose between "\" or "`" as the escape character')] [ValidateSet('`', '\')] [Alias('ec')] [System.String] $EscapeCharacter = '`' ) begin { if ($SubjectItem -match "[\$\[\]\^\(\)\+]") { $Match = $true } else { $Match = $false } } process { IF ($Escape -eq $true -and $Match -eq $true) { $SubjectItem = $SubjectItem -replace "\$", "$EscapeCharacter$" $SubjectItem = $SubjectItem -replace "\[", "$EscapeCharacter[" $SubjectItem = $SubjectItem -replace "\]", "$EscapeCharacter]" $SubjectItem = $SubjectItem -replace "\^", "$EscapeCharacter^" $SubjectItem = $SubjectItem -replace "\(", "$EscapeCharacter(" $SubjectItem = $SubjectItem -replace "\)", "$EscapeCharacter)" $SubjectItem = $SubjectItem -replace "\+", "$EscapeCharacter+" $Obj = New-Object -TypeName PSObject $Obj | Add-Member -MemberType 'NoteProperty' -Name "SubjectOutput" -Value $SubjectItem $Obj | Add-Member -MemberType 'NoteProperty' -Name "Validated" -Value $Match Write-Output $Obj return } IF ($Remove -eq $true -and $Match -eq $true) { $SubjectItem = $SubjectItem -replace "\$", "" $SubjectItem = $SubjectItem -replace "\[", "" $SubjectItem = $SubjectItem -replace "\]", "" $SubjectItem = $SubjectItem -replace "\^", "" $SubjectItem = $SubjectItem -replace "\(", "" $SubjectItem = $SubjectItem -replace "\)", "" $SubjectItem = $SubjectItem -replace "\+", "" $Obj = New-Object -TypeName PSObject $Obj | Add-Member -MemberType 'NoteProperty' -Name "SubjectOutput" -Value $SubjectItem $Obj | Add-Member -MemberType 'NoteProperty' -Name "Validated" -Value $Match Write-Output $Obj return } IF ($SubjectItem -gt $Null -and $Match -eq $true) { $Obj = New-Object -TypeName PSObject $Obj | Add-Member -MemberType 'NoteProperty' -Name "SubjectOutput" -Value $SubjectItem $Obj | Add-Member -MemberType 'NoteProperty' -Name "Validated" -Value $Match Write-Output $Obj return } if ($Match -eq $false) { $Obj = New-Object -TypeName PSObject $Obj | Add-Member -MemberType 'NoteProperty' -Name "SubjectOutput" -Value $SubjectItem $Obj | Add-Member -MemberType 'NoteProperty' -Name "Validated" -Value $Match Write-Output $Obj return } } end { } } |