Aracılığıyla paylaş


İçerik dağıtımı sorunlarını giderme

Bu makalede, sık karşılaşılan içerik dağıtım sorunlarının nasıl giderilme adımları anlatılmaktadır.

Özgün ürün sürümü: geçerli dal Configuration Manager, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager

Örnek sorun

Bu örnekte, bir paketi bir dağıtım noktasına dağıttığınız ancak paketin DP için Başarısız veya Devam Ediyor durumunda olduğunu varsayalım.

  1. İlk olarak, DP'nin bulunduğu sitedeki (birincil/ikincil) DistMgr.log gözden geçirin.

    1. Günlükte ~İşleme paketi girdilerini arayın ve söz konusu paket kimliği için paket işleme iş parçacığını tanımlayın. Tanımladığınız iş parçacığı kimliği için DistMgr.log filtreleyin. Günlük alıntılarını görmek için Paketi standart DP'ye dağıtma bölümünde 4. adımı gözden geçirin.
    2. Filtrelenmiş günlüğü gözden geçirin ve söz konusu DP için bir DP iş parçacığı oluşturulup oluşturulmadığını denetleyin. Bunu kolaylaştırmak için iş parçacığı kimliğinin DistMgr.log filtreleyin.
    3. Filtrelenen günlüğü gözden geçirin ve PkgXferMgr işinin oluşturulup oluşturulmadığını denetleyin.
  2. DP'nin bulunduğu sitede (birincil/ikincil) PkgXferMgr.log gözden geçirin.

    1. Günlükte Kimlik girdileri olan gönderme isteği bulundu'yu arayın ve etkilenen DP/paket bileşimi için gönderen iş parçacığını tanımlayın. Tanımlanan iş parçacığı kimliği için filtre PkgXferMgr.log . Günlük alıntılarını görmek için Paketi standart DP'ye dağıtma bölümünde 6. adımı gözden geçirin.
    2. İçeriğin DP'ye başarıyla aktarılıp aktarıldığını veya bir hata olup olmadığını görmek için filtrelenmiş günlüğü gözden geçirin.
  3. Standart DP'ler için, PkgXferMgr içerik dosyasını DP'ye kopyalar, DP WMI Sağlayıcısına WMI yöntemlerini çağırarak dosyayı içerik kitaplığına eklemesini ister. İçeriğin içerik kitaplığına eklendiğinden emin olmak için DP'de SMSDPProv.log gözden geçirin. Günlük alıntılarını görmek için Paketi standart DP'ye dağıtma bölümünde 7. adımı gözden geçirin.

    PkgXferMgr, çekme DP'leri için çekme DP'sini içerik indirme işlemini başlatması için bildirir. Akışı anlamak için DP çekmek için paket dağıtma bölümünde 8-16 arası adımları gözden geçirin ve içeriğin başarıyla indirilmesini sağlamak için PullDP.log ve DataTransferService.log gözden geçirin.

  4. Standart DP'ler için PkgXferMgr, DistMgr'ye bir durum iletisi gönderir. Durum iletisinin başarıyla işlenip işlenmediğini doğrulamak için DistMgr.log gözden geçirin. Günlük alıntılarını görmek için Paketi standart DP'ye dağıtma bölümünde 8. adımı gözden geçirin.

    Çekme DP'leri için çekme DP'si başarılı olduğunu belirten bir durum iletisi gönderir. Akışı anlamak için DP çekmek için paket dağıtma bölümünde 16-22 arası adımları gözden geçirin ve durum iletisinin başarıyla işlendiğinden emin olmak için ilgili günlükleri gözden geçirin.

  5. Birden çok site söz konusuysa, veritabanı çoğaltmasının çalıştığından ve ilgili siteler arasındaki veritabanı bağlantılarının etkin olduğundan emin olun.

Yaygın DistMgr sorunları

  • DistMgr.log , söz konusu paket kimliği için aşağıdaki girdiyi gösterir:

    SMS_DISTRIBUTION_MANAGER 2732 (0xaac) ~The contents for the package \<PackageID> hasn't arrived from site CS1 yet, will retry later.
    

    Bu durum genellikle içerik bir siteden diğerine aktarılırken geçici olarak gerçekleşir. Site iletişimleriyle ilgili bir sorun olmadığından emin olmak için Sender/Despooler günlüklerini gözden geçirin. Siteden siteye iletişim (Scheduler -Sender ->>Despooler) sırasında hatalar görürseniz, DistMgr.log'da yukarıdaki iletiyi gidermeden önce bu hataları çözmeye odaklanın. Günlük akışını anlamak için Bkz . Bir paketi siteler arasında DP'ye dağıtma .

    Hata yoksa, üst siteyi paketi etkilenen siteye yeniden göndermeye zorlamak gerekebilir. Daha fazla bilgi için bkz. Paketin sıkıştırılmış kopyasını siteye yeniden gönderme .

  • DistMgr.log , diğer paketleri işlemekle meşgul olduğunu ve paket işleme için kullanılabilir tüm iş parçacıklarını kullandığını gösterebilir.

    SMS_DISTRIBUTION_MANAGER 4824 (0x12d8) ~Currently using 3 out of 3 allowed package processing threads.
    

    Bunu görürseniz, takılıp takılmadıklarını görmek için DistMgr.log'daki geçerli paket işleme iş parçacıklarını gözden geçirin. Şu anda İşlem Kuyruğunda kaç paket olduğunu görmek için aşağıdaki kayıt defteri anahtarı altında Paket İşleme Kuyruğu ve İşlenen Paketler kayıt defteri değerlerini de gözden geçirebilirsiniz:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Components\SMS_DISTRIBUTION_MANAGER

    İşlenen Paketler değerleri değişmezse ve uzun bir süre boyunca takılı kalırsa, DistMgr kilitlenmiş/takılmış olabilir. Böyle bir durumda, gözden geçirmek üzere SMSExec.exe işlem dökümünü yakalayın.

    Kuyrukta çok sayıda paket varsa ancak kuyruk taşınıyorsa, iş parçacığı yapılandırmasını gözden geçirmek ve değiştirmek gerekebilir.

  • DistMgr.log gelen PKN dosyalarını işlemez ve sonuç olarak paketler işlenmiyor. Bu, DistMgr gelen kutusundaki PKN dosyalarının bir kapsamına neden olur.

    PKN dosyaları ana DistMgr iş parçacığı tarafından işlenir, bu nedenle bu durumlarda, günlük girdisini SMS_DISTRIBUTION_MANAGER başlatılan SMS_EXECUTIVE arayarak ana DistMgr iş parçacığı kimliğini tanımlamak ve ardından tanımlanan iş parçacığı kimliği için DistMgr.log filtrelemek yararlı olur.

    Çoğu durumda, ana DistMgr iş parçacığı uzak dp'ye WMI çağrısı yaparken ancak DP'deki WMI yanıt vermediğinde ve DistMgr'nin süresiz olarak beklemesine neden olduğunda bu sorun oluşur. Ana DistMgr iş parçacığının DistMgr.log filtrelenmesi, iletişim kurmaya çalıştığı DP hakkında ipuçları sağlayabilir. Tanımlandıktan sonra DP'nin yanıtlayıp vermediğini ve WMI'nın DP'de işlevsel olup olmadığını denetleyin. Gerekirse, bunun yardımcı olup olmadığını görmek için DP'yi yeniden başlatın.

    Filtrelenmiş DistMgr.log herhangi bir ipucu sağlamıyorsa, gözden geçirme için sorun durumundayken SMSExec.exe işlem dökümünü yakalayın.

Yaygın PkgXferMgr sorunları

  • PkgXferMgr.log , DP'de içerik kitaplığına dosya eklerken bir hata gösterir:

    SMS_PACKAGE_TRANSFER_MANAGER 5744 (0x1670) ~Sending completed  
    [D:\SCCMContentLib\FileLib\B53B\B53B6F96ECC3FB2AF59D02C84A2D31434904BACF2F9C90D80107B6602860BCFD]  
    SMS_PACKAGE_TRANSFER_MANAGER 5744 (0x1670) ~ExecStaticMethod failed (80041001)  
    SMS_DistributionPoint, AddFile  
    SMS_PACKAGE_TRANSFER_MANAGER 5744 (0x1670) CSendFileAction::AddFile failed; 0x80041001  
    SMS_PACKAGE_TRANSFER_MANAGER 5744 (0x1670) ~Deleting remote file  
    \\DPNAME.CONTOSO.COM\SMS_DP$\Content_b034813c-bc60-4a16-b471-7a0dc3d9662b.1-B53B6F96ECC3FB2AF59D02C84A2D31434904BACF2F9C90D80107B6602860BCFD  
    SMS_PACKAGE_TRANSFER_MANAGER 5744 (0x1670) ~ Sending failed. Failure count = 1, Restart time = 12/4/2014 6:14:27 AM Eastern Standard Time
    

    PkgXferMgr içerik dosyasını DP'ye kopyaladıktan sonra, uzak DP'ye dosyayı içerik kitaplığına eklemesini bildirmek için WMI yöntemlerini yürütür. Uzak DP dosyayı içerik kitaplığına ekleyemezse, PkgXferMgr.log genel bir WMI hatası (0x80041001 = WBEM_E_FAILED) görürsünüz.

    Bu durumda, DP'nin dosyayı içerik kitaplığına ekleyemediği nedeni belirlemek için DP'de SMSDPProv.log gözden geçirmek gerekir. SMSDPProv.log'da Dosya/Yol bulunamadı hataları görürseniz, hatanın nedenini belirlemek için bir İşlem İzleyicisi izlemesi yakalamanız gerekir.

  • PkgXferMgr.log DP'ye yalnızca bir bağlantıya izin verildiğini gösterir:

    SMS_PACKAGE_TRANSFER_MANAGER 21216 (0x52e0) ~Address to DPNAME.CONTOSO.COM is currently under bandwidth control, therefore only one connection is allowed, returning send request to the pool.
    

    veya

    SMS_PACKAGE_TRANSFER_MANAGER 21216 (0x52e0) ~Address to DPNAME.CONTOSO.COM is currently in pulse mode, therefore only one connection is allowed.
    

    PkgXferMgr.log DP'ye 'yalnızca bir bağlantıya izin veriliyor' ifadesini gösteriyorsa, dp bant genişliği azaltma için yapılandırılmış demektir. Bu durumda, PkgXferMgr DP için yalnızca bir iş parçacığı kullanabilir ve sonuç olarak DP'ye aynı anda yalnızca bir paket gönderebilir. Daha fazla bilgi için bkz . Bant genişliği denetimi ve iş parçacıkları .

  • PkgXferMgr.log adresin kapalı olduğunu gösterir:

    SMS_PACKAGE_TRANSFER_MANAGER 7156 (0x1BF4) Address is closed for priority 2 jobs, stop sending[E:\SCCMContentLib\FileLib\2F08\2F0819F959E788CF843F42E9CA7B44E258B8B4BA37BB63902DB39ACF747BE7DA]  
    SMS_PACKAGE_TRANSFER_MANAGER 7156 (0x1BF4) Deleting remote file \\DPNAME.CONTOSO.COM\SMS_DP$\<PackageID>.6-2F0819F959E788CF843F42E9CA7B44E258B8B4BA37BB63902DB39ACF747BE7DA  
    SMS_PACKAGE_TRANSFER_MANAGER 7156 (0x1BF4) CSendFileAction::SendFiles failed; 0x80004005  
    SMS_PACKAGE_TRANSFER_MANAGER 7156 (0x1BF4) Sending failed. Failure count = 1, Restart time = 3/15/2016 8:30:08 AM Mountain Daylight Time
    

    Bunu günlükte görüyorsanız, dp bant genişliği denetimi altındadır ve içerik aktarımı devam ederken DP adresinin kapatıldığı anlamına gelir. Yukarıdaki örnekte DP zamanlaması yalnızca 08:00 ile 10:00 arasında yüksek önceliğe izin ver için yapılandırılmıştır. Sonuç olarak, PkgXferMgr saat 08:00'de içerik göndermeyi durdurdu ve paketi/DP'yi başarısız durumda işaretledi.

  • PkgXferMgr.log aynı iş için aynı anda başlayan birden çok iş parçacığı gösterir:

    SMS_PACKAGE_TRANSFER_MANAGER 8360 (0x20a8) Sending thread starting for Job: 12771, package: <PackageID>, Version: 8, Priority: 2, server: DPNAME.CONTOSO.COM, DPPriority: 200  
    SMS_PACKAGE_TRANSFER_MANAGER 10752 (0x2a00) Sending thread starting for Job: 12771, package: <PackageID>, Version: 8, Priority: 2, server: DPNAME.CONTOSO.COM, DPPriority: 200  
    SMS_PACKAGE_TRANSFER_MANAGER 12208 (0x2fb0) Sending thread starting for Job: 12771, package: <PackageID>, Version: 8, Priority: 2, server: DPNAME.CONTOSO.COM, DPPriority: 200  
    SMS_PACKAGE_TRANSFER_MANAGER 4244 (0x1094) Sending thread starting for Job: 12771, package: <PackageID>, Version: 8, Priority: 2, server: DPNAME.CONTOSO.COM, DPPriority: 200  
    SMS_PACKAGE_TRANSFER_MANAGER 8348 (0x209c) Sending thread starting for Job: 12771, package: <PackageID>, Version: 8, Priority: 2, server: DPNAME.CONTOSO.COM, DPPriority: 200
    

    Genellikle, PkgXferMgr bir iş için bir iş parçacığı kullanır, ancak aynı iş için birden çok iş parçacığı kullanıyorsa, 0x80070020 (ERROR_SHARING_VIOLATION) hatası nedeniyle içerik aktarımı başarısız olabilir. Site sunucusu ve site veritabanı sunucuları farklı saat dilimlerindeyse bu durum oluşur. Buradaki çözüm, site sunucusunun ve site veritabanı sunucularının aynı saat dilimine sahip olduğundan emin olmaktır.

Sık karşılaşılan çekme DP'leri sorunları

  • PkgXferMgr.log Çekme DP'sinin kapasitede olduğunu ve çekme DP'sine başka iş gönderilmediğini gösterir:

    SMS_PACKAGE_TRANSFER_MANAGER 4712 (0x1268) PullDP ["Display=\\P01PDP1.CONTOSO.COM\"]MSWNET:["SMS_SITE=P01"]\\P01PDP1.CONTOSO.COM\ has reached maximum capacity 50  
    SMS_PACKAGE_TRANSFER_MANAGER 4712 (0x1268) ~ PullDP has no capacity. Restart time = 1/10/2019 1:16:33 PM Eastern Standard Time
    

    PkgXferMgr, çekme DP'sinde şu anda tamamlanmamış durumda olan iş sayısını denetlemek için aşağıdaki sorguyu çalıştırır. Sorgu 50'den fazla iş döndürürse çekme DP'sine başka iş göndermez.

    SELECT COUNT(*) FROM DistributionJobs job
    JOIN DistributionPoints dp ON dp.DPID=job.DPID AND dp.NALPath='["Display=\\P01PDP1.CONTOSO.COM\"]MSWNET:["SMS_SITE=P01"]\\P01PDP1.CONTOSO.COM\'
    WHERE job.State in (2, 3, 4) AND (job.Action<>5) AND (ISNULL(job.SendAction, '') <> '')
    

    Çekme DP bir Başarı durumu iletisi gönderdiğinde veya durum yoklaması durduğunda (yapılandırılan değerlere göre) bu işler tablodan kaldırılırDistributionJobs. Çekme DP'sinde işleri görmek için SMS_PullDPNotification wbemtest veya WMI Gezgini'ni kullanarak sınıfın örnek sayısını gözden geçirebilirsiniz. Başarısız durumdaki paketleri belirlemek ve hataları araştırmak için PullDP.log ve DataTransferService.log gözden geçirmek için çekme DP'sindeki WMI sınıfı örneklerini ROOT\SCCMDP:SMS_PullDPState de gözden geçirebilirsiniz.

  • SignatureDownload çekme DP'sinde iş HTTP 404 hatasıyla başarısız oluyor.

    ContentID içerik kimliğine sahip C010000D.28 paketi için SignatureDownload DTS işi {JOBID} oluşturuldu. JobState = NotStarted
    C010000D.28, {JOBID} içerik işi için alınan DTS hata iletisi 0x80070002: BITS hatası: 'HTTP durumu 404: İstenen URL sunucuda yok.

    İmza dosyaları bir site sunucusunda birlikte bulunan bir Kaynak DP'de bulunmadığından bu bilinen bir sorundur. Bu sorun yalnızca dağıtım eylemi yeniden dağıtılmadığında oluşur.

    Bu sorunu çözmek için aşağıdaki yöntemlerden birini kullanın:

    • Paketi yeniden dağıtın (paketi yeniden dağıtmak için tam içerik indirildiğinden imzaların indirilmesi gerekmez).
    • Çekme DP'sini, site sunucusunda birlikte bulunmayan bir kaynak DP kullanacak şekilde yapılandırın.
  • DataTransferService.log , kaynak DP'den içerik indirmeye çalışırken 0x800706D9 gösterir:

    DataTransferService 4864 (0x1300) CDTSJob::HandleErrors: DTS Job '{5285F8B3-C426-4882-85F2-AD5331DD4179}' BITS Job '{D53BA625-24AA-41FA-A357-6EB1B7D7E701}' under user 'S-1-5-18' OldErrorCount 29 NewErrorCount 30 ErrorCode
    

    0x800706D9, uç nokta eşleyicisinden başka uç nokta olmadığı anlamına gelir. Bu sorun, güvenlik duvarının neden olduğu RPC bağlantı noktası ayırma hatalarından kaynaklanabilir. Windows Güvenlik Duvarı hizmeti devre dışı bırakıldığında da oluşabilir.

    Site sunucusu ile etkilenen sunucu arasında güvenlik duvarı olup olmadığını denetleyin ve RPC bağlantı noktalarının açık olup olmadığını öğrenin. Gözden geçirme için hatayı yeniden oluştururken bir Ağ İzlemesi (çekme DP'sinden ve kaynak DP sunucusundan) da yakalayabilirsiniz.

  • Çekme DP'sinde çok sayıda iş olduğunu ancak işlerin işlenmediğini gösterir.

    Bazı durumlarda (normalde tüm içerik çekme DP'sine gönderildiğinde yeni bir çekme DP'sinin yüklenmesinden sonra), çekme DP'sindeki çok fazla iş hatası işlerin işlenmesinin durdurulmasına neden olabilir. Bu sorunların çoğu ürünün son sürümlerinde (Configuration Manager sürüm 1810) düzeltilse de bazı çevresel faktörler ÇEKME'nin işleri işlememesine neden olabilir. Bu durumda büyük olasılıkla WMI sınıfında binlerce DTS işi ROOT\ccm\DataTransferService:CCM_DTS_JobEx ve Başarısız durumda yaklaşık 50 (veya daha fazla) BITS işi görürsünüz. Bu senaryoda, çekme DP'sindeki tüm işe özgü öğeleri WMI'den kaldırmak ve içeriği denetimli bir şekilde çekme DP'sine yeniden dağıtmak ve hataları araştırmak yararlı olabilir.

    Çekme DP'sinde WMI'den işe özgü tüm öğeleri kaldırmak için aşağıdaki PowerShell betiğini kullanabilirsiniz (yardım için betik açıklamalarını gözden geçirin):

    Reset-PullDPState.ps1

    <#
    
    .SYNOPSIS  
    Resets the state of the Pull DP and deletes data from various WMI classes related to Pull DP. You need to run this script as Administrator.
    
    .DESCRIPTION
    This script deletes the data from following WMI classes:
    - CCM_DTS_JobEx
    - CCM_DTS_JobItemEx
    - SMS_PullDPState
    - SMS_PullDPContentState
    - SMS_PullDPNotification (optional)
    
    The script also checks and reports the count of BITS Jobs.
    
    .PARAMETER ComputerName
    (Optional) Name of the Pull DP. You can leave this blank for local machine.
    
    .PARAMETER DeletePullDPNotifications
    (Optional) Use this switch if you want to delete the job notifications from SMS_PullDPNotification class.
    
    .PARAMETER KeepBITSJobs
    (Optional) Use this switch if you don't want the script to delete ALL BITS Jobs. If this switch is not used, ALL BITS jobs are deleted (even the ones that are not created by ConfigMgr)
    
    .PARAMETER NotifyPullDP
    (Optional) Use this switch if you want the script to execute NotifyPullDP method against SMS_DistributionPoint class. This is only useful when there aren't a lot of notifications in WMI and -DeletePullDPNotifications switch was not used.
    
    .PARAMETER WhatIf
    (Optional) Use this switch to see how many instances will be deleted.
    
    .EXAMPLE
    Reset-PullDPState -WhatIf
    This command checks how many Pull PD jobs will get deleted when running the script
    
    .EXAMPLE
    Reset-PullDPState
    This command resets the Pull DP related WMI classes except the Pull DP job Notification XML's
    
    .EXAMPLE
    Reset-PullDPState -DeletePullDPNotifications
    This command resets the Pull DP related WMI classes along with the Pull DP job Notification XML's. If you do this, you would need to distribute/redistribute these packages to the Pull DP again.
    
    .NOTES
    07/28/2016 - Version 1.0 - Initial Version of the script
    01/09/2019 - Version 2.0 - Added batch size for instance removal to prevent WMI Quota issues. Also added removal of BITS jobs (can be disabled by using -KeepBITSJobs switch) and restart of CcmExec service.
    
    #>
    
    [CmdletBinding()]
    Param(
      [Parameter(Mandatory=$false)]
       [string]$ComputerName = $env:COMPUTERNAME,
    
       [Parameter(Mandatory=$false)]
       [switch]$DeletePullDPNotifications,
    
       [Parameter(Mandatory=$false)]
       [switch]$KeepBITSJobs,
    
       [Parameter(Mandatory=$false)]
       [switch]$NotifyPullDP,
    
       [Parameter(Mandatory=$false)]
       [switch]$WhatIf
    )
    
    $LogFile = Join-Path (Split-Path $SCRIPT:MyInvocation.MyCommand.Path -Parent) "Reset-PullDPState.log"
    $ErrorActionPreference = "SilentlyContinue"
    
    Function Write-Log {
        Param(
          [string] $text,
          [switch] $NoWriteHost,
          [switch] $IsErrorMessage,
          [switch] $IsWarning,
          [switch] $WhatIfMode
        )
    
        $timestamp = Get-Date -Format "MM-dd-yyyy HH:mm:ss"
        "$timestamp $text" | Out-File -FilePath $LogFile -Append
    
        if ($WhatIfMode) {
            Write-Host $text -ForegroundColor Yellow
            return
        }
    
        if (-not $NoWriteHost) {
            if ($IsErrorMessage) {
                Write-Host $text -ForegroundColor Red
            }
            elseif ($IsWarning) {
                Write-Host $text -ForegroundColor Yellow
            }
            else {
                Write-Host $text -ForegroundColor Cyan
            }
        }
    }
    
    Function Delete-WmiInstances {
        Param(
            [string] $Namespace,
            [string] $ClassName,
            [string] $Filter = $null,
            [string] $Property1,
            [string] $Property2 = "",
            [string] $Property3 = "",
            [int] $BatchSize = 10000
        )
    
        $success = 0
        $totalfailed = 0
        $counter = 0
        $total = 0
    
        Write-Host ""
        Write-Log "$ClassName - Connecting to WMI Class on $ComputerName"
    
        do {
    
            if ($Filter -eq $null) {
                $Instances = Get-WmiObject -ComputerName $ComputerName -Namespace $Namespace -Class $ClassName -ErrorVariable WmiError -ErrorAction SilentlyContinue | Select -First $BatchSize
            }
            else {
                $Instances = Get-WmiObject -ComputerName $ComputerName -Namespace $Namespace -Class $ClassName -Filter $Filter -ErrorVariable WmiError -ErrorAction SilentlyContinue | Select -First $BatchSize
            }
    
            if ($WmiError.Count -ne 0) {
                Write-Log "    Failed to connect. Error: $($WmiError[0].Exception.Message)" -IsErrorMessage
                $WmiError.Clear()
                return
            }
    
            $currentfailed = 0
            $current = ($Instances | Measure-Object).Count
            if ($current -gt 0) {$script:serviceRestartRequired = $true}
            if ($WhatIf) { break }
    
            if ($current -ne $null -and $current -gt 0) {
                Write-Log "    Found $total total instances (Batch size $BatchSize)"
    
                foreach($instance in $Instances) {
    
                    $instanceText = "$Property1 $($instance.$Property1)"
    
                    if ($Property2 -ne "") {
                        $instanceText += ", $Property2 $($instance.$Property2)"
                    }
    
                    if ($Property3 -ne "") {
                        $instanceText += ", $Property3 $($instance.$Property3)"
                    }
    
                    Write-Log "    Deleting instance for $instanceText" -NoWriteHost
                    $counter += 1
    
                    $percentComplete = "{0:N2}" -f (($counter/$total) * 100)
                    Write-Progress -Activity "Deleting instances from $ClassName" -Status "Deleting instance #$counter/$total - $instanceText" -PercentComplete $percentComplete -CurrentOperation "$($percentComplete)% complete"
    
                    Remove-WmiObject -InputObject $instance -ErrorVariable DeleteError -ErrorAction SilentlyContinue
                    if ($DeleteError.Count -ne 0) {
                        Write-Log "    Failed to delete instance. Error: $($DeleteError[0].Exception.Message)" -NoWriteHost -IsErrorMessage
                        $DeleteError.Clear()
                        $currentfailed += 1
                    }
                    else {
                        $success += 1
                    }
                }
    
                $totalfailed += $currentfailed
    
                if ($currentfailed -eq $current) {
                    # Every instance in current batch failed. Break to avoid infinite while loop
                    break
                }
            }
    
        } while (($Instances | Measure-Object).Count -ne 0)
    
        if ($WhatIf) {
            if ($total -eq $BatchSize) {
                Write-Log "    (What-If Mode) Found more than $BatchSize instances which will be deleted" -WhatIfMode
            }
            else {
                Write-Log "    (What-If Mode) $total instances will be deleted" -WhatIfMode
            }
        }
        else {
            if ($total -gt 0) {
                # $totalfailed is likely not the accurate count here as it could include duplicate failures due to batching
                Write-Log "    Deleted $success instances. Failed to delete $totalfailed instances."
            }
            else {
                Write-Log "    Found 0 instances."
            }
        }
    }
    
    Function Check-BITSJobs {
    
        $DisplayName = "BITS Jobs"
    
        Write-Host ""
        Write-Log "$DisplayName - Gettting jobs on $ComputerName"
        Import-Module BitsTransfer
        $Instances = Get-BitsTransfer -AllUsers -Verbose -ErrorVariable BitsError -ErrorAction SilentlyContinue | Where-Object {$_.DisplayName -eq 'CCMDTS Job'}
    
        if ($BitsError.Count -ne 0) {
            Write-Log "    $DisplayName - Failed to get jobs. Error: $($BitsError[0].Exception.Message)" -IsErrorMessage
            $BitsError.Clear()
        }
        else {
            $total = ($Instances | Measure-Object).Count
            Write-Log "    $DisplayName - Found $total jobs"
    
            if ($KeepBITSJobs) {
                Write-Log "    BITS Jobs will not be removed because KeepBITSJobs is true." -WhatIfMode
            }
            else {
                if ($WhatIf) {
                    Write-Log "    (What-If Mode) ALL BITS jobs will be removed since KeepBITSJobs is NOT specified." -WhatIfMode
                }
                else {
                    if ($total -gt 0) {
                        Write-Log "    Removing ALL jobs since KeepBITSJobs is NOT specified."
                        Remove-BITSJobs
                    }
                    else {
                        Write-Log "    There are no jobs to delete."
                    }
                }
            }
        }
    }
    
    Function Remove-BITSJobs {
    
        try {
            Stop-Service BITS
            Rename-Item "$($env:ALLUSERSPROFILE)\Microsoft\Network\Downloader" -NewName "Downloader.OLD.$([Guid]::NewGuid().Guid.Substring(0,8))"
            Start-Service BITS
            $script:serviceRestartRequired = $true
            Write-Log "    Removed ALL BITS Jobs successfully."
        } catch {
            Write-Log "    Failed to delete the BITS jobs."
            Write-Log "    If necessary, run 'bitsadmin /reset /allusers' command under SYSTEM account (using psexec.exe) to delete the BITS Jobs."
            Write-Log "    Additionally, you can delete these jobs by stopping BITS service, renaming %allusersprofile%\Microsoft\Network\Downloader folder, and starting BITS service."
        }
    }
    
    Function Restart-CcmExec {
    
        $DisplayName = "SMS Agent Host"
    
        Write-Host ""
        Write-Log "$DisplayName - Checking if service restart is required."
        if ($script:serviceRestartRequired) {
    
            if ($WhatIf) {
                Write-Log "    (What-If Mode) Service Restart will be required." -WhatIfMode
                if ($NotifyPullDP) {
                    Write-Log "    (What-If Mode) NotifyPullDP method will be executed." -WhatIfMode
                }
                else {
                    Write-Log "    (What-If Mode) NotifyPullDP method will NOT be executed because -NotifyPullDP switch was NOT used." -WhatIfMode
                }
                return
            }
    
            try {
                Write-Host ""
                Write-Log "### Restarting CCMEXEC service... ###"
                Restart-Service CcmExec
                Write-Log "### Success! ###"
            } catch {
                Write-Log "### ERROR! Restart CcmExec Manually in order to recreate BITS jobs for content transfer! ###"
            }
    
            if (-not $DeletePullDPNotifications -and $NotifyPullDP) {
                # Only do this if notifications were not deleted. If they were deleted, NotifyPullDP will not do anything.
                try {
                    Write-Host ""
                    Write-Log "### Invoking NotifyPullDP WMI method against the SMS_DistributionPoint class in $DPNamespace."
                    Invoke-WmiMethod -Namespace root\SCCMDP -Class SMS_DistributionPoint -Name NotifyPullDP | Out-Null
                    Write-Log "### Success! ###"
                } catch {
                    Write-Log "### ERROR! Failed to invoke NotifyPullDP method! You can use wbemtest or WMI Explorer to invoke the method manually. ###"
                }
            }
            else {
                if (-not $NotifyPullDP) {
                    Write-Log "### Skipped invoking NotifyPullDP WMI method because -NotifyPullDP was NOT specified" -IsWarning
                    Write-Log "### You can use wbemtest or WMI Explorer to invoke the method manually, if necessary. ###"
                }
    
                if ($DeletePullDPNotifications) {
                    Write-Log "### Skipped invoking NotifyPullDP WMI method because -DeletePullDPNotifications was specified" -IsWarning
                    Write-Log "### Executing NotifyPullDP when there are no notifications does not do anything." -IsWarning
                }
    
            }
        }
        else {
            Write-Log "    Service Restart is NOT required. " -WhatIfMode
            if ($NotifyPullDP) {
                Write-Log "    NotifyPullDP method skipped. " -WhatIfMode
            }
        }
    }
    
    Write-Host ""
    Write-Log "### Script Started ###"
    $script:serviceRestartRequired = $false
    
    if ($WhatIf) {
        Write-Host ""
        Write-Log "*** Running in What-If Mode" -WhatIfMode
    }
    
    $DPNamespace = "root\SCCMDP"
    $DTSNamespace = "root\CCM\DataTransferService"
    
    Delete-WmiInstances -Namespace $DTSNamespace -ClassName "CCM_DTS_JobEx" -Filter "NotifyEndpoint like '%PullDP%'" -Property1 "ID"
    Delete-WmiInstances -Namespace $DTSNamespace -ClassName "CCM_DTS_JobItemEx" -Property1 "JobID"
    Delete-WmiInstances -Namespace $DPNamespace -ClassName "SMS_PullDPState" -Property1 "PackageID" -Property2 "PackageVersion" -Property3 "PackageState"
    Delete-WmiInstances -Namespace $DPNamespace -ClassName "SMS_PullDPContentState" -Property1 "PackageKey" -Property2 "ContentId" -Property3 "ContentState"
    
    if ($DeletePullDPNotifications) {
        Delete-WmiInstances -Namespace $DPNamespace -ClassName "SMS_PullDPNotification" -Property1 "PackageID" -Property2 "PackageVersion"
    }
    else {
        Write-Host ""
        Write-Log "SMS_PullDPNotification - Connecting to WMI Class on $ComputerName"
    
        $temp = Get-WmiObject -ComputerName $ComputerName -Namespace $DPNamespace -Class "SMS_PullDPNotification" -ErrorVariable WmiError -ErrorAction SilentlyContinue
    
        if ($WmiError.Count -ne 0) {
            Write-Log "    SMS_PullDPNotification - Failed to connect. Error: $($WmiError[0].Exception.Message)" -IsErrorMessage
            $WmiError.Clear()
        }
        else {
            Write-Log "    Found $(($temp | Measure-Object).Count) instances."
            Write-Log "    Skipped because DeletePullDPNotifications switch was NOT used." -IsWarning
        }
    }
    
    if ($ComputerName -eq $env:COMPUTERNAME) {
        Check-BITSJobs
    }
    else {
        Write-Host ""
        Write-Log "BITS Jobs"
        Write-Log "    Skipped because script is running against a remote computer." -IsWarning
    }
    
    Restart-CcmExec
    
    Write-Host ""
    Write-Log "### Script Ended ###"
    Write-Host "### Check $LogFile for more details. ###" -ForegroundColor Cyan
    #if (-not $WhatIf -and $serviceRestartRequired) {Write-Log "### Please restart the WMI service (which also restarts CcmExec). ###" -IsWarning}
    Write-Host ""
    
  • İçerik, çekme DP'sinde yüklü olarak gösterilir, ancak çekme DP'si için URL ve URLSubPath içinde ContentDPMapdoldurulmaz ve bu da SMB Erişiminin etkinleştirildiği paketlerle ilgili sorunlara neden olur.

    Çekme DP'sinde içerik başarıyla yüklendiğinde, içindeki ContentDPMapdeğerleri güncelleştirmek URL/URLSubPath için gereken verileri içeren bir durum iletisi gönderir. Çekme DP yanıtı işlendiğinde bu durum oluşur. Akışı anlamak için DP'yi çekmek için paket dağıtma bölümünde 16-22 arası adımları gözden geçirin ve durum iletisinin neden işlenmediğini araştırmak için ilgili günlükleri gözden geçirin. Bu sorunun en olası nedeni, yönetim noktasındaki \MP\outboxes\StateMsg.box durum iletilerinin bir kapsamı veya MPFDM'nin izin sorunları nedeniyle site sunucusuna dosya kopyalayamamasıdır.

İçerik kitaplığında eksik içerik dosyaları

bazen içerik kitaplığında içeriğin eksik olduğunu fark edebilirsiniz. Bu durum önceki içerik dağıtım sorunlarından veya birisi/bir şey yanlışlıkla içerik kitaplığından dosya sildikten kaynaklanabilir. İçerik kitaplığında içeriğin eksik olduğunu onaylamak için, etkilenen bir paketi tanımlayın ve paketin içeriğini ile arasında PkgLibFileLibizleyin.

İçerik Kitaplığı'nda bir Paket için gerekli içeriğin eksik olduğunu onayladıktan sonra, içeriğin yeniden doldurulma hakkında bilgi için bkz. Paketin sıkıştırılmış kopyasını siteye yeniden gönderme.

Genel sorunlar

  • DistMgr veya PkgXferMgr günlüğü bir dosya/yol bulunamadı hatası gösteriyor:

    SMS_PACKAGE_TRANSFER_MANAGER 3776 (0xec0) CContentDefinition::TotalFileSizes failed; 0x80070003
    SMS_PACKAGE_TRANSFER_MANAGER 3776 (0xec0) Sending content 000f8a0a-825c-457b-a15b-57ade145a09b for package \<PackageID>
    SMS_PACKAGE_TRANSFER_MANAGER 3776 (0xec0) CSendFileAction::SendFiles failed; 0x80070003
    SMS_PACKAGE_TRANSFER_MANAGER 3776 (0xec0) CSendFileAction::SendContent failed; 0x80070003
    SMS_PACKAGE_TRANSFER_MANAGER 648 (0x288) Sent status to the distribution manager for pkg <PackageID>, version 14, status 4 and distribution point ["Display=\\DPNAME.CONTOSO.COM\"]MSWNET:["SMS_SITE=S01"]\\DPNAME.CONTOSO.COM\~
    

    veya

    SMS_PACKAGE_TRANSFER_MANAGER 11228 (0x2bdc) Sending legacy content P0100053.2 for package <PackageID>  
    SMS_PACKAGE_TRANSFER_MANAGER 11228 (0x2bdc) CContentDefinition::TotalFileSizes failed; 0x80070003  
    SMS_PACKAGE_TRANSFER_MANAGER 11228 (0x2bdc) CSendFileAction::SendFiles failed; 0x80070003
    

    Yaygın hata kodları: 0x80070002, 0x80070003.

    Dosya/yol bulunamadı hatalarında, sorun büyük olasılıkla site sunucusundaki içerik kitaplığında paket için içerik dosyalarının eksik olmasından kaynaklanır. Sonuç olarak, PkgXferMgr dosyaları DP'ye gönderemez.

    Bu gibi durumlarda, günlükteki içerik kimliğini tanımlayabilir ve dosyaların var olduğundan emin olmak için içindeki içeriği PkgLibFileLib izleyebilirsiniz. İçerik Kitaplığı Gezgini'ni, paket içerik dosyalarının içerik kitaplığında kullanılabilir olup olmadığını denetlemek için de kullanabilirsiniz, ancak İçerik Kitaplığı Gezgini'nin yüklenmesi biraz zaman alabilir ve içeriği ile arasında PkgLibFileLibel ile izlemek daha kolay olabilir. Alternatif olarak, site sunucusundaki içerik kitaplığında gerekli dosyaların eksik olup olmadığını doğrulamak için bir İşlem İzleyicisi izlemesi yakalayabilirsiniz.

    İçerik kitaplığında içerik eksik olan site paket kaynak sitesiyse, DistMgr'nin paket kaynak dizininden içeriğin bir anlık görüntüsünü yeniden alması ve eksik içeriği yeniden doldurması için paketi Paket Kaynağı sürümünü artıracak şekilde güncelleştirmek gerekir.

    İçerik kitaplığında içerik eksik olan site paket kaynak sitesinden farklıysa, paket kaynak sitesini paketin sıkıştırılmış kopyasını etkilenen siteye yeniden göndermeye zorlayabilirsiniz. Daha fazla bilgi için bkz. Paketin sıkıştırılmış kopyasını siteye yeniden gönderme .

  • DistMgr/PkgXferMgr günlüğü bir ağ hatası gösteriyor:

    SMS_DISTRIBUTION_MANAGER 5112 (0x13f8) Failed to make a network connection to \\DPNAME.CONTOSO.COM\ADMIN$ (0x35).~  
    SMS_DISTRIBUTION_MANAGER 5112 (0x13f8) ~Cannot establish connection to ["Display=\\DPNAME.CONTOSO.COM\"]MSWNET:["SMS_SITE=PS1"]\\DPNAME.CONTOSO.COM\. Error = 53
    SMS_DISTRIBUTION_MANAGER 5112 (0x13f8) Error occurred. Performing error cleanup prior to returning.
    

    Yaygın hata kodları: 2, 3, 53, 64.

    Ağ ile ilgili hatalar için günlüğü gözden geçirin ve hatayı aldığınızda iletişim kurmaya çalıştığınız sunucuyu belirleyin. Tanımlandıktan sonra aşağıdakileri test edin:

    1. FQDN/NetBIOS/IP adresini kullanarak etkilenen SERVERNAME'e ping yapabilir misiniz?
    2. Site sunucusundan SYSTEM hesabını kullanarak FQDN/NetBIOS/IP adresini kullanarak \\SERVERNAME\admin$ paylaşımına erişebilir misiniz?
    3. Site sunucusundan oturum açmış kullanıcının hesabını kullanarak FQDN/NetBIOS/IP adresini kullanarak \\SERVERNAME\admin$ paylaşımına erişebilir misiniz?
    4. Site sunucusu ile etkilenen sunucu arasında bir güvenlik duvarı var mı? İlgili bağlantı noktaları (RPC/SMB) açık mı?

    Yukarıdaki testler başarılı olursa, gözden geçirme için hatayı yeniden oluştururken bir ağ izlemesi (site sunucusundan ve etkilenen sunucudan) yakalayın.

  • DistMgr/PkgXferMgr günlüğü erişim reddedildi hatası gösteriyor:

    SMS_DISTRIBUTION_MANAGER    7076 (0x1ba4)    Taking package snapshot for package <PackageID> from source \\PS1SITE\PKGSOURCE\DummyPackage
    SMS_DISTRIBUTION_MANAGER    7076 (0x1ba4)    ~The source directory \\PS1SITE\PKGSOURCE\DummyPackage doesn't exist or the SMS service cannot access it, Win32 last error = 5
    SMS_DISTRIBUTION_MANAGER    7076 (0x1ba4)    ~Failed to take snapshot of package <PackageID>
    

    Yaygın hata kodları: 5, 0x80070005.

    İzinlerle ilgili hatalar için günlüğü gözden geçirin ve hatayı aldığınızda erişmeye çalıştığınız yolu belirleyin. Tanımlandıktan sonra aşağıdakileri test edin:

    1. Yol bir UNC yoluysa etkilenen SERVERNAME'e ping yapabilir misiniz?
    2. Site sunucusu bilgisayar hesabının yola erişim izinleri var mı?
    3. Site sunucusundan SYSTEM hesabını kullanırken FQDN/NetBIOS/IP adresini kullanarak etkilenen yola erişebilir misiniz?
    4. Site sunucusundan oturum açmış kullanıcının hesabını kullanırken etkilenen yola FQDN/NetBIOS/IP adresini kullanarak erişebilir misiniz?
    5. Site sunucusu ile etkilenen sunucu arasında bir güvenlik duvarı var mı? İlgili bağlantı noktaları (RPC/SMB) açık mı?

    Yukarıdaki testler başarılı olursa, inceleme için hatayı yeniden oluştururken site sunucusundan bir İşlem İzleyicisi izlemesi yakalayın.

  • DistMgr/PkgXferMgr, gerçek içerik kitaplığı konumu yerine dizinde \bin\x64\FileLib içerik arar.

    Bunun nedeni İçerik Kitaplığı Aktarım aracındaki bilinen bir sorundur.