Problemen met inhoudsdistributie oplossen
In dit artikel wordt beschreven hoe u veelvoorkomende problemen met inhoudsdistributie kunt oplossen.
Oorspronkelijke productversie: Configuration Manager current branch, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
Voorbeeldprobleem
Stel dat u een pakket hebt gedistribueerd naar een distributiepunt, maar dat het pakket de status Mislukt of Wordt uitgevoerd heeft voor de DP.
Controleer eerst DistMgr.log op de site (primair/secundair) waar de DP zich bevindt.
- Zoek naar ~Verwerkingspakketvermeldingen in het logboek en identificeer de thread voor pakketverwerking voor de betreffende pakket-id. Filter DistMgr.log voor de thread-id die u hebt geïdentificeerd. Bekijk stap 4 in Een pakket distribueren naar standaard DP om logboekfragmenten te bekijken.
- Controleer het gefilterde logboek en controleer of er een DP-thread is gemaakt voor de betreffende DP. Filter DistMgr.log voor de thread-id om dit eenvoudiger te maken.
- Controleer het gefilterde logboek en controleer of er een PkgXferMgr-taak is gemaakt.
Controleer PkgXferMgr.log op de site (primair/secundair) waar de DP zich bevindt.
- Zoek naar Gevonden verzendaanvraag met id-vermeldingen in het logboek en identificeer de verzendende thread voor de betreffende DP/pakketcombinatie. Filter PkgXferMgr.log voor de geïdentificeerde thread-id. Bekijk stap 6 in Een pakket distribueren naar standaard DP om logboekfragmenten te bekijken.
- Controleer het gefilterde logboek om te zien of de inhoud is overgebracht naar de DP of als er een fout is opgetreden.
Voor Standaard-DPs kopieert PkgXferMgr het inhoudsbestand(en) naar de DP. Hiermee wordt de DP WMI-provider geïnstrueerd om het bestand toe te voegen aan de inhoudsbibliotheek door WMI-methoden aan te roepen. Controleer SMSDPProv.log op de DP om ervoor te zorgen dat inhoud is toegevoegd aan de inhoudsbibliotheek. Bekijk stap 7 in Een pakket distribueren naar standaard DP om logboekfragmenten te bekijken.
Voor pull-DPs meldt PkgXferMgr pull DP om het downloaden van de inhoud te initiëren. Bekijk stap 8-16 in Een pakket distribueren om DP op te halen om de stroom te begrijpen en PullDP.log en DataTransferService.log te controleren om ervoor te zorgen dat inhoud is gedownload.
Voor standaard-DPs verzendt PkgXferMgr een statusbericht naar DistMgr. Controleer DistMgr.log om te controleren of het statusbericht is verwerkt. Bekijk stap 8 in Een pakket distribueren naar standaard DP om logboekfragmenten te bekijken.
Voor pull-IP's verzendt pull DP een statusbericht om aan te geven dat het is gelukt. Bekijk stap 16-22 in Een pakket distribueren om DP op te halen om de stroom te begrijpen en de relevante logboeken te controleren om ervoor te zorgen dat statusbericht wordt verwerkt.
Als er meerdere sites zijn betrokken, moet u ervoor zorgen dat databasereplicatie werkt en of de databasekoppelingen tussen relevante sites actief zijn.
Veelvoorkomende problemen met DistMgr
DistMgr.log toont de volgende vermelding voor de betreffende pakket-id:
SMS_DISTRIBUTION_MANAGER 2732 (0xaac) ~The contents for the package \<PackageID> hasn't arrived from site CS1 yet, will retry later.
Dit gebeurt meestal tijdelijk terwijl de inhoud van de ene site naar de andere wordt overgedragen. Controleer de logboeken van afzender/despooler om ervoor te zorgen dat er geen problemen zijn met sitecommunicatie. Als er fouten optreden tijdens site-naar-sitecommunicatie (Scheduler ->Sender ->Despooler), kunt u zich richten op het oplossen van deze fouten voordat u het bovenstaande bericht in DistMgr.log oplost. Bekijk Distribueer een pakket naar DP op alle sites om inzicht te hebben in de logboekstroom.
Als er geen fouten zijn, kan het nodig zijn om de bovenliggende site te dwingen het pakket opnieuw te verzenden naar de betreffende site. Zie Gecomprimeerde kopie van een pakket opnieuw verzenden naar een site voor meer informatie.
DistMgr.log kan aantonen dat het bezig is met het verwerken van andere pakketten en alle beschikbare threads gebruikt voor pakketverwerking.
SMS_DISTRIBUTION_MANAGER 4824 (0x12d8) ~Currently using 3 out of 3 allowed package processing threads.
Als u dit ziet, controleert u de huidige pakketverwerkingsthreads in DistMgr.log om te zien of ze vastlopen. U kunt ook de registerwaarden voor pakketverwerking en pakketten die worden verwerkt , bekijken onder de volgende registersleutel om te zien hoeveel pakketten zich momenteel in de verwerkingswachtrij bevinden:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Components\SMS_DISTRIBUTION_MANAGER
Als de waarden voor het verwerken van pakketten niet veranderen en gedurende een lange periode vastzitten, is het mogelijk dat DistMgr vastloopt/vastloopt. Als dit gebeurt, legt u een procesdump van SMSExec.exe vast voor beoordeling.
Als er veel pakketten in de wachtrij staan, maar de wachtrij wordt verplaatst, kan het nodig zijn om de threadconfiguratie te controleren en te wijzigen.
DistMgr.log verwerkt de binnenkomende PKN-bestanden niet en als gevolg hiervan worden pakketten niet verwerkt. Dit resulteert in een achterstand van PKN-bestanden in het Postvak IN van DistMgr.
PKN-bestanden worden verwerkt door de hoofdthread DistMgr, dus in deze gevallen is het handig om de belangrijkste thread-id van DistMgr te identificeren door te zoeken naar de SMS_EXECUTIVE gestart SMS_DISTRIBUTION_MANAGER logboekvermelding en vervolgens de DistMgr.log te filteren op de geïdentificeerde thread-id.
In de meeste gevallen treedt dit probleem op wanneer de belangrijkste DistMgr-thread een WMI-aanroep naar een externe DP maakt, maar WMI op de DP niet reageert, waardoor DistMgr voor onbepaalde tijd wacht. Het filteren van de DistMgr.log voor de belangrijkste DistMgr-thread kan aanwijzingen geven over de DP waarmee deze probeert te communiceren. Zodra de DP is geïdentificeerd, controleert u of de DP reageert en WMI werkt op de DP. Start indien nodig de DP opnieuw op om te zien of dat helpt.
Als de gefilterde DistMgr.log geen aanwijzingen biedt, legt u een procesdump van SMSExec.exe vast terwijl deze de probleemstatus heeft.
Veelvoorkomende problemen met PkgXferMgr
PkgXferMgr.log wordt een fout weergegeven bij het toevoegen van bestanden aan de inhoudsbibliotheek op de DP:
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
Nadat PkgXferMgr het inhoudsbestand naar de DP heeft gekopieerd, worden WMI-methoden uitgevoerd om de externe DP te instrueren het bestand toe te voegen aan de inhoudsbibliotheek. Als de externe DP het bestand niet kan toevoegen aan de inhoudsbibliotheek, ziet u een algemene WMI-fout (0x80041001 = WBEM_E_FAILED) in PkgXferMgr.log.
Als dit gebeurt, moet u SMSDPProv.log op de DP controleren om de reden te identificeren dat het bestand niet is toegevoegd aan de inhoudsbibliotheek. Als er geen fouten zijn gevonden in bestand/pad in SMSDPProv.log, moet u een tracering voor procesmonitor vastleggen om de reden voor een fout vast te stellen.
PkgXferMgr.log laat zien dat slechts één verbinding is toegestaan voor de DP:
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.
or
SMS_PACKAGE_TRANSFER_MANAGER 21216 (0x52e0) ~Address to DPNAME.CONTOSO.COM is currently in pulse mode, therefore only one connection is allowed.
Als PkgXferMgr.log laat zien dat er slechts één verbinding met de DP is toegestaan, betekent dit dat de DP is geconfigureerd voor bandbreedtebeperking. Als dit het geval is, kan PkgXferMgr slechts één thread voor de DP gebruiken en als gevolg hiervan slechts één pakket tegelijk naar de DP verzenden. Zie Bandbreedtebeheer en threads voor meer informatie.
PkgXferMgr.log geeft aan dat het adres is gesloten:
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
Als u dit in het logboek ziet, betekent dit dat de DP onder bandbreedtebeheer valt en het adres naar de DP is gesloten terwijl de inhoudsoverdracht werd uitgevoerd. In het bovenstaande voorbeeld is de DP-planning alleen geconfigureerd voor Hoge prioriteit toestaan tijdens 8:00 tot 10:00 uur. Als gevolg hiervan heeft PkgXferMgr het verzenden van inhoud om 8:00 uur gestopt en het pakket/DP gemarkeerd met de status Mislukt.
PkgXferMgr.log geeft meerdere threads weer die op hetzelfde moment voor dezelfde taak beginnen:
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
Meestal gebruikt PkgXferMgr één thread voor een taak, maar als er meerdere threads voor dezelfde taak worden gebruikt, kan de inhoudsoverdracht mislukken vanwege een fout 0x80070020 (ERROR_SHARING_VIOLATION). Dit gebeurt als de siteserver en de sitedatabaseservers zich in verschillende tijdzones bevinden. De oplossing hier is om ervoor te zorgen dat de siteserver en sitedatabaseservers dezelfde tijdzone hebben ingesteld.
Veelvoorkomende problemen met pull DP
PkgXferMgr.log laat zien dat de pull-DP capaciteit heeft en dat er geen taken meer naar de pull-DP worden verzonden:
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 voert de volgende query uit om te controleren hoeveel taken zich momenteel in een onvoltooide status op de pull-DP bevinden. Als de query meer dan 50 taken retourneert, worden er geen taken meer naar de pull-DP verzonden.
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, '') <> '')
Deze taken worden uit de
DistributionJobs
tabel verwijderd wanneer pull DP een bericht over de status Geslaagd verzendt of wanneer de statuspeiling stopt (op basis van geconfigureerde waarden). Als u de taken in de pull-DP wilt zien, kunt u wbemtest of WMI Explorer gebruiken om het aantal exemplaren voorSMS_PullDPNotification
klasse te controleren. U kunt ook de exemplaren vanROOT\SCCMDP:SMS_PullDPState
de WMI-klasse op de pull-DP controleren om pakketten te identificeren die de status Mislukt hebben en PullDP.log te controleren, evenals DataTransferService.log om de fouten te onderzoeken.SignatureDownload
taak bij pull DP mislukt met HTTP 404-fout.SignatureDownload DTS-taak {JOBID} gemaakt voor pakket C010000D.28, inhouds-id ContentID. JobState = NotStarted
DTS-foutbericht ontvangen voor C010000D.28, inhoudstaak {JOBID}, 0x80070002: BITS-fout: HTTP-status 404: De aangevraagde URL bestaat niet op de server.Dit is een bekend probleem omdat de handtekeningbestanden niet aanwezig zijn op een bron-DP die zich op een siteserver bevindt. Dit probleem treedt alleen op wanneer de distributieactie niet opnieuw wordt uitgevoerd.
Om dit probleem te omzeilen, kunt u een van de volgende methoden gebruiken:
- Herdistributie van het pakket (herdistributie van het pakket vereist geen handtekeningen omdat volledige inhoud wordt gedownload).
- Configureer de pull-DP voor het gebruik van een bron-DP die zich niet op de siteserver bevindt.
DataTransferService.log wordt 0x800706D9 weergegeven bij het downloaden van inhoud uit de bron-DP:
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 betekent dat er geen eindpunten meer beschikbaar zijn via de eindpunttoewijzingper. Dit probleem kan optreden vanwege RPC-poorttoewijzingsfouten die worden veroorzaakt door de firewall. Dit kan ook gebeuren wanneer de Windows Firewall-service is uitgeschakeld.
Controleer of er een firewall is tussen de siteserver en de betreffende server en controleer of RPC-poorten zijn geopend. U kunt ook een netwerktracering vastleggen (van de pull-DP en de bron-DP-server) tijdens het reproduceren van de fout die moet worden gecontroleerd.
Pull DP laat zien dat het een groot aantal taken heeft, maar dat de taken niet worden verwerkt.
In sommige gevallen (normaal gesproken na de installatie van een nieuwe pull-DP wanneer alle inhoud naar de pull-DP wordt verzonden), kunnen te veel taakfouten in de pull-DP uiteindelijk vastlopen bij de verwerking van de taken. Hoewel de meeste van deze problemen zijn opgelost in de recente releases van het product (Configuration Manager versie 1810), kunnen sommige omgevingsfactoren leiden tot pull DP niet-verwerkingstaken. Als dit gebeurt, ziet u waarschijnlijk duizenden DTS-taken in
ROOT\ccm\DataTransferService:CCM_DTS_JobEx
WMI-klasse en ~50 (of meer) BITS-taken met de status Mislukt . In dit scenario kan het nuttig zijn om alle taakspecifieke items uit WMI op de pull-DP te verwijderen en de inhoud opnieuw te distribueren naar de pull-DP op een gecontroleerde manier en fouten te onderzoeken.Als u alle taakspecifieke items uit WMI op de pull-DP wilt verwijderen, kunt u het onderstaande PowerShell-script gebruiken (bekijk de opmerkingen bij het script voor hulp):
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 ""
Inhoud toont Geïnstalleerd op de pull-DP, maar URL en URLSubPath voor de pull-DP worden niet ingevuld
ContentDPMap
, wat problemen veroorzaakt met pakketten waarvoor SMB-toegang is ingeschakeld.Wanneer de pull-DP de inhoud heeft geïnstalleerd, wordt er een statusbericht verzonden met de gegevens die nodig zijn om de
URL/URLSubPath
waarden bij te werken.ContentDPMap
Dit gebeurt wanneer het pull DP-antwoord wordt verwerkt. Bekijk stap 16-22 in Een pakket distribueren om DP op te halen om de stroom te begrijpen en bekijk de relevante logboeken om te onderzoeken waarom het statusbericht niet wordt verwerkt. De meest waarschijnlijke oorzaak van dit probleem is een achterstand van statusberichten in het\MP\outboxes\StateMsg.box
beheerpunt of MPFDM kan geen bestanden naar de siteserver kopiëren vanwege machtigingsproblemen.
Ontbrekende inhoudsbestanden in inhoudsbibliotheek
Er zijn momenten waarop u ziet dat inhoud ontbreekt in de inhoudsbibliotheek. Dit kan gebeuren vanwege eerdere problemen met inhoudsdistributie of iemand/iets dat per ongeluk bestanden uit de inhoudsbibliotheek verwijdert. Als u wilt controleren of de inhoud ontbreekt in de inhoudsbibliotheek, identificeert u een betrokken pakket en houdt u de pakketinhoud bij van PkgLib
naar FileLib
.
Zodra u hebt bevestigd dat de vereiste inhoud voor een pakket ontbreekt in de inhoudsbibliotheek, raadpleegt u Gecomprimeerde kopie van een pakket opnieuw verzenden naar een site voor informatie over het opnieuw vullen van de inhoud.
Algemene problemen
In het logboek DistMgr of PkgXferMgr wordt een fout weergegeven waarin het bestand/pad niet is gevonden:
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\~
or
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
Veelvoorkomende foutcodes: 0x80070002, 0x80070003.
Voor fouten met bestand/pad is het probleem waarschijnlijk het gevolg van het feit dat de inhoudsbibliotheek op de siteserver inhoudsbestanden voor het pakket mist. Als gevolg hiervan kan PkgXferMgr de bestanden niet verzenden naar de DP.
In deze gevallen kunt u de inhouds-id in het logboek identificeren en de inhoud bijhouden
PkgLib
om ervoor teFileLib
zorgen dat de bestanden bestaan. U kunt inhoudsbibliotheekverkenner ook gebruiken om te controleren of de inhoudsbestanden van het pakket beschikbaar zijn in de inhoudsbibliotheek, maar het kan enige tijd duren voordat Inhoudsbibliotheekverkenner is geladen en het kan eenvoudiger zijn om de inhoud handmatig bij te houden vanPkgLib
inFileLib
. U kunt ook een procesmonitortracering vastleggen om te controleren of de benodigde bestanden ontbreken in de inhoudsbibliotheek op de siteserver.Als de site die inhoud ontbreekt in de inhoudsbibliotheek de pakketbronsite is, moet u het pakket bijwerken om de versie van de pakketbron te verhogen, zodat DistMgr opnieuw een momentopname maakt van de inhoud uit de pakketbronmap en de ontbrekende inhoud opnieuw vult.
Als de site die de inhoud in de inhoudsbibliotheek mist, verschilt van de bronsite van het pakket, kunt u afdwingen dat de pakketbronsite de gecomprimeerde kopie van het pakket opnieuw verzendt naar de betreffende site. Zie Gecomprimeerde kopie van een pakket opnieuw verzenden naar een site voor meer informatie.
DistMgr/PkgXferMgr-logboek toont een netwerkfout:
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.
Veelvoorkomende foutcodes: 2, 3, 53, 64.
Raadpleeg het logboek voor netwerkgerelateerde fouten en identificeer de server waarmee u wilt communiceren wanneer u de fout krijgt. Zodra dit is geïdentificeerd, test u het volgende:
- Kunt u de betreffende SERVERNAAM pingen met behulp van het FQDN-/NetBIOS-/IP-adres?
- Hebt u toegang tot de share \\SERVERNAME\admin$ via de FQDN/NetBIOS/IP-adres met behulp van het SYSTEEMaccount van de siteserver?
- Hebt u toegang tot de share \\SERVERNAME\admin$ met behulp van de FQDN/NetBIOS/IP-adres met behulp van het aangemelde gebruikersaccount van de siteserver?
- Is er een firewall tussen de siteserver en de betreffende server? Zijn relevante poorten (RPC/SMB) geopend?
Als de bovenstaande tests zijn geslaagd, legt u een netwerktracering vast (van de siteserver en van de betreffende server) tijdens het reproduceren van de fout die moet worden gecontroleerd.
DistMgr/PkgXferMgr-logboek toont een fout met geweigerde toegang:
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>
Veelvoorkomende foutcodes: 5, 0x80070005.
Voor fouten met betrekking tot machtigingen controleert u het logboek en identificeert u het pad dat u probeert te openen wanneer u de fout krijgt. Zodra dit is geïdentificeerd, test u het volgende:
- Kunt u de betreffende SERVERNAAM pingen als het pad een UNC-pad is?
- Heeft het computeraccount van de siteserver machtigingen voor toegang tot het pad?
- Hebt u toegang tot het betreffende pad met behulp van de FQDN/NetBIOS/IP-adres wanneer u het SYSTEEMaccount van de siteserver gebruikt?
- Hebt u toegang tot het betreffende pad met behulp van het FQDN-/NetBIOS-/IP-adres wanneer u het account van de aangemelde gebruiker vanaf de siteserver gebruikt?
- Is er een firewall tussen de siteserver en de betreffende server? Zijn relevante poorten (RPC/SMB) geopend?
Als de bovenstaande tests zijn geslaagd, legt u een procesmonitortracering vast van de siteserver tijdens het reproduceren van de fout die moet worden gecontroleerd.
DistMgr/PkgXferMgr zoekt naar inhoud in de
\bin\x64\FileLib
map in plaats van de werkelijke locatie van de inhoudsbibliotheek.Dit komt door een bekend probleem in het hulpprogramma Inhoudsbibliotheekoverdracht.