Požymiai
Įdiegus šiuos spalio mėn. saugos naujinimus, skirtus "Microsoft" SharePoint Server", kai kurie "Microsoft" "SharePoint 2010" darbo eigos scenarijai gali būti blokuojami. Be to, "6ksbk" įvykio žymės užregistruojamos "SharePoint" bendrosios registravimo sistemos (ULS) žurnaluose.
Priežastis
Siekiant sustiprinti "SharePoint" darbo eigų saugą, "SharePoint" dabar palaiko tik UTF-8 simbolių kodavimą darbo eigos .xoml failams.
Pastaba: "SharePoint" darbo eigos įrankiai, pvz., "SharePoint Designer", "Microsoft" "Visual Studio" ir "Nintex", pagal numatytuosius parametrus sukuria darbo eigos .xoml failus naudodami UTF-8 simbolių kodavimą. Šis saugos patobulinimas neturės įtakos klientams, nebent rankiniu būdu redagavo savo darbo eigos .xoml failus ir konvertavo juos į kitą simbolių kodavimą. Ši problema aprašyta šiame KB straipsnyje apie labai retą galimybę, kurią klientai galėjo pasirinkti tai padaryti.
Sprendimas
Jei rankiniu būdu redagavote darbo eigos .xoml failą ir konvertavote jį į simbolių kodavimą, kuris nėra UTF-8, turėsite iš naujo redaguoti failą, kad konvertuotumėte jį atgal į UTF-8. Įsitikinkite, kad failo XML deklaracija apibrėžia kodavimą kaip UTF-8, įrašykite failą UTF-8 simbolių kodavimo formatu naudodami teksto rengyklę ir iš naujo jį iš naujo įtraukite.
Toliau nurodytą "PowerShell" scenarijų galima naudoti "SharePoint" valdymo aplinkoje norint nuskaityti darbo eigos .xoml failus "SharePoint" svetainių rinkinyje ir nustatyti, ar jie paveikti šio pakeitimo. IsGoodWorkflow išvestis bus True darbo eigos .xoml failams, kurie naudoja UTF-8 simbolių kodavimą ir yra suderinami su šiuo pakeitimu. Darbo eigos .xoml failams, kurie nenaudoja UTF-8 simbolių kodavimo ir kuriuos reikia modifikuoti, IsGoodWorkflow išvestis bus False .
<#
.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
keitimų istoriją.
Šioje lentelėje apibendrinami kai kurie svarbiausi šios temos pakeitimai.
Data |
Aprašas |
---|---|
2022 m. lapkričio 22 d. |
Į skyrių "Priežastis" įtraukta pastaba ir atnaujinta dalis "Sprendimo būdas" naudojant "PowerShell" scenarijų, kad būtų galima nuskaityti darbo eigos .xoml failus. |