PSWordPress.psm1
function Join-UriQuery { <# .SYNOPSIS Provides ability to join two Url paths together including advanced querying .DESCRIPTION Provides ability to join two Url paths together including advanced querying which is useful for RestAPI/GraphApi calls .PARAMETER BaseUri Primary Url to merge .PARAMETER RelativeOrAbsoluteUri Additional path to merge with primary url (optional) .PARAMETER QueryParameter Parameters and their values in form of hashtable .EXAMPLE Join-UriQuery -BaseUri 'https://evotec.xyz/' -RelativeOrAbsoluteUri '/wp-json/wp/v2/posts' -QueryParameter @{ page = 1 per_page = 20 search = 'SearchString' } .NOTES General notes #> [alias('Join-UrlQuery')] [CmdletBinding()] param ([parameter(Mandatory)][uri] $BaseUri, [parameter(Mandatory = $false)][uri] $RelativeOrAbsoluteUri, [Parameter(Mandatory)][System.Collections.IDictionary] $QueryParameter) if ($BaseUri -and $RelativeOrAbsoluteUri) { $Url = Join-Uri -BaseUri $BaseUri -RelativeOrAbsoluteUri $RelativeOrAbsoluteUri } else { $Url = $PrimaryUrl } $Collection = [System.Web.HttpUtility]::ParseQueryString([String]::Empty) foreach ($key in $QueryParameter.Keys) { $Collection.Add($key, $QueryParameter.$key) } $uriRequest = [System.UriBuilder] $Url $uriRequest.Query = $Collection.ToString() return $uriRequest.Uri.AbsoluteUri } function Remove-EmptyValue { [alias('Remove-EmptyValues')] [CmdletBinding()] param([alias('Splat', 'IDictionary')][Parameter(Mandatory)][System.Collections.IDictionary] $Hashtable, [string[]] $ExcludeParameter, [switch] $Recursive, [int] $Rerun) foreach ($Key in [string[]] $Hashtable.Keys) { if ($Key -notin $ExcludeParameter) { if ($Recursive) { if ($Hashtable[$Key] -is [System.Collections.IDictionary]) { if ($Hashtable[$Key].Count -eq 0) { $Hashtable.Remove($Key) } else { Remove-EmptyValue -Hashtable $Hashtable[$Key] -Recursive:$Recursive } } else { if ($null -eq $Hashtable[$Key] -or ($Hashtable[$Key] -is [string] -and $Hashtable[$Key] -eq '') -or ($Hashtable[$Key] -is [System.Collections.IList] -and $Hashtable[$Key].Count -eq 0)) { $Hashtable.Remove($Key) } } } else { if ($null -eq $Hashtable[$Key] -or ($Hashtable[$Key] -is [string] -and $Hashtable[$Key] -eq '') -or ($Hashtable[$Key] -is [System.Collections.IList] -and $Hashtable[$Key].Count -eq 0)) { $Hashtable.Remove($Key) } } } } if ($Rerun) { for ($i = 0; $i -lt $Rerun; $i++) { Remove-EmptyValue -Hashtable $Hashtable -Recursive:$Recursive } } } function Join-Uri { <# .SYNOPSIS Provides ability to join two Url paths together .DESCRIPTION Provides ability to join two Url paths together .PARAMETER BaseUri Primary Url to merge .PARAMETER RelativeOrAbsoluteUri Additional path to merge with primary url .EXAMPLE Join-Uri 'https://evotec.xyz/' '/wp-json/wp/v2/posts' .EXAMPLE Join-Uri 'https://evotec.xyz/' 'wp-json/wp/v2/posts' .EXAMPLE Join-Uri -BaseUri 'https://evotec.xyz/' -RelativeOrAbsoluteUri '/wp-json/wp/v2/posts' .EXAMPLE Join-Uri -BaseUri 'https://evotec.xyz/test/' -RelativeOrAbsoluteUri '/wp-json/wp/v2/posts' .NOTES General notes #> [alias('Join-Url')] [cmdletBinding()] param([parameter(Mandatory)][uri] $BaseUri, [parameter(Mandatory)][uri] $RelativeOrAbsoluteUri) return ($BaseUri.OriginalString.TrimEnd('/') + "/" + $RelativeOrAbsoluteUri.OriginalString.TrimStart('/')) } function Invoke-RestApi { [cmdletBinding(SupportsShouldProcess)] param( [alias('PrimaryUri')][uri] $BaseUri, [alias('Uri')][uri] $RelativeOrAbsoluteUri, [System.Collections.IDictionary] $QueryParameter, [alias('Authorization')][System.Collections.IDictionary] $Headers, [validateset('GET', 'DELETE', 'POST', 'PATCH')][string] $Method = 'GET', [string] $ContentType = "application/json; charset=UTF-8", [System.Collections.IDictionary] $Body, [switch] $FullUri ) if ($Authorization.Error) { Write-Warning "Invoke-RestApi - Authorization error. Skipping." return } $RestSplat = @{ Headers = $Headers Method = $Method ContentType = $ContentType Body = $Body | ConvertTo-Json -Depth 5 } Remove-EmptyValue -Hashtable $RestSplat if ($FullUri) { $RestSplat.Uri = $PrimaryUri } else { $RestSplat.Uri = Join-UriQuery -QueryParameter $QueryParameter -BaseUri $BaseUri -RelativeOrAbsoluteUri $RelativeOrAbsoluteUri } if ($PSCmdlet.ShouldProcess("$($RestSplat.Uri)", "Invoking query with $Method")) { try { Write-Verbose "Invoke-RestApi - Querying $($RestSplat.Uri) method $Method" $OutputQuery = Invoke-RestMethod @RestSplat -Verbose:$false if ($Method -in 'GET') { if ($OutputQuery) { $OutputQuery } <# if ($OutputQuery.'@odata.nextLink') { $RestSplat.Uri = $OutputQuery.'@odata.nextLink' $MoreData = Invoke-RestApi @RestSplat -FullUri if ($MoreData) { $MoreData } } #> } elseif ($Method -in 'POST') { $OutputQuery } else { return $true } } catch { $RestError = $_.ErrorDetails.Message if ($RestError) { try { $ErrorMessage = ConvertFrom-Json -InputObject $RestError $ErrorMy = -join ('JSON Error:' , $ErrorMessage.error.code, ' ', $ErrorMessage.error.message, ' Additional Error: ', $_.Exception.Message) Write-Warning $ErrorMy } catch { Write-Warning $_.Exception.Message } } else { Write-Warning $_.Exception.Message } if ($Method -ne 'GET', 'POST') { return $false } } } } function Connect-Wordpress { [cmdletBinding(DefaultParameterSetName = 'Password')] param( [Parameter(ParameterSetName = 'ClearText')] [string] $UserName, [Parameter(ParameterSetName = 'ClearText')] [string] $Password, [Parameter(ParameterSetName = 'ClearText')] [Parameter(ParameterSetName = 'Password')] [alias('Uri')][Uri] $Url, [Parameter(ParameterSetName = 'Password')] [pscredential] $Credential ) if ($Username -and $Password) { $UserNameApi = $UserName $PasswordApi = $Password } elseif ($Credential) { $UserNameApi = $Credential.UserName $PasswordApi = $Credential.GetNetworkCredential().Password } $Authorization = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("$UserNameApi`:$PasswordApi"))) $Auth = @{ Header = @{ Authorization = -join ("Basic ", $Authorization) } Url = $Url } $Auth } function Get-WordPressCategory { [cmdletBinding(DefaultParameterSetName = 'List')] param( [Parameter(ParameterSetName = 'List', Mandatory)] [Parameter(ParameterSetName = 'Id', Mandatory)] [System.Collections.IDictionary] $Authorization, [Parameter(ParameterSetName = 'Id')][int[]] $Id, [Parameter(ParameterSetName = 'List')][int] $Page, [Parameter(ParameterSetName = 'List')][int] $RecordsPerPage, [Parameter(ParameterSetName = 'List')][string] $Search, [Parameter(ParameterSetName = 'List')][string] $Exclude, [Parameter(ParameterSetName = 'List')][string] $Include, [Parameter(ParameterSetName = 'List')][string] $Slug, [Parameter(ParameterSetName = 'List')][string] $Parent, [Parameter(ParameterSetName = 'List')][string] $Post, [Parameter(ParameterSetName = 'List')][ValidateSet('view', 'embed', 'edit')][string] $Context, [Parameter(ParameterSetName = 'List')][ValidateSet('asc', 'desc')][string] $Order, [Parameter(ParameterSetName = 'List')][ValidateSet('id', 'include', 'name', 'slug', 'include_slugs', 'term_group', 'description', 'count')][string] $OrderBy, [switch] $HideUnused ) if ($Id) { foreach ($I in $Id) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/categories/$I" -Headers $Authorization.Header -QueryParameter @{} } } else { $QueryParameters = [ordered] @{ context = $Context search = $Search include = $Include exclude = $Exclude order = $Order orderby = $OrderBy slug = $Slug tags = $Tags parent = $Parent post = $Post } if ($HideUnused) { $QueryParameters['hide_empty'] = $HideUnused.IsPresent } if ($Page) { $QueryParameters['page'] = $Page } if ($RecordsPerPage) { $QueryParameters['per_page'] = $RecordsPerPage } Remove-EmptyValue -Hashtable $QueryParameters Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/categories' -QueryParameter $QueryParameters -Headers $Authorization.Header } } function Get-WordPressPage { [cmdletBinding(DefaultParameterSetName = 'List')] param( [Parameter(ParameterSetName = 'List', Mandatory)] [Parameter(ParameterSetName = 'Id', Mandatory)] [System.Collections.IDictionary] $Authorization, [Parameter(ParameterSetName = 'Id')][int] $Id, [Parameter(ParameterSetName = 'Id')] [Parameter(ParameterSetName = 'List')] [ValidateSet('edit', 'view')][string[]] $Context, [Parameter(ParameterSetName = 'List')][int] $Include, [Parameter(ParameterSetName = 'List')][int] $Exclude, [Parameter(ParameterSetName = 'List')][int] $Page, [Parameter(ParameterSetName = 'List')][int] $RecordsPerPage, [Parameter(ParameterSetName = 'List')][string] $Search, [Parameter(ParameterSetName = 'List')][string] $Author, [Parameter(ParameterSetName = 'List')][string] $ExcludeAuthor, [ValidateSet('publish', 'future', 'draft', 'pending', 'private')][Parameter(ParameterSetName = 'List')][string[]] $Status, [Parameter(ParameterSetName = 'List')][string] $Slug, [Parameter(ParameterSetName = 'List')][int[]] $Tags, [Parameter(ParameterSetName = 'List')][int[]] $ExcludeTags, [Parameter(ParameterSetName = 'List')][int[]] $Categories, [Parameter(ParameterSetName = 'List')][int[]] $ExcludeCategories, [Parameter(ParameterSetName = 'List')][ValidateSet('asc', 'desc')][string] $Order, [Parameter(ParameterSetName = 'List')][ValidateSet('author', 'date', 'id', 'include', 'modified', 'parent', 'relevance', 'slug', 'include_slugs', 'title')][string] $OrderBy ) if ($Id) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/pages/$id" -Headers $Authorization.Header -QueryParameter @{} } else { $QueryParameters = [ordered] @{ search = $Search author = $Author author_exclude = $ExcludeAuthor status = $Status order = $Order orderby = $OrderBy slug = $Slug context = $Context } if ($Tags) { $QueryParameters['tags'] = $Tags } if ($Categories) { $QueryParameters['categories'] = $Categories } if ($ExcludeTags) { $QueryParameters['tags_exclude'] = $ExludeTags } if ($ExcludeCategories) { $QueryParameters['categories_exclude'] = $ExcludeCategories } if ($Include) { $QueryParameters['include'] = $Include } if ($Exclude) { $QueryParameters['exclude'] = $Exclude } if ($Page) { $QueryParameters['page'] = $Page } if ($RecordsPerPage) { $QueryParameters['per_page'] = $RecordsPerPage } Remove-EmptyValue -Hashtable $QueryParameters Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/pages' -QueryParameter $QueryParameters -Headers $Authorization.Header } } function Get-WordPressPost { [cmdletBinding(DefaultParameterSetName = 'List')] param( [Parameter(ParameterSetName = 'List', Mandatory)] [Parameter(ParameterSetName = 'Id', Mandatory)] [System.Collections.IDictionary] $Authorization, [Parameter(ParameterSetName = 'Id')][int] $Id, [Parameter(ParameterSetName = 'Id')] [Parameter(ParameterSetName = 'List')] [ValidateSet('edit', 'view')][string[]] $Context, [Parameter(ParameterSetName = 'List')][int] $Include, [Parameter(ParameterSetName = 'List')][int] $Exclude, [Parameter(ParameterSetName = 'List')][int] $Page, [Parameter(ParameterSetName = 'List')][int] $RecordsPerPage, [Parameter(ParameterSetName = 'List')][string] $Search, [Parameter(ParameterSetName = 'List')][string] $Author, [Parameter(ParameterSetName = 'List')][string] $ExcludeAuthor, [ValidateSet('publish', 'future', 'draft', 'pending', 'private')][Parameter(ParameterSetName = 'List')][string[]] $Status, [Parameter(ParameterSetName = 'List')][string] $Slug, [Parameter(ParameterSetName = 'List')][int[]] $Tags, [Parameter(ParameterSetName = 'List')][int[]] $ExcludeTags, [Parameter(ParameterSetName = 'List')][int[]] $Categories, [Parameter(ParameterSetName = 'List')][int[]] $ExcludeCategories, [Parameter(ParameterSetName = 'List')][ValidateSet('asc', 'desc')][string] $Order, [Parameter(ParameterSetName = 'List')][ValidateSet('author', 'date', 'id', 'include', 'modified', 'parent', 'relevance', 'slug', 'include_slugs', 'title')][string] $OrderBy ) if ($Id) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/posts/$id" -Headers $Authorization.Header -QueryParameter @{} } else { $QueryParameters = [ordered] @{ search = $Search author = $Author author_exclude = $ExcludeAuthor status = $Status order = $Order orderby = $OrderBy slug = $Slug context = $Context } if ($Tags) { $QueryParameters['tags'] = $Tags } if ($Categories) { $QueryParameters['categories'] = $Categories } if ($ExcludeTags) { $QueryParameters['tags_exclude'] = $ExludeTags } if ($ExcludeCategories) { $QueryParameters['categories_exclude'] = $ExcludeCategories } if ($Include) { $QueryParameters['include'] = $Include } if ($Exclude) { $QueryParameters['exclude'] = $Exclude } if ($Page) { $QueryParameters['page'] = $Page } if ($RecordsPerPage) { $QueryParameters['per_page'] = $RecordsPerPage } Remove-EmptyValue -Hashtable $QueryParameters Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/posts' -QueryParameter $QueryParameters -Headers $Authorization.Header } } function Get-WordPressSetting { [cmdletBinding()] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization ) $QueryParameters = [ordered] @{ } Remove-EmptyValue -Hashtable $QueryParameters Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/settings' -QueryParameter $QueryParameters -Headers $Authorization.Header } function Get-WordPressTag { [cmdletBinding(DefaultParameterSetName = 'List')] param( [Parameter(ParameterSetName = 'List', Mandatory)] [Parameter(ParameterSetName = 'Id', Mandatory)] [System.Collections.IDictionary] $Authorization, [Parameter(ParameterSetName = 'Id')][int[]] $Id, [Parameter(ParameterSetName = 'List')][int] $Page, [Parameter(ParameterSetName = 'List')][int] $RecordsPerPage, [Parameter(ParameterSetName = 'List')][string] $Search, [Parameter(ParameterSetName = 'List')][string] $Exclude, [Parameter(ParameterSetName = 'List')][string] $Include, [Parameter(ParameterSetName = 'List')][string] $Slug, [Parameter(ParameterSetName = 'List')][string] $Parent, [Parameter(ParameterSetName = 'List')][string] $Post, [Parameter(ParameterSetName = 'List')][ValidateSet('view', 'embed', 'edit')][string] $Context, [Parameter(ParameterSetName = 'List')][ValidateSet('asc', 'desc')][string] $Order, [Parameter(ParameterSetName = 'List')][ValidateSet('id', 'include', 'name', 'slug', 'include_slugs', 'term_group', 'description', 'count')][string] $OrderBy, [Parameter(ParameterSetName = 'List')][switch] $HideUnused ) if ($Id) { foreach ($I in $Id) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/tags/$I" -Headers $Authorization.Header -QueryParameter @{} } } else { $QueryParameters = [ordered] @{ context = $Context search = $Search include = $Include exclude = $Exclude order = $Order orderby = $OrderBy slug = $Slug tags = $Tags parent = $Parent post = $Post } if ($HideUnused) { $QueryParameters['hide_empty'] = $HideUnused.IsPresent } if ($Page) { $QueryParameters['page'] = $Page } if ($RecordsPerPage) { $QueryParameters['per_page'] = $RecordsPerPage } Remove-EmptyValue -Hashtable $QueryParameters Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/tags' -QueryParameter $QueryParameters -Headers $Authorization.Header } } function New-WordPressPage { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [string] $Date, [string] $Slug, [ValidateSet('publish', 'future', 'draft', 'pending', 'private')][string] $Status, [string] $Title, [int] $Parent, [string] $Password, [string] $Content, [int] $Author, [string] $Excerpt, [int] $FeaturedMedia, [ValidateSet('open', 'closed')][string] $CommentStatus, [ValidateSet('open', 'closed')][string] $PingStatus, [string] $Meta, [string] $Template, [int] $MenuOrder ) $QueryParameters = [ordered] @{ title = $Title date = $Date slug = $Slug status = $Status password = $Password content = $Content excerpt = $Excerpt comment_status = $CommentStatus ping_status = $PingStatus meta = $Meta template = $Template } if ($Parent) { $QueryParameters['parent'] = $Parent } if ($FeaturedMedia) { $QueryParameters['featured_media'] = $FeaturedMedia } if ($Author) { $QueryParameters['author'] = $Author } if ($MenuOrder) { $QueryParameters['menu_order'] = $MenuOrder } Remove-EmptyValue -Hashtable $QueryParameters if ($QueryParameters.Keys.Count -gt 0) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/pages' -QueryParameter $QueryParameters -Headers $Authorization.Header -Method POST } else { Write-Warning "New-WordPressPage - parameters not provided. Skipping." } } function New-WordPressPost { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [string] $Date, [string] $Slug, [ValidateSet('publish', 'future', 'draft', 'pending', 'private')][string] $Status, [string] $Title, [string] $Password, [string] $Content, [int] $Author, [string] $Excerpt, [int] $FeaturedMedia, [ValidateSet('open', 'closed')][string] $CommentStatus, [ValidateSet('open', 'closed')][string] $PingStatus, [ValidateSet('standard', 'aside', 'chat', 'gallery', 'link', 'image', 'quote', 'status', 'video', 'audio')][string] $Format, [string] $Meta, [nullable[bool]] $Sticky, [int[]] $Tags, [int[]] $Categories ) $QueryParameters = [ordered] @{ title = $Title date = $Date slug = $Slug status = $Status password = $Password content = $Content excerpt = $Excerpt comment_status = $CommentStatus ping_status = $PingStatus format = $Format meta = $Meta } if ($Tags) { $QueryParameters['tags'] = $Tags } if ($Categories) { $QueryParameters['categories'] = $Categories } if ($FeaturedMedia) { $QueryParameters['featured_media'] = $FeaturedMedia } if ($Author) { $QueryParameters['author'] = $Author } Remove-EmptyValue -Hashtable $QueryParameters if ($QueryParameters.Keys.Count -gt 0) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/posts' -QueryParameter $QueryParameters -Headers $Authorization.Header -Method POST } else { Write-Warning "New-WordPressPost - parameters not provided. Skipping." } } function Remove-WordPressPage { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [Parameter(Mandatory)][int] $Id, [switch] $Force ) $QueryParameters = [ordered] @{} if ($Force) { $QueryParameters['force'] = $Force.IsPresent } Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/pages/$Id" -QueryParameter $QueryParameters -Headers $Authorization.Header -Method DELETE } function Remove-WordPressPost { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [Parameter(Mandatory)][int] $Id, [switch] $Force ) $QueryParameters = [ordered] @{} if ($Force) { $QueryParameters['force'] = $Force.IsPresent } Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/posts/$Id" -QueryParameter $QueryParameters -Headers $Authorization.Header -Method DELETE } function Set-WordPressPage { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [Parameter(Mandatory)][int] $Id, [string] $Date, [string] $Slug, [ValidateSet('publish', 'future', 'draft', 'pending', 'private')][string] $Status, [string] $Title, [int] $Parent, [string] $Password, [string] $Content, [int] $Author, [string] $Excerpt, [int] $FeaturedMedia, [ValidateSet('open', 'closed')][string] $CommentStatus, [ValidateSet('open', 'closed')][string] $PingStatus, [string] $Meta, [string] $Template, [int] $MenuOrder ) $QueryParameters = [ordered] @{ title = $Title date = $Date slug = $Slug status = $Status password = $Password content = $Content excerpt = $Excerpt comment_status = $CommentStatus ping_status = $PingStatus meta = $Meta template = $Template } if ($Parent) { $QueryParameters['parent'] = $Parent } if ($FeaturedMedia) { $QueryParameters['featured_media'] = $FeaturedMedia } if ($Author) { $QueryParameters['author'] = $Author } if ($MenuOrder) { $QueryParameters['menu_order'] = $MenuOrder } Remove-EmptyValue -Hashtable $QueryParameters if ($QueryParameters.Keys.Count -gt 0) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/pages/$Id" -QueryParameter $QueryParameters -Headers $Authorization.Header -Method POST } else { Write-Warning "Set-WordPressPage - parameters not provided. Skipping." } } function Set-WordPressPost { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [Parameter(Mandatory)][int] $Id, [string] $Date, [string] $Slug, [ValidateSet('publish', 'future', 'draft', 'pending', 'private')][string] $Status, [string] $Title, [string] $Password, [string] $Content, [int] $Author, [string] $Excerpt, [int] $FeaturedMedia, [ValidateSet('open', 'closed')][string] $CommentStatus, [ValidateSet('open', 'closed')][string] $PingStatus, [ValidateSet('standard', 'aside', 'chat', 'gallery', 'link', 'image', 'quote', 'status', 'video', 'audio')][string] $Format, [string] $Meta, [nullable[bool]] $Sticky, [int[]] $Tags, [int[]] $Categories ) $QueryParameters = [ordered] @{ title = $Title date = $Date slug = $Slug status = $Status password = $Password content = $Content excerpt = $Excerpt comment_status = $CommentStatus ping_status = $PingStatus format = $Format meta = $Meta } if ($Tags) { $QueryParameters['tags'] = $Tags } if ($Categories) { $QueryParameters['categories'] = $Categories } if ($FeaturedMedia) { $QueryParameters['featured_media'] = $FeaturedMedia } if ($Author) { $QueryParameters['author'] = $Author } Remove-EmptyValue -Hashtable $QueryParameters if ($QueryParameters.Keys.Count -gt 0) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri "wp-json/wp/v2/posts/$Id" -QueryParameter $QueryParameters -Headers $Authorization.Header -Method POST } else { Write-Warning "Set-WordPressPost - parameters not provided. Skipping." } } function Set-WordPressSetting { [cmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory)][System.Collections.IDictionary] $Authorization, [string] $Title, [string] $Description, [string] $Url, [string] $Email, [string] $TimeZone, [string] $DateFormat, [string] $TimeFormat, [string] $StartOfWeek, [string] $Language, [int] $PostsPerPage, [int] $DefaultCategory, [int] $DefaultPostFormat, [nullable[bool]] $UseSmiles, [ValidateSet('open', 'closed')][string] $DefaultPingStatus, [ValidateSet('open', 'closed')][string] $DefaultCommentStatus ) $QueryParameters = [ordered] @{ title = $Title description = $Description url = $Url email = $Email timezone = $TimeZone date_format = $DateFormat time_format = $TimeFormat start_of_week = $StartOfWeek language = $Language default_comment_status = $DefaultPingStatus default_ping_status = $DefaultCommentStatus } if ($null -ne $UseSmiles) { $QueryParameters['use_smiles'] = $UseSmiles } if ($DefaultCategory) { $QueryParameters['posts_per_page'] = $PostsPerPage } if ($PostsPerPage) { $QueryParameters['default_category'] = $DefaultCategory } if ($DefaultPostFormat) { $QueryParameters['default_post_format'] = $DefaultPostFormat } Remove-EmptyValue -Hashtable $QueryParameters if ($QueryParameters.Keys.Count -gt 0) { Invoke-RestApi -PrimaryUri $Authorization.Url -Uri 'wp-json/wp/v2/settings' -QueryParameter $QueryParameters -Headers $Authorization.Header -Method POST } else { Write-Warning "Set-WordPressSetting - parameters not provided. Skipping." } } Export-ModuleMember -Function @('Connect-Wordpress', 'Get-WordPressCategory', 'Get-WordPressPage', 'Get-WordPressPost', 'Get-WordPressSetting', 'Get-WordPressTag', 'New-WordPressPage', 'New-WordPressPost', 'Remove-WordPressPage', 'Remove-WordPressPost', 'Set-WordPressPage', 'Set-WordPressPost', 'Set-WordPressSetting') -Alias @() # SIG # Begin signature block # MIIdWQYJKoZIhvcNAQcCoIIdSjCCHUYCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUqNXm+XNMx6HJbeBJTjBXBg++ # ddCgghhnMIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0B # AQUFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk # IElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQsw # CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu # ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg # Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg # +XESpa7cJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lT # XDGEKvYPmDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5 # a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g # 0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1 # roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf # GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G # A1UdDgQWBBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLL # gjEtUYunpyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3 # cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmr # EthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+ # fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5Q # Z7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu # 838fYxAe+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw # 8jCCBP4wggPmoAMCAQICEA1CSuC+Ooj/YEAhzhQA8N0wDQYJKoZIhvcNAQELBQAw # cjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ # d3d3LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVk # IElEIFRpbWVzdGFtcGluZyBDQTAeFw0yMTAxMDEwMDAwMDBaFw0zMTAxMDYwMDAw # MDBaMEgxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4G # A1UEAxMXRGlnaUNlcnQgVGltZXN0YW1wIDIwMjEwggEiMA0GCSqGSIb3DQEBAQUA # A4IBDwAwggEKAoIBAQDC5mGEZ8WK9Q0IpEXKY2tR1zoRQr0KdXVNlLQMULUmEP4d # yG+RawyW5xpcSO9E5b+bYc0VkWJauP9nC5xj/TZqgfop+N0rcIXeAhjzeG28ffnH # bQk9vmp2h+mKvfiEXR52yeTGdnY6U9HR01o2j8aj4S8bOrdh1nPsTm0zinxdRS1L # sVDmQTo3VobckyON91Al6GTm3dOPL1e1hyDrDo4s1SPa9E14RuMDgzEpSlwMMYpK # jIjF9zBa+RSvFV9sQ0kJ/SYjU/aNY+gaq1uxHTDCm2mCtNv8VlS8H6GHq756Wwog # L0sJyZWnjbL61mOLTqVyHO6fegFz+BnW/g1JhL0BAgMBAAGjggG4MIIBtDAOBgNV # HQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcD # CDBBBgNVHSAEOjA4MDYGCWCGSAGG/WwHATApMCcGCCsGAQUFBwIBFhtodHRwOi8v # d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHwYDVR0jBBgwFoAU9LbhIB3+Ka7S5GGlsqIl # ssgXNW4wHQYDVR0OBBYEFDZEho6kurBmvrwoLR1ENt3janq8MHEGA1UdHwRqMGgw # MqAwoC6GLGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtdHMu # Y3JsMDKgMKAuhixodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVk # LXRzLmNybDCBhQYIKwYBBQUHAQEEeTB3MCQGCCsGAQUFBzABhhhodHRwOi8vb2Nz # cC5kaWdpY2VydC5jb20wTwYIKwYBBQUHMAKGQ2h0dHA6Ly9jYWNlcnRzLmRpZ2lj # ZXJ0LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURUaW1lc3RhbXBpbmdDQS5jcnQw # DQYJKoZIhvcNAQELBQADggEBAEgc3LXpmiO85xrnIA6OZ0b9QnJRdAojR6OrktIl # xHBZvhSg5SeBpU0UFRkHefDRBMOG2Tu9/kQCZk3taaQP9rhwz2Lo9VFKeHk2eie3 # 8+dSn5On7UOee+e03UEiifuHokYDTvz0/rdkd2NfI1Jpg4L6GlPtkMyNoRdzDfTz # ZTlwS/Oc1np72gy8PTLQG8v1Yfx1CAB2vIEO+MDhXM/EEXLnG2RJ2CKadRVC9S0y # OIHa9GCiurRS+1zgYSQlT7LfySmoc0NR2r1j1h9bm/cuG08THfdKDXF+l7f0P4Tr # weOjSaH6zqe/Vs+6WXZhiV9+p7SOZ3j5NpjhyyjaW4emii8wggUwMIIEGKADAgEC # AhAECRgbX9W7ZnVTQ7VvlVAIMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVT # MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j # b20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMzEw # MjIxMjAwMDBaFw0yODEwMjIxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV # BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwggEi # MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD407Mcfw4Rr2d3B9MLMUkZz9D7 # RZmxOttE9X/lqJ3bMtdx6nadBS63j/qSQ8Cl+YnUNxnXtqrwnIal2CWsDnkoOn7p # 0WfTxvspJ8fTeyOU5JEjlpB3gvmhhCNmElQzUHSxKCa7JGnCwlLyFGeKiUXULaGj # 6YgsIJWuHEqHCN8M9eJNYBi+qsSyrnAxZjNxPqxwoqvOf+l8y5Kh5TsxHM/q8grk # V7tKtel05iv+bMt+dDk2DZDv5LVOpKnqagqrhPOsZ061xPeM0SAlI+sIZD5SlsHy # DxL0xY4PwaLoLFH3c7y9hbFig3NBggfkOItqcyDQD2RzPJ6fpjOp/RnfJZPRAgMB # AAGjggHNMIIByTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAT # BgNVHSUEDDAKBggrBgEFBQcDAzB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGG # GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2Nh # Y2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDCB # gQYDVR0fBHoweDA6oDigNoY0aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lD # ZXJ0QXNzdXJlZElEUm9vdENBLmNybDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNl # cnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDBPBgNVHSAESDBGMDgG # CmCGSAGG/WwAAgQwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQu # Y29tL0NQUzAKBghghkgBhv1sAzAdBgNVHQ4EFgQUWsS5eyoKo6XqcQPAYPkt9mV1 # DlgwHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wDQYJKoZIhvcNAQEL # BQADggEBAD7sDVoks/Mi0RXILHwlKXaoHV0cLToaxO8wYdd+C2D9wz0PxK+L/e8q # 3yBVN7Dh9tGSdQ9RtG6ljlriXiSBThCk7j9xjmMOE0ut119EefM2FAaK95xGTlz/ # kLEbBw6RFfu6r7VRwo0kriTGxycqoSkoGjpxKAI8LpGjwCUR4pwUR6F6aGivm6dc # IFzZcbEMj7uo+MUSaJ/PQMtARKUT8OZkDCUIQjKyNookAv4vcn4c10lFluhZHen6 # dGRrsutmQ9qzsIzV6Q3d9gEgzpkxYz0IGhizgZtPxpMQBvwHgfqL2vmCSfdibqFT # +hKUGIUukpHqaGxEMrJmoecYpJpkUe8wggUxMIIEGaADAgECAhAKoSXW1jIbfkHk # Bdo2l8IVMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxE # aWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMT # G0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xNjAxMDcxMjAwMDBaFw0z # MTAxMDcxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0 # IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3DQEB # AQUAA4IBDwAwggEKAoIBAQC90DLuS82Pf92puoKZxTlUKFe2I0rEDgdFM1EQfdD5 # fU1ofue2oPSNs4jkl79jIZCYvxO8V9PD4X4I1moUADj3Lh477sym9jJZ/l9lP+Cb # 6+NGRwYaVX4LJ37AovWg4N4iPw7/fpX786O6Ij4YrBHk8JkDbTuFfAnT7l3ImgtU # 46gJcWvgzyIQD3XPcXJOCq3fQDpct1HhoXkUxk0kIzBdvOw8YGqsLwfM/fDqR9mI # UF79Zm5WYScpiYRR5oLnRlD9lCosp+R1PrqYD4R/nzEU1q3V8mTLex4F0IQZchfx # FwbvPc3WTe8GQv2iUypPhR3EHTyvz9qsEPXdrKzpVv+TAgMBAAGjggHOMIIByjAd # BgNVHQ4EFgQU9LbhIB3+Ka7S5GGlsqIlssgXNW4wHwYDVR0jBBgwFoAUReuir/SS # y4IxLVGLp6chnfNtyA8wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMC # AYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUF # BzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6 # Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5j # cnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9E # aWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRp # Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwUAYDVR0gBEkw # RzA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2lj # ZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4IBAQBxlRLp # UYdWac3v3dp8qmN6s3jPBjdAhO9LhL/KzwMC/cWnww4gQiyvd/MrHwwhWiq3BTQd # aq6Z+CeiZr8JqmDfdqQ6kw/4stHYfBli6F6CJR7Euhx7LCHi1lssFDVDBGiy23UC # 4HLHmNY8ZOUfSBAYX4k4YU1iRiSHY4yRUiyvKYnleB/WCxSlgNcSR3CzddWThZN+ # tpJn+1Nhiaj1a5bA9FhpDXzIAbG5KHW3mWOFIoxhynmUfln8jA/jb7UBJrZspe6H # USHkWGCbugwtK22ixH67xCUrRwIIfEmuE7bhfEJCKMYYVs9BNLZmXbZ0e/VWMyIv # IjayS6JKldj1po5SMIIFPTCCBCWgAwIBAgIQBNXcH0jqydhSALrNmpsqpzANBgkq # hkiG9w0BAQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j # MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBT # SEEyIEFzc3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMDYyNjAwMDAwMFoX # DTIzMDcwNzEyMDAwMFowejELMAkGA1UEBhMCUEwxEjAQBgNVBAgMCcWabMSFc2tp # ZTERMA8GA1UEBxMIS2F0b3dpY2UxITAfBgNVBAoMGFByemVteXPFgmF3IEvFgnlz # IEVWT1RFQzEhMB8GA1UEAwwYUHJ6ZW15c8WCYXcgS8WCeXMgRVZPVEVDMIIBIjAN # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7KB3iyBrhkLUbbFe9qxhKKPBYqD # Bqlnr3AtpZplkiVjpi9dMZCchSeT5ODsShPuZCIxJp5I86uf8ibo3vi2S9F9AlfF # jVye3dTz/9TmCuGH8JQt13ozf9niHecwKrstDVhVprgxi5v0XxY51c7zgMA2g1Ub # +3tii0vi/OpmKXdL2keNqJ2neQ5cYly/GsI8CREUEq9SZijbdA8VrRF3SoDdsWGf # 3tZZzO6nWn3TLYKQ5/bw5U445u/V80QSoykszHRivTj+H4s8ABiforhi0i76beA6 # Ea41zcH4zJuAp48B4UhjgRDNuq8IzLWK4dlvqrqCBHKqsnrF6BmBrv+BXQIDAQAB # o4IBxTCCAcEwHwYDVR0jBBgwFoAUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHQYDVR0O # BBYEFBixNSfoHFAgJk4JkDQLFLRNlJRmMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUE # DDAKBggrBgEFBQcDAzB3BgNVHR8EcDBuMDWgM6Axhi9odHRwOi8vY3JsMy5kaWdp # Y2VydC5jb20vc2hhMi1hc3N1cmVkLWNzLWcxLmNybDA1oDOgMYYvaHR0cDovL2Ny # bDQuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwTAYDVR0gBEUw # QzA3BglghkgBhv1sAwEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNl # cnQuY29tL0NQUzAIBgZngQwBBAEwgYQGCCsGAQUFBwEBBHgwdjAkBggrBgEFBQcw # AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tME4GCCsGAQUFBzAChkJodHRwOi8v # Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRTSEEyQXNzdXJlZElEQ29kZVNp # Z25pbmdDQS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAmr1s # z4lsLARi4wG1eg0B8fVJFowtect7SnJUrp6XRnUG0/GI1wXiLIeow1UPiI6uDMsR # XPHUF/+xjJw8SfIbwava2eXu7UoZKNh6dfgshcJmo0QNAJ5PIyy02/3fXjbUREHI # NrTCvPVbPmV6kx4Kpd7KJrCo7ED18H/XTqWJHXa8va3MYLrbJetXpaEPpb6zk+l8 # Rj9yG4jBVRhenUBUUj3CLaWDSBpOA/+sx8/XB9W9opYfYGb+1TmbCkhUg7TB3gD6 # o6ESJre+fcnZnPVAPESmstwsT17caZ0bn7zETKlNHbc1q+Em9kyBjaQRcEQoQQNp # ezQug9ufqExx6lHYDjGCBFwwggRYAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYD # VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAv # BgNVBAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EC # EATV3B9I6snYUgC6zZqbKqcwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAI # oAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIB # CzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFIMkmGWNq4F/234WwVGd # ZHb3zfb6MA0GCSqGSIb3DQEBAQUABIIBAJba68N2QPVLkiWy+wR6ji6yqAuU8ori # aH76lM7jxg//7MqaM86Akfv6hXuMPLkNj6ecUhZp9MwAFFedu2msXhe72FCUYKwb # sEWtszmXILTWUxBuOHH+FsfkWbubi6FzkQGtatab8ljMA0oWbswoipF2U6BJ0gZb # t228GyIuUrEUJU+MA1v/AmO7k4Y2kbZqm5pvA0cFV92RQMCRskRxKssJHZEhpYzg # +tY4NXQD2Fc29RwE9+uHDT+d1TSeD9ntYsYmiuo2MSoUEKAMhHeV3eVXDV1SON/5 # Es1pMh0cdQnKV2xWRrZLBH+e76DSarGKoBMtWZTkrkqQrYHPoVuwYz2hggIwMIIC # LAYJKoZIhvcNAQkGMYICHTCCAhkCAQEwgYYwcjELMAkGA1UEBhMCVVMxFTATBgNV # BAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTExMC8G # A1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVzdGFtcGluZyBDQQIQ # DUJK4L46iP9gQCHOFADw3TANBglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJAzEL # BgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIxMDQxMzA5MjYwMVowLwYJKoZI # hvcNAQkEMSIEIPkVNsVk3ci/UfiZIT/GTNVxr3VR+sKo7f39DjqGycB+MA0GCSqG # SIb3DQEBAQUABIIBACR8UyjoFuNvMgO+vKbBLevShjoduT3IRURlue/bT7ZmuTNY # AIOqW6Ok029v/YkTOH2ZzeGETn8CTed5aQj/KoKLLAJq5pNzafOOQpM4vOJU48Z/ # z8MrxAKBqCquCxHJH/M/byBRNaycQjgik8THAuATwb18nWVgoW/nWfa6EVbMIeuP # 99os/1wjod5h4eL5YFZaHIijqQr8+KRXY6kcxNOTunSiHdGsg7b8yDrXtUdq+W/S # /ZNgt1h1NtBtXpDhqg+laF8RcBw+EvoG5nYYkSW2Uz4DruhJc8F4GqtiL6iaimYO # Kr+mpX0iwJURVkQSsTguzJmEWdwhPNzpo2D8vVY= # SIG # End signature block |