Oireet
Kun olet asentanut seuraavat lokakuun suojauspäivitykset Microsoft SharePoint Serveriin, jotkin Microsoft SharePoint 2010 -työnkulun skenaariot saatetaan estää. Lisäksi 6ksbk-tapahtumatunnisteet kirjataan SharePoint Unified Logging System (ULS) -lokeihin.
-
SharePoint Foundation 2013:n suojauspäivityksen kuvaus: 11. lokakuuta 2022 (KB5002284)
-
SharePoint Enterprise Server 2016:n suojauspäivityksen kuvaus: 11. lokakuuta 2022 (KB5002287)
-
SharePoint Server 2019 suojauspäivityksen kuvaus: 11. lokakuuta 2022 (KB5002278)
-
SharePoint Server Subscription Edition suojauspäivityksen kuvaus: 11. lokakuuta 2022 (KB5002290)
Syy
SharePoint vahvistaa SharePoint-työnkulkujen suojausta tukemalla nyt vain UTF-8-merkkikoodausta työnkulun .xoml-tiedostoissa.
Huomautus: SharePoint-työnkulun työkalut, kuten SharePoint Designer, Microsoft Visual Studio ja Nintex, luovat työnkulun .xoml-tiedostoja oletusarvoisesti käyttämällä UTF-8-merkkikoodausta. Tämä suojausparannus ei vaikuta asiakkaisiin, elleivät he ole muokanneet työnkulun .xoml-tiedostoja manuaalisesti ja muuntaneet niitä eri merkkikoodauksi. Tämä ongelma on dokumentoitu tässä KB-artikkelissa erittäin harvinaisesta mahdollisuudesta, että asiakkaat ovat päättäneet tehdä tämän.
Vaihtoehtoinen menetelmä
Jos olet muokannut työnkulun .xoml-tiedostoa manuaalisesti ja muuntanut sen muuksi merkkikoodauksi kuin UTF-8: ksi, sinun on muokattava tiedostoa uudelleen muuntaaksesi sen takaisin UTF-8:ksi. Varmista, että tiedoston XML-määritys määrittää koodauksen UTF-8:ksi, tallentaa tiedoston UTF-8-merkkikoodausmuotoon tekstieditorin avulla ja sitten määrittää sen uudelleen.
Seuraavaa PowerShell-komentosarjaa voidaan käyttää SharePoint-hallintaliittymässä sharepoint-sivustokokoelman työnkulun .xoml-tiedostojen skannaamiseen sen määrittämiseksi, vaikuttaako muutos niihin. IsGoodWorkflow tuloste on True työnkulun .xoml-tiedostoille, jotka käyttävät UTF-8-merkkikoodausta ja ovat yhteensopivia tämän muutoksen kanssa. IsGoodWorkflow tuloste on False työnkulun .xoml-tiedostoille, jotka eivät käytä UTF-8-merkkikoodausta ja joita on muokattava.
<#
.SYNOPSIS
Script to check character encoding of workflow .xoml files found in a site collection.
.DESCRIPTION
This script checks the character encoding of workflow .xoml files found in a site collection based
on the security improvement documented here: https://support.microsoft.com/topic/sharepoint-2010-workflows-might-be-blocked-by-enhanced-security-policy-kb5020238-eb91e24d-eea4-4490-a281-86503adc8b27
This could be altered to take an SPWebApplication object, iterate through all SPSite objects in the Sites SPSiteCollection,
and then iterate through all SPWeb subsites in the AllWebs SPWebCollection.
.EXAMPLE
Get-WorkflowStatusForSite -SiteCollectionUrl https://sharepoint
.EXAMPLE
Get-WorkflowStatusForSite -SiteCollectionUrl https://sharepoint -IgnoreSubSites
.INPUTS
None
.OUTPUTS
PSCustomObject with Site, Web, WorkflowFileName and IsGoodWorkflow Result
Site Web WorkflowFileName IsGoodWorkflow
---- --- ---------------- --------------
SPSite Url=http://sharepoint http://sharepoint/WorkflowTest 2010 Log Workflow.xoml True
SPSite Url=http://sharepoint http://sharepoint/WorkflowTest Another Test Log.xoml True
.NOTES
Version .1
#>
param(
[Parameter(Position=2,HelpMessage="The site collection URL to validate.")]
[string]$SiteCollectionUrl,
[Parameter(Position=3,HelpMessage="Ignore subsites below the top-level site in the site collection.")]
[switch]$IgnoreSubSites
)
function IsGoodWorkflow
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[System.Xml.XmlReader]$xmlReader
)
try {
$xDoc = [System.Xml.Linq.XDocument]::Load($xmlReader)
if ($null -ne $xDoc -and $null -ne $xDoc.Declaration -and $null -ne $xDoc.Declaration.Encoding)
{
if ($xdoc.Declaration.Encoding.ToLower() -ne "utf-8")
{
return $false
}
}
}
catch
{
return $false
}
return $true
}
function CheckWorkflowFile
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Microsoft.SharePoint.SPFile]$SPFile
)
$xmlReader = [System.Xml.XmlReader]::Create($SPFile.OpenBinaryStream())
if ($null -ne $xmlReader)
{
$isGood = $xmlReader | IsGoodWorkflow
$xmlReader.Close()
$xmlReader.Dispose()
return [PSCustomObject]@{
Site = $SPFile.Item.Web.Site
Web = $SPFile.Item.Web.Url
WorkflowFileName = $SPFile.Name
IsGoodWorkflow = $isGood
}
}
}
function CheckWorkflowsForWeb
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Microsoft.SharePoint.SPWeb]$SPWeb
)
write-host "Checking $SPweb"
$WorkflowsList = $SPWeb.Lists["Workflows"]
$results = @()
if ($WorkflowsList)
{
Write-Host "Found: " $WorkflowsList.Title
foreach ($listItem in $WorkflowsList.Items)
{
if ($listItem.File -and $listItem.File.Name.ToLower().EndsWith(".xoml"))
{
Write-Host "Found Workflow: " $listItem.File.Name
$results += (CheckWorkflowFile $listItem.File)
}
}
}
return $results
}
function CheckWorkflowsForSite
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Microsoft.SharePoint.SPSite]$SPSite,
[switch]$IgnoreSubSites
)
$results = @()
if ($IgnoreSubSites)
{
$SPWeb = $SPSite.RootWeb
$results += CheckWorkflowsForWeb $SPWeb
$SPWeb.Dispose()
}
else
{
foreach ($SPWeb in $SPSite.AllWebs)
{
$results += CheckWorkflowsForWeb $SPWeb
$SPWeb.Dispose()
}
}
return $results
}
if ([string]::IsNullOrEmpty($SiteCollectionUrl))
{
$SiteCollectionUrl = Read-Host "Please provide a site collection URL (Default: http://sharepoint)"
if ([String]::IsNullOrEmpty($SiteCollectionUrl))
{
$SiteCollectionUrl = "http://sharepoint"
}
}
$SPSite = Get-SPSite $SiteCollectionUrl -ErrorAction SilentlyContinue
if ($null -eq $SPSite)
{
Write-Host "Site collection $SiteCollectionUrl not found." -ForegroundColor Red
return;
}
$results = CheckWorkflowsForSite $SPSite
# Dispose of the Site
$SPSite.Dispose()
# Results can be exported to a CSV or manipulated
$results
Muutoshistoria
Seuraavassa taulukossa on yhteenveto tämän ohjeaiheen tärkeimmistä muutoksista.
Päivän |
Kuvaus |
---|---|
22. marraskuuta 2022 |
Lisäsin syy-osioon huomautuksen ja päivitit Vaihtoehtoinen menetelmä -osion PowerShell-komentosarjalla ja skannasit työnkulun .xoml-tiedostot. |