Public/Network/WebTools/Get-WebTemplateEditableRegion.ps1
function Get-WebTemplateEditableRegion { <# .Synopsis Extracts out the editable regions from a dynamic web template .Description Determines what portions of a document are editable .Example Get-ChildItem -Filter *.dwt | Get-WebTemplateEditableRegion .Link Get-Web #> [CmdletBinding(DefaultParameterSetName = 'FilePath')] [OutputType([PSObject])] param( # The path to a document [Parameter(Mandatory = $true, ParameterSetName = 'FilePath', ValueFromPipelineByPropertyName = $true)] [Alias('Fullname')] [String] $FilePath, # The content of the document [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'DynamicWebTemplate', ValueFromPipelineByPropertyName = $true)] [Alias('DWT')] [String] $DynamicWebTemplate ) process { if ($PSCmdlet.ParameterSetName -eq 'FilePath') { $resolvedPath = $ExecutionContext.SessionState.Path.GetResolvedPSPathFromPSPath($FilePath) if (!$resolvedPath) { return } if ([IO.file]::Exists($resolvedPath)) { $text = [IO.File]::ReadAllText($resolvedPath) $rInf = Get-WebTemplateEditableRegion -DynamicWebTemplate $text -ErrorAction SilentlyContinue $regionInfo = New-Object PSObject -Property @{ FilePath = "$resolvedPath" Region = $rInf | Select-Object -ExpandProperty Region MatchInfo = $rInf | Select-Object -ExpandProperty MatchInfo } $regionInfo.pstypenames.clear() $regionInfo.pstypenames.add('DWTInfo') $regionInfo } } elseif ($PSCmdlet.ParameterSetName -eq 'DynamicWebTemplate') { # Find the start of the HTML tag, and try to convert to XHTML. # If this fails, present an error to the user. Be sure to ignore the case, because we # really don't care $htmlStart = $DynamicWebTemplate.IndexOf("<html", [StringComparison]::OrdinalIgnoreCase) if (!$htmlStart) { Write-Error "This content does not appear to be an HTML document. It does not have a <html> tag." return } $r = New-Object Text.RegularExpressions.Regex ("<!--\s#BeginEditable\s`"(?<region>\w+)`""), ("Singleline", "IgnoreCase") $results = @($r.Matches($DynamicWebTemplate)) foreach ($r in $results) { $regionInfo = New-Object PSObject -Property @{ Region = $r.Groups[1].Value MatchInfo = $r } $regionInfo.pstypenames.clear() $regionInfo.pstypenames.add('DWTInfo') $regionInfo } } } } |