Public/copy-AllegisSNOWtoIDN.ps1

function copy-AllegisSNOWtoIDN ($snoworg, $snowcred, $snowfilter, $IDNorg, $IDNsourceid, $IDNClientID, $IDNClientKey, $IDNaccesstoken){
    if (!!$IDNClientID -and !!$IDNClientKey){
        $header = get-AllegisIDNBasicAuthHeader -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey
    }elseif(!!$accesstoken){
        $header=get-AllegisIDNprivateHeader $IDNaccesstoken
    }
    if ($snowfilter -notlike "*u_nick_name*"){$snowfilternew=$snowfilter + "^u_nick_nameISNOTEMPTY"}else{$snowfilternew=$snowfilter}
    $snowusers=get-AllegisSNOWUsers -snowFilter $snowfilternew -snowOrg $snoworg -snowcred $snowcred -snowEnv $snoworg
    if ($snowusers -eq $null){write-host "no users fit $snowfilter. stopping"; break}
    $idnusers=get-AllegisIDNAccount -orgname $IDNorg -sourceid $IDNsourceid -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey -accesstoken $IDNaccesstoken
    foreach ($idnuser in $idnusers){
        $idnuserdetail=get-AllegisIDNAccount -orgname $IDNorg -accountid $idnuser.id -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey -accesstoken $IDNaccesstoken
        $idnuser | Add-Member -NotePropertyName 'detailed' -NotePropertyValue $idnuserdetail -Force
    }
    if (!!$idnusers -and !!$snowusers){
        $compare=compare-object $idnusers.detailed.attributes.sys_id $snowusers.sys_id -IncludeEqual
    }elseif (!!$idnusers){
        $compare=$idnusers | select @{n='InputObject';e={$_.detailed.attributes.sys_id}},@{n='sideIndicator';e={'<='}}
    }elseif(!!$snowusers){
        $compare=$snowusers | select @{n='InputObject';e={$_.sys_id}},@{n='sideIndicator';e={'=>'}}
    }
    foreach ($change in ($compare | sort -Property sideindicator -Descending)){
        switch ($change.sideindicator){
            '=>'{#new
                "adding $($change.InputObject) in IDN $IDNsourceid"
                new-AllegisIDNAccount -orgname $IDNorg -sourceid $IDNsourceid -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey -accesstoken $IDNaccesstoken -newuser $snowusers.Where{$_.sys_id -eq $change.InputObject}[0]
            }
            '<='{#delete
                "removing $($change.InputObject) in IDN $IDNsourceid"
                remove-AllegisIDNAccount -orgname $IDNorg -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey -accesstoken $IDNaccesstoken -accountid $idnusers.where{$_.detailed.attributes.sys_id -eq $change.InputObject}[0].id

            }
            '=='{#check for update
                $snowtemp=$snowusers.Where{$_.sys_id -eq $change.InputObject}[0]
                $idntemp=$idnusers.where{$_.detailed.attributes.sys_id -eq $change.InputObject}[0]
                if ($snowtemp.sys_updated_on -ne $null -and $idntemp.detailed.attributes.sys_updated_on -ne $null -and [datetime]$snowtemp.sys_updated_on -ge [datetime]$idntemp.detailed.attributes.sys_updated_on)
                {
                    "updating $($change.InputObject) in IDN $IDNsourceid"
                    update-AllegisIDNAccount -orgname $IDNorg -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey -sourceid $IDNsourceid -accesstoken $IDNaccesstoken -accountid $idntemp.id -userdetails $snowtemp
                    
                }                            
            }
        }
    }
    foreach ($id in $idnusers.where{$_.detailed.attributes.sys_id.length -ne 32}.id){
    remove-AllegisIDNAccount -orgname $IDNorg -IDNClientID $IDNClientID -IDNClientKey $IDNClientKey -accesstoken $IDNaccesstoken -accountid $id
    }
}