Solución de problemas de distribución de contenido
En este artículo se describe cómo solucionar problemas comunes de distribución de contenido.
Versión original del producto: rama actual de Configuration Manager, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
Problema de ejemplo
En este ejemplo, supongamos que ha distribuido un paquete a un punto de distribución, pero el paquete está en un estado Con errores o En curso para el DP.
En primer lugar, revise DistMgr.log en el sitio (principal o secundario) donde reside el DP.
- Busque ~Procesamiento de entradas del paquete en el registro e identifique el subproceso de procesamiento de paquetes para el identificador de paquete en cuestión. Filtre DistMgr.log para el identificador de subproceso que identificó. Revise el paso 4 en Distribuir un paquete a dp estándar para ver los extractos de registro.
- Revise el registro filtrado y compruebe si se creó un subproceso de DP para el DP en cuestión. Filtre DistMgr.log para que el identificador de subproceso sea más fácil.
- Revise el registro filtrado y compruebe si se creó un trabajo PkgXferMgr.
Revise PkgXferMgr.log en el sitio (principal o secundario) donde reside el DP.
- Busque La solicitud de envío encontrada con entradas de identificador en el registro e identifique el subproceso de envío para la combinación de DP/package afectada. Filtre PkgXferMgr.log para el identificador de subproceso identificado. Revise el paso 6 en Distribuir un paquete a dp estándar para ver los extractos de registro.
- Revise el registro filtrado para ver si el contenido se transfirió correctamente al DP o si se produjo un error.
En el caso de los DP estándar, PkgXferMgr copia los archivos de contenido en el DP, indica al proveedor WMI de DP que agregue el archivo a la biblioteca de contenido mediante una llamada a métodos WMI. Revise SMSDPProv.log en el DP para asegurarse de que el contenido se agregó a la biblioteca de contenido. Revise el paso 7 en Distribuir un paquete a dp estándar para ver los extractos de registro.
Para los DP de extracción, PkgXferMgr notifica a DP de extracción para iniciar la descarga de contenido. Revise los pasos del 8 al 16 en Distribuir un paquete para extraer DP para comprender el flujo y revisar PullDP.log y DataTransferService.log para asegurarse de que el contenido se descargó correctamente.
En el caso de los DP estándar, PkgXferMgr envía un mensaje de estado a DistMgr. Revise DistMgr.log para comprobar si el mensaje de estado se procesó correctamente. Revise el paso 8 en Distribuir un paquete a dp estándar para ver los extractos de registro.
En el caso de los DP de extracción, pull DP envía un mensaje de estado para indicar que se ha realizado correctamente. Revise los pasos del 16 al 22 en Distribuir un paquete para extraer DP para comprender el flujo y revisar los registros pertinentes para asegurarse de que el mensaje de estado se procesa correctamente.
Si hay varios sitios implicados, asegúrese de que la replicación de bases de datos funciona y que los vínculos de base de datos entre los sitios pertinentes estén activos.
Problemas comunes de DistMgr
DistMgr.log muestra la siguiente entrada para el identificador de paquete en cuestión:
SMS_DISTRIBUTION_MANAGER 2732 (0xaac) ~The contents for the package \<PackageID> hasn't arrived from site CS1 yet, will retry later.
Esto suele ocurrir temporalmente mientras el contenido está en tránsito de un sitio a otro. Revise los registros sender/despooler para asegurarse de que no hay ningún problema con las comunicaciones del sitio. Si ve errores durante la comunicación entre sitios (Scheduler -Sender ->>Despooler), céntrese en resolver esos errores antes de solucionar el mensaje anterior en DistMgr.log. Revise Distribuir un paquete a DP entre sitios para comprender el flujo de registro.
Si no hay ningún error, puede ser necesario forzar al sitio primario a volver a enviar el paquete al sitio afectado. Consulte Volver a enviar una copia comprimida de un paquete a un sitio para obtener más información.
DistMgr.log puede mostrar que está ocupado procesando otros paquetes y usa todos los subprocesos disponibles para el procesamiento de paquetes.
SMS_DISTRIBUTION_MANAGER 4824 (0x12d8) ~Currently using 3 out of 3 allowed package processing threads.
Si ve esto, revise los subprocesos de procesamiento de paquetes actuales en DistMgr.log para ver si están bloqueados. También puede revisar los valores de cola de procesamiento de paquetes y paquetes que se están procesando en la siguiente clave del Registro para ver cuántos paquetes están actualmente en la cola de procesamiento:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Components\SMS_DISTRIBUTION_MANAGER
Si los valores de Paquetes procesados no cambian y se bloquean durante un largo período de tiempo, es posible que DistMgr esté bloqueado o bloqueado. Si esto sucede, capture un volcado de SMSExec.exe de proceso para su revisión.
Si hay muchos paquetes en la cola, pero la cola se mueve, puede que sea necesario revisar y cambiar la configuración del subproceso.
DistMgr.log no procesa los archivos PKN entrantes y, como resultado, no se procesan los paquetes. Esto da como resultado un trabajo pendiente de archivos PKN en la bandeja de entrada DistMgr.
El subproceso distMgr principal procesa los archivos PKN, por lo que en estos casos resulta útil identificar el identificador de subproceso distMgr principal buscando la SMS_EXECUTIVE entrada de registro iniciada SMS_DISTRIBUTION_MANAGER y, a continuación, filtre el DistMgr.log para el identificador de subproceso identificado.
En la mayoría de los casos, este problema se produce cuando el subproceso distMgr principal realiza una llamada WMI a un DP remoto, pero WMI en el DP no responde, lo que provoca que DistMgr espere indefinidamente. El filtrado del DistMgr.log para el subproceso distMgr principal puede proporcionar pistas sobre el DP con el que intenta comunicarse. Una vez identificado, compruebe si el DP responde y WMI funciona en el DP. Si es necesario, reinicie el DP para ver si eso ayuda.
Si el DistMgr.log filtrado no proporciona pistas, capture un volcado de proceso de SMSExec.exe mientras está en estado de problema para su revisión.
Problemas comunes de PkgXferMgr
PkgXferMgr.log muestra un error al agregar archivos a la biblioteca de contenido en el 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
Después de que PkgXferMgr copie el archivo de contenido en el DP, ejecuta métodos WMI para indicar al DP remoto que agregue el archivo a la biblioteca de contenido. Si el DP remoto no puede agregar el archivo a la biblioteca de contenido, verá un error WMI genérico (0x80041001 = WBEM_E_FAILED) en PkgXferMgr.log.
Cuando esto sucede, es necesario revisar SMSDPProv.log en el DP para identificar el motivo por el que el DP no pudo agregar el archivo a la biblioteca de contenido. Si ve errores de archivo o ruta de acceso no encontrados en SMSDPProv.log, tendría que capturar un seguimiento del Monitor de procesos para determinar el motivo del error.
PkgXferMgr.log muestra que solo se permite una conexión al 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.
o
SMS_PACKAGE_TRANSFER_MANAGER 21216 (0x52e0) ~Address to DPNAME.CONTOSO.COM is currently in pulse mode, therefore only one connection is allowed.
Si PkgXferMgr.log muestra que "solo se permite una conexión" al DP, significa que el DP está configurado para la limitación de ancho de banda. Si este es el caso, PkgXferMgr solo puede usar un subproceso para el DP y, como resultado, solo enviar un paquete al DP a la vez. Consulte Control de ancho de banda y subprocesos para obtener más información.
PkgXferMgr.log muestra que la dirección está cerrada:
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
Si ve esto en el registro, significa que el DP está bajo control de ancho de banda y la dirección al DP cerrado mientras la transferencia de contenido estaba en curso. En el ejemplo anterior, la programación de DP se configuró para Permitir prioridad alta solo durante las 8:00 a.m. a las 10:00 a. m. Como resultado, PkgXferMgr dejó de enviar contenido a las 8:00 a.m. y marcó el paquete/DP en un estado de error.
PkgXferMgr.log muestra varios subprocesos que comienzan al mismo tiempo para el mismo trabajo:
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
Normalmente, PkgXferMgr usa un subproceso para un trabajo, pero si usa varios subprocesos para el mismo trabajo, la transferencia de contenido puede iniciar un error debido al error 0x80070020 (ERROR_SHARING_VIOLATION). Esto sucede si el servidor de sitio y los servidores de bases de datos de sitio están en zonas horarias diferentes. La solución aquí es asegurarse de que el servidor de sitio y los servidores de bases de datos de sitio tienen la misma zona horaria establecida.
Problemas comunes de DP de extracción
PkgXferMgr.log muestra que pull DP está en capacidad y no se envían más trabajos al DP de extracción:
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 ejecuta la siguiente consulta para comprobar cuántos trabajos están actualmente en un estado sin terminar en el DP de extracción. Si la consulta devuelve más de 50 trabajos, no enviará más trabajos al DP de extracción.
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, '') <> '')
Estos trabajos se quitan de la
DistributionJobs
tabla cuando dp de extracción envía un mensaje de estado Correcto o cuando el sondeo de estado se detiene (en función de los valores configurados). Para ver los trabajos en el DP de extracción, puede usar wbemtest o el Explorador WMI para revisar el recuento de instancias de laSMS_PullDPNotification
clase. También puede revisar las instancias deROOT\SCCMDP:SMS_PullDPState
la clase WMI en el DP de extracción para identificar los paquetes que se encuentran en un estado Failed y revisar PullDP.log , así como DataTransferService.log para investigar los errores.SignatureDownload
se produce un error HTTP 404 en el trabajo en la extracción de DP.Creado SignatureDownload DTS job {JOBID} for package C010000D.28, content id ContentID. JobState = NotStarted
Mensaje de error de DTS recibido para C010000D.28, trabajo de contenido {JOBID}, 0x80070002 : error de BITS: 'Estado HTTP 404: la dirección URL solicitada no existe en el servidor.Se trata de un problema conocido porque los archivos de firma no están presentes en un DP de origen que se coloca en un servidor de sitio. Este problema solo se produce cuando la acción de distribución no es rehacer.
Para resolver este problema, use uno de los métodos siguientes:
- Redistribuya el paquete (redistribuir el paquete no requiere la descarga de firmas, ya que se descarga contenido completo).
- Configure el DP de extracción para usar un DP de origen que no esté colocado en el servidor de sitio.
DataTransferService.log muestra 0x800706D9 al intentar descargar contenido desde el DP de origen:
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 significa que no hay más puntos de conexión disponibles en el asignador de puntos de conexión. Este problema puede producirse debido a errores de asignación de puertos RPC causados por el firewall. También se puede producir cuando el servicio Firewall de Windows está deshabilitado.
Compruebe si hay un firewall entre el servidor de sitio y el servidor afectado y averigüe si los puertos RPC están abiertos. También puede capturar un seguimiento de red (desde el DP de extracción, así como el servidor dp de origen) al reproducir el error para su revisión.
Pull DP muestra que tiene un gran número de trabajos, pero los trabajos no se procesan.
En algunos casos (normalmente después de la instalación de un nuevo DP de extracción cuando se envía todo el contenido al DP de extracción), demasiados errores de trabajo en el DP de extracción pueden acabar con el procesamiento detenido de los trabajos. Aunque la mayoría de estos problemas se corrigen en las versiones recientes del producto (versión 1810 de Configuration Manager), algunos factores ambientales pueden dar lugar a que DP no procese trabajos. Cuando esto sucede, es probable que vea miles de trabajos de DTS en
ROOT\ccm\DataTransferService:CCM_DTS_JobEx
la clase WMI y ~50 (o más) trabajos de BITS en estado de error . En este escenario, puede ser beneficioso quitar todos los elementos específicos del trabajo de WMI en el DP de extracción y distribuir de nuevo el contenido al DP de extracción de forma controlada e investigar los errores.Para quitar todos los elementos específicos del trabajo de WMI en pull DP, puede usar el siguiente script de PowerShell (revise los comentarios del script para obtener ayuda):
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 ""
El contenido muestra Instalado en el DP de extracción, pero la dirección URL y URLSubPath para el DP de extracción no se rellenan en
ContentDPMap
, lo que provoca problemas con los paquetes que tienen habilitado el acceso SMB.Cuando el DP de extracción tiene el contenido instalado correctamente, envía un mensaje de estado que contiene los datos necesarios para actualizar los
URL/URLSubPath
valores enContentDPMap
. Esto sucede cuando se procesa la respuesta del DP de extracción. Revise los pasos del 16 al 22 en Distribuir un paquete para extraer dp para comprender el flujo y revisar los registros pertinentes para investigar por qué el mensaje de estado no se está procesando. La causa más probable de este problema es un trabajo pendiente de mensajes de estado en en el\MP\outboxes\StateMsg.box
punto de administración o MPFDM no se pueden copiar archivos en el servidor de sitio debido a problemas de permisos.
Faltan archivos de contenido en la biblioteca de contenido
Hay ocasiones en las que observaría que falta contenido de la biblioteca de contenido. Esto puede ocurrir debido a problemas de distribución de contenido anteriores o a alguien o a algo que elimina accidentalmente archivos de la biblioteca de contenido. Para confirmar que falta el contenido de la biblioteca de contenido, identifique un paquete afectado y realice un seguimiento del contenido del paquete desde PkgLib
a FileLib
.
Una vez que confirme que falta el contenido necesario para un paquete en la biblioteca de contenido, vea Volver a enviar una copia comprimida de un paquete a un sitio para obtener información sobre cómo volver a rellenar el contenido.
Problemas genéricos
El registro DistMgr o PkgXferMgr muestra un error de archivo o ruta de acceso no encontrado:
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\~
o
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
Códigos de error comunes: 0x80070002, 0x80070003.
En el caso de los errores de archivo o ruta de acceso no encontrados, es probable que el problema se deba al hecho de que la biblioteca de contenido del servidor de sitio falte archivos de contenido para el paquete. Como resultado, PkgXferMgr no puede enviar los archivos al DP.
En estos casos, puede identificar el identificador de contenido del registro y realizar un seguimiento del contenido desde
PkgLib
paraFileLib
asegurarse de que existen los archivos. También puede usar el Explorador de bibliotecas de contenido para comprobar si los archivos de contenido del paquete están disponibles en la biblioteca de contenido, pero el Explorador de bibliotecas de contenido puede tardar algún tiempo en cargarse y puede ser más fácil realizar un seguimiento manual del contenido dePkgLib
aFileLib
. Como alternativa, puede capturar un seguimiento del Monitor de procesos para comprobar si faltan los archivos necesarios de la biblioteca de contenido en el servidor de sitio.Si el sitio que falta contenido en la biblioteca de contenido es el sitio de origen del paquete, es necesario actualizar el paquete para incrementar la versión del origen del paquete para que DistMgr tome una instantánea del contenido del directorio de origen del paquete de nuevo y vuelva a rellenar el contenido que falta.
Si el sitio que falta el contenido de la biblioteca de contenido es diferente del sitio de origen del paquete, puede forzar que el sitio de origen del paquete vuelva a enviar la copia comprimida del paquete al sitio afectado. Consulte Volver a enviar una copia comprimida de un paquete a un sitio para obtener más información.
El registro distMgr/PkgXferMgr muestra un error de red:
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.
Códigos de error comunes: 2, 3, 53, 64.
Para los errores relacionados con la red, revise el registro e identifique el servidor con el que intenta comunicarse al obtener el error. Una vez identificado, pruebe lo siguiente:
- ¿Puede hacer ping a serverNAME afectado mediante la dirección FQDN/NetBIOS/IP?
- ¿Puede acceder al recurso compartido \\SERVERNAME\admin$ mediante la dirección FQDN/NetBIOS/IP mediante la cuenta SYSTEM del servidor de sitio?
- ¿Puede acceder al recurso compartido \\SERVERNAME\admin$ mediante la dirección FQDN/NetBIOS/IP mediante la cuenta del usuario que ha iniciado sesión desde el servidor de sitio?
- ¿Hay un firewall entre el servidor de sitio y el servidor afectado? ¿Están abiertos los puertos pertinentes (RPC/SMB)?
Si las pruebas anteriores se realizan correctamente, capture un seguimiento de red (desde el servidor de sitio, así como el servidor afectado) al reproducir el error para su revisión.
El registro distMgr/PkgXferMgr muestra un error de acceso denegado:
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>
Códigos de error comunes: 5, 0x80070005.
Para ver los errores relacionados con los permisos, revise el registro e identifique la ruta de acceso a la que intenta acceder cuando reciba el error. Una vez identificado, pruebe lo siguiente:
- ¿Puede hacer ping al SERVERNAME afectado si la ruta de acceso es una ruta UNC?
- ¿La cuenta de equipo del servidor de sitio tiene permisos para acceder a la ruta de acceso?
- ¿Puede acceder a la ruta de acceso afectada mediante la dirección FQDN/NetBIOS/IP al usar la cuenta SYSTEM desde el servidor de sitio?
- ¿Puede acceder a la ruta de acceso afectada mediante la dirección FQDN/NetBIOS/IP al usar la cuenta del usuario que ha iniciado sesión desde el servidor de sitio?
- ¿Hay un firewall entre el servidor de sitio y el servidor afectado? ¿Están abiertos los puertos pertinentes (RPC/SMB)?
Si las pruebas anteriores se realizan correctamente, capture un seguimiento del Monitor de procesos desde el servidor de sitio al reproducir el error para su revisión.
DistMgr/PkgXferMgr buscan contenido en el
\bin\x64\FileLib
directorio en lugar de la ubicación real de la biblioteca de contenido.Esto se debe a un problema conocido en la herramienta de transferencia de biblioteca de contenido.