Как исправить ошибку исключения ADSync при запуске Delta-синхронизации с powershell - PullRequest
0 голосов
/ 24 мая 2019

Когда я пытаюсь запустить Delta Sync через pssession, выдается ошибка. Если я запускаю команды по одной строке за раз, все работает отлично.

Enter-PSSession server_name
Get-Module ADSync | Import-Module
Start-ADSyncSyncCycle -PolicyType Delta 
Exit-PSSession

Я ожидаю, что он запустит синхронизацию, но просто получит ошибку:

'' Microsoft.DirectoryServices.MetadirectoryServices.UI.PropertySheetBase.UIUtils бросил исключение.

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Решение, которое закончилось для меня, состояло в том, чтобы вызвать команду, а не войти в pssession.Я не уверен, почему это работает, но это работает.

$cred = Get-Credential
Invoke-Command -ComputerName server_name -Credential $cred -ScriptBlock{
    Import-Module -Name "C:\Program Files\Microsoft Azure AD Sync\Bin\ADSync"
    Start-ADSyncSyncCycle -PolicyType Delta 
}
0 голосов
/ 25 мая 2019

Обычно я выполняю Start-ADSyncSyncCycle через вспомогательную функцию, которая определяет, приостановлен ли ADSyncScheduler, а также определяет, может ли уже выполняться цикл синхронизации.Не наблюдая за этими вещами, вы можете получать ошибки.

function Start-SyncCycle {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $false, Position = 0)]
        [ValidateSet('Delta','Initial')]
        [string]$PolicyType = 'Delta'
    )
    # test if the ADSyncScheduler is not suspended
    $scheduler = Get-ADSyncScheduler
    if ($scheduler.SchedulerSuspended) {
        # SchedulerSuspended is set during an upgrade to temporarily block the scheduler from running. 
        # When this property is $true, running Start-ADSyncSyncCycle wil result in error:
        # System.InvalidOperationException: Scheduler is already suspended via global parameters.

        Set-ADSyncScheduler -SchedulerSuspended $false
    }
    # test if a scheduled synchronization is already running
    if ($scheduler.SyncCycleInProgress) {  # or use: if (Get-ADSyncConnectorRunStatus) { ... }
        Write-Warning "A sync is already in progress. Please try again later."
    }
    else {
        Write-Host "Initializing Azure AD $PolicyType Sync..." -ForegroundColor Yellow
        try {
            Start-ADSyncSyncCycle -PolicyType $PolicyType -ErrorAction Stop | Out-Null

            Write-Host "Waiting for Sync to start.."
            # give the Sync Connector some time to start up (10 seconds should be enough)
            Start-Sleep -Seconds 10

            Write-Host "Waiting for Sync to finish.."
            While(Get-ADSyncConnectorRunStatus) {
                Write-Host "." -NoNewline
                Start-Sleep -Seconds 5
            }
            Write-Host
            Write-Host "Azure AD $PolicyType Sync has finished." -ForegroundColor Green

        }
        catch {
            Write-Error $_.Exception.Message
        }
    }
}

Вы используете такую ​​функцию:

$cred = Get-Credential -UserName "your.username@yourdomain.com" -Message "Please enter credentials for yourdomain.com"
Invoke-Command -ComputerName $AzureConnectServer -ScriptBlock ${function:Start-SyncCycle} -Credential $cred

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...