#Requires -Modules ADSync <# .SYNOPSIS Wyświetla błędy synchronizacji ADConnect — obiekty z problemami w Connector Space. .DESCRIPTION Pobiera błędy z ADConnect Connector Space: - Export errors (niewyeksportowane obiekty) - Import errors - Obiekty z atrybutem w konflikcie (AttributeValueMustBeUnique, ObjectTypeMismatch) - Zduplikowane UPN/ProxyAddresses Pomocny przy diagnozowaniu problemów z synchronizacją konkretnych obiektów. .PARAMETER ConnectorName Nazwa konektora (domyślnie: konektor Azure AD). Użyj Get-ADSyncConnector | Select Name aby zobaczyć dostępne. .PARAMETER ErrorType Typ błędów do wyświetlenia: Export, Import, All (domyślnie: All). .PARAMETER ExportCSV Ścieżka do pliku CSV z błędami. .EXAMPLE .\Get-ADConnectSyncErrors.ps1 .\Get-ADConnectSyncErrors.ps1 -ConnectorName "contoso.com" .\Get-ADConnectSyncErrors.ps1 -ExportCSV C:\Temp\sync-errors.csv #> param( [string]$ConnectorName = "", [ValidateSet('Export', 'Import', 'All')] [string]$ErrorType = 'All', [string]$ExportCSV = "" ) Import-Module ADSync -ErrorAction Stop # Pobierz konektory $connectors = Get-ADSyncConnector if (-not $ConnectorName) { # Auto-wykryj konektor AAD (Azure AD) $aadConnector = $connectors | Where-Object { $_.Type -eq 'Extensible2' -or $_.Name -like "*AAD*" -or $_.Name -like "*Azure*" } $ConnectorName = if ($aadConnector) { $aadConnector[0].Name } else { $connectors[0].Name } Write-Host "Auto-wykryto konektor: $ConnectorName" -ForegroundColor DarkGray } Write-Host "`n========================================" -ForegroundColor Cyan Write-Host " BŁĘDY SYNCHRONIZACJI — $ConnectorName" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan $allErrors = @() # Export errors if ($ErrorType -in 'Export', 'All') { Write-Host "--- BŁĘDY EKSPORTU ---" -ForegroundColor Yellow try { $exportErrors = Get-ADSyncCSObject -ConnectorName $ConnectorName -ExportErrors if ($exportErrors) { $allErrors += $exportErrors | ForEach-Object { [PSCustomObject]@{ Type = 'Export' DN = $_.DN ErrorType = $_.ExportError AttributeName = $_.ExportAttributeError ObjectType = $_.ObjectType } } $exportErrors | Select-Object DN, ExportError, ExportAttributeError, ObjectType | Format-Table -AutoSize -Wrap } else { Write-Host " Brak błędów eksportu." -ForegroundColor Green } } catch { Write-Warning "Nie udało się pobrać błędów eksportu: $_" } } # Błędy z ostatnich uruchomień Write-Host "`n--- OSTATNIE PRZEBIEGI Z BŁĘDAMI ---" -ForegroundColor Yellow $runHistory = Get-ADSyncRunProfileResult -NumberRequested 20 | Where-Object { $_.ConnectorName -eq $ConnectorName -and $_.Result -notin 'success', 'stopped-server-shutdown', 'stopped-user-request' } if ($runHistory) { $runHistory | Select-Object RunProfileName, Result, @{N='Start'; E={ $_.StartDate.ToString("yyyy-MM-dd HH:mm:ss") }}, @{N='AddErr'; E={ $_.ExportCounters?.ExportErrors }}, @{N='UpdateErr'; E={ $_.ExportCounters?.ExportErrorsUpdate }} | Format-Table -AutoSize } else { Write-Host " Brak uruchomień z błędami (ostatnie 20)." -ForegroundColor Green } # Podsumowanie statystyk Write-Host "`n--- STATYSTYKI KONEKTORÓW ---" -ForegroundColor Yellow $connectors | ForEach-Object { $stats = Get-ADSyncConnectorStatistics -ConnectorName $_.Name [PSCustomObject]@{ Konektor = $_.Name 'CS Objects' = $stats.ConnectorSpaceObjects 'Pending Add' = $stats.PendingExportAdd 'Pending Update' = $stats.PendingExportUpdate 'Pending Delete' = $stats.PendingExportDelete } } | Format-Table -AutoSize if ($ExportCSV -and $allErrors) { $allErrors | Export-Csv -Path $ExportCSV -NoTypeInformation -Encoding UTF8 Write-Host "`nWyeksportowano $($allErrors.Count) błędów do: $ExportCSV" -ForegroundColor Green } Write-Host "`nAby przejrzeć szczegóły: otwórz Synchronization Service Manager → Operations" -ForegroundColor DarkGray