DSCResources/myAdWaitForObject/myAdWaitForObject.psm1

Import-Module $PSScriptRoot\..\myAdHelper.psm1 -Verbose:$false

function Get-TargetResource
{
    param
    (
        [Parameter(Mandatory)]
        [String]$Identity,
        [String]$Server,
        [System.Management.Automation.PSCredential]$Credential,
        [UInt64]$RetryIntervalSec = 60,
        [UInt32]$RetryCount = 10
    )
    
    $myParams = @{ } + $PSBoundParameters
    
    $myParams.Remove('Ensure') | out-null
    $myParams.Remove('RetryIntervalSec') | out-null
    $myParams.Remove('RetryCount') | out-null
    
    ReplacePartitionTokens @myParams

}

function Set-TargetResource
{
    param
    (
        [Parameter(Mandatory)]
        [String]$Identity,
        [String]$Server,
        [System.Management.Automation.PSCredential]$Credential,
        [UInt64]$RetryIntervalSec = 60,
        [UInt32]$RetryCount = 120
    )
    $NewIdentity = Get-TargetResource @PSBoundParameters
    Write-Verbose "NewIdentity:$NewIdentity"
    
    $myParams = @{ } + $PSBoundParameters
    $myParams.Remove('Ensure') | out-null
    $myParams.Remove('Identity') | out-null
    $myParams.Add("Identity", $NewIdentity)
    $myParams.Remove('RetryIntervalSec') | out-null
    $myParams.Remove('RetryCount') | out-null
    
    for($count = 0; $count -lt $RetryCount; $count++)
    {
        if (myGetAdObject @myParams)
        {
            break
        }
        else
        {
            Write-Verbose -Message "Object '$($NewIdentity)' not found. Try $($count)/$($RetryCount). Will retry again after $RetryIntervalSec sec"
            Start-Sleep -Seconds $RetryIntervalSec
            Clear-DnsClientCache
        }    
    }
    
    if ($(myGetAdObject @myParams) -eq $null) 
    {
             throw "Object '$($NewIdentity)' NOT found after $RetryCount attempts."
    }
}

function Test-TargetResource
{
    [OutputType([System.Boolean])]
    param
    (
        [Parameter(Mandatory)]
        [String]$Identity,
        [String]$Server,
        [System.Management.Automation.PSCredential]$Credential,
        [UInt64]$RetryIntervalSec = 60,
        [UInt32]$RetryCount = 10
    )
    $NewIdentity = Get-TargetResource @PSBoundParameters
    Write-Verbose "NewIdentity:$NewIdentity"
    
    $myParams = @{ } + $PSBoundParameters
    $myParams.Remove('Ensure') | out-null
    $myParams.Remove('Identity') | out-null
    $myParams.Add("Identity", $NewIdentity)
    $myParams.Remove('RetryIntervalSec') | out-null
    $myParams.Remove('RetryCount') | out-null
    
    if(myGetAdObject @myParams)
    {
        $true
    }
    else 
    {
        $false
    }    
}