Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Semptomlar

Microsoft SharePoint Server için aşağıdaki Ekim güvenlik güncelleştirmelerini yükledikten sonra, sharepoint 2010 iş akışı senaryolarının bazı Microsoft engellenebilir. Buna ek olarak, "6ksbk" olay etiketleri SharePoint Birleşik Günlük Sistemi (ULS) günlüklerine kaydedilir. 

Nedeni

SharePoint iş akışlarının güvenliğini güçlendirmek için SharePoint artık iş akışı .xoml dosyaları için yalnızca UTF-8 karakter kodlamasını destekliyor. 

Not: SharePoint Designer, Microsoft Visual Studio ve Nintex gibi SharePoint iş akışı araçları, varsayılan olarak UTF-8 karakter kodlamasını kullanarak iş akışı .xoml dosyaları oluşturur. Müşteriler iş akışı .xoml dosyalarını el ile düzenlemedikleri ve bunları farklı bir karakter kodlamasına dönüştürmedikleri sürece bu güvenlik geliştirmelerinden etkilenmez. Bu sorun, müşterilerin bunu yapmayı seçmiş olabileceği son derece nadir olasılıklara ilişkin bu KB makalesinde belgelenmiştir.

Geçici Çözüm

Bir iş akışı .xoml dosyasını el ile düzenlediyseniz ve UTF-8 dışında bir karakter kodlamasına dönüştürdüyseniz, dosyayı UTF-8'e geri dönüştürmek için yeniden düzenlemeniz gerekir. Dosyanın XML bildiriminin kodlamayı UTF-8 olarak tanımladığından emin olun, dosyayı metin düzenleyicinizle UTF-8 karakter kodlama biçiminde kaydedin ve yeniden dağıtın.

Aşağıdaki PowerShell betiği, sharepoint site koleksiyonundaki iş akışı .xoml dosyalarını tarayarak bu değişiklikten etkilenip etkilenmediklerini belirlemek için SharePoint Yönetim Kabuğu'nda kullanılabilir. IsGoodWorkflow çıkışı, UTF-8 karakter kodlaması kullanan ve bu değişiklikle uyumlu olan iş akışı .xoml dosyaları için True . IsGoodWorkflow çıkışı, UTF-8 karakter kodlaması kullanmayan ve değiştirilmesi gereken iş akışı .xoml dosyaları için False olacaktır.

<#
.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

Değişiklik geçmişi

Aşağıdaki tabloda, bu konudaki en önemli değişikliklerden bazıları özetlemektedir.

Tarih

Açıklama

22 Kasım 2022, Saat 2022, Kasım 2022, Kasım 2022, Kasım 20

"Neden" bölümüne bir not eklendi ve "Geçici Çözüm" bölümünü bir PowerShell betiğiyle güncelleştirerek iş akışı .xoml dosyalarını tarayın.

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.

Topluluklar, soru sormanıza ve soruları yanıtlamanıza, geri bildirimde bulunmanıza ve zengin bilgiye sahip uzmanlardan bilgi almanıza yardımcı olur.

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?
Gönder’e bastığınızda, geri bildiriminiz Microsoft ürün ve hizmetlerini geliştirmek için kullanılır. BT yöneticiniz bu verileri toplayabilecek. Gizlilik Bildirimi.

Geri bildiriminiz için teşekkürler!

×