powershell-module/Az.Tools.Migration/Functions/Private/Confirm-StringBuilderSubstring.ps1 (62 lines of code) (raw):
function Confirm-StringBuilderSubstring
{
<#
.SYNOPSIS
Confirms that the substring exists at the specified offset in the string builder.
.DESCRIPTION
Confirms that the substring exists at the specified offset in the string builder. An error will be thrown if the offset positions do not match expectation.
.PARAMETER FileContents
Specify the file contents wrapped in a stringbuilder.
.PARAMETER Substring
Specify the substring to validate.
.PARAMETER StartOffset
Specify the start offset position.
.PARAMETER EndOffset
Specify the end offset position.
.EXAMPLE
PS C:\ Confirm-StringBuilderSubstring -FileContent $builder -Substring '-test' -StartOffset 23 -EndOffset 28
Confirms that the substring '-test' exists at the specified offset.
#>
[CmdletBinding()]
Param
(
[Parameter(
Mandatory=$true,
HelpMessage='Specify the file contents wrapped in a stringbuilder.')]
[System.Text.StringBuilder]
[ValidateNotNull()]
$FileContent,
[Parameter(
Mandatory=$true,
HelpMessage='Specify the substring to validate.')]
[System.String]
[ValidateNotNullOrEmpty()]
$Substring,
[Parameter(
Mandatory=$true,
HelpMessage='Specify the start offset position.')]
[System.String]
[ValidateNotNullOrEmpty()]
$StartOffset,
[Parameter(
Mandatory=$true,
HelpMessage='Specify the end offset position.')]
[System.String]
[ValidateNotNullOrEmpty()]
$EndOffset
)
Process
{
if ($FileContent.Length -lt $StartOffset -or $FileContent.Length -lt $EndOffset)
{
throw 'Upgrade step failed: Offset positions are beyond the file range.'
}
for (([int]$i = $StartOffset), ([int]$j = 0); $i -lt $EndOffset; ($i++), ($j++))
{
if ($FileContent[$i] -ne $Substring[$j])
{
throw 'Upgrade step failed: Offset positions are unexpected. This file may have already been upgraded or has changed since the upgrade plan was generated.'
}
}
}
}