Private/Security.ps1
function Get-HtValidateString { [OutputType([bool], [PSCredential])] [CmdletBinding()] param ( [uint16]$MaxTry = 3, [Parameter(Mandatory = $true)] [ValidateSet('Email', 'String')] [ValidateNotNullOrEmpty()] $Type, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] $HelpMessage ) switch ($Type) { "Email" { $Regex = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" } "String" { $Regex = "^[a-z]{2,}\d*$" } "Int" { $Regex = "[0-9]" } Default { return $false } } try { $Counter = 1 do { if ($HelpMessage) { $UserPrincipalName = Read-Host "$($HelpMessage) [$($Type)]: " } else { $UserPrincipalName = Read-Host "Enter a $($Type): " } if ($UserPrincipalName -match $Regex) { Write-Verbose -Message "$($Type) match the regex." $UserPrincipalName break } if ($Counter -lt $MaxTry) { Write-Warning -Message "$($Type) does not match a valid input, please provide a corrent $($Type)." Write-Warning -Message ("Try {0} of {1}" -f ($Counter + 1), $MaxTry) } elseif ($Counter -ge $MaxTry) { Write-Error -Message "$($Type) does not match the regex" -Exception "System.Management.Automation.SetValueException" -Category InvalidResult -ErrorAction Stop return $false } $Counter++ } while ($UserPrincipalName -notmatch $Regex) } catch { Write-Verbose -Message ("Problem with $($Type) - {0}" -f $_.Exception.Message) return $false } } |