Script repository
The script copies values of custom attributes from one Adaxes service to another. Execute the script in Windows PowerShell on the computer where an Adaxes service is installed. When prompted, first specify the credentials of the Adaxes service account (specified during Adaxes installation) for the source service and then for the target one.
Parameters
$adaxesServiceSourceName- the fully-qualified domain name (FQDN) of the computer where the source Adaxes service is installed.$adaxesServiceTargetName- the fully-qualified domain name (FQDN) of the computer where the target Adaxes service is installed.$customAttributesInfo- maps names of the custom attributes whose values will be copied with their numbers.
Import-Module Adaxes
$adaxesServiceSourceName = "AdaxesServiceSource.example.com" # TODO: modify me
$adaxesServiceTargetName = "AdaxesServiceTarget.example.com" # TODO: modify me
$customAttributesInfo = @{
"adm-CustomAttributeText" = 1..40
"adm-CustomAttributeBoolean" = 1..40
"adm-CustomAttributeDate" = 1..15
"adm-CustomAttributeInt" = 1..5
"adm-CustomAttributeTextMultiValue" = 1..10
"adm-CustomAttributeTimestamp" = 1..15
"adm-CustomAttributeBinary" = 1..15
} # TODO: modify me
function SearchExtendingObjects ($searcher, $list, $filter)
{
$searcher.SearchFilter = $filter
$searcher.ReferralChasing = "ADS_CHASE_REFERRALS_NEVER"
$searcher.PageSize = 500
try
{
$searchIterator = $searcher.ExecuteSearch()
while ($True)
{
# Get the next page of search results.
$searchResults = $searchIterator.GetNextPage()
$searchResults | %{$list.Add([guid]$_.Properties["adm-ExtendingObjectGuid"].Value, $_)}
if (($searchResults.Length -eq 0) -and ($searchIterator.IsSearchCompleted))
{
break
}
}
}
finally
{
if ($searchIterator) { $searchIterator.Dispose() }
}
}
function CopyCustomAttributeValues ($targetExtendingObject, $sourceSearchResult, $customAttributesInfo)
{
foreach ($attributeNameTemplate in $customAttributesInfo.Keys)
{
$attributeNumbers = $customAttributesInfo[$attributeNameTemplate]
foreach ($number in $attributeNumbers)
{
$attributeName = "$attributeNameTemplate$number"
if (!$sourceSearchResult.ContainsProperty($attributeName))
{
continue
}
$values = $sourceSearchResult.GetPropertyByName($attributeName).Values.ToArray()
if ($values.Count -eq 1)
{
$values = $values[0]
}
else
{
$values = $values
}
$targetExtendingObject.Put($attributeName, $values)
}
}
}
# Prompt for credentials.
$adaxesServiceSourceCred = Get-Credential -Message "Enter credentials for $adaxesServiceSourceName Adaxes service"
$adaxesServiceTargetCred = Get-Credential -Message "Enter credentials for $adaxesServiceTargetName Adaxes service"
$admNS = New-Object "Softerra.Adaxes.Adsi.AdmNamespace"
$admSourceService = $admNS.GetServiceDirectly($adaxesServiceSourceName)
$extendingObjectSourceContainer = $admSourceService.OpenObject("Adaxes://CN=Extending Objects,CN=Adaxes Configuration,CN=Adaxes", $adaxesServiceSourceCred.UserName, $adaxesServiceSourceCred.GetNetworkCredential().Password, 0)
$admTargetService = $admNS.GetServiceDirectly($adaxesServiceTargetName)
$extendingObjectTargetContainer = $admTargetService.OpenObject("Adaxes://CN=Extending Objects,CN=Adaxes Configuration,CN=Adaxes", $adaxesServiceTargetCred.UserName, $adaxesServiceTargetCred.GetNetworkCredential().Password, 0)
# Build filter
$filter = New-Object System.Text.StringBuilder
[void]$filter.Append("(&(objectClass=adm-ExtendingObject)(|")
foreach ($attributeNameTemplate in $customAttributesInfo.Keys)
{
$attributeNumbers = $customAttributesInfo[$attributeNameTemplate]
foreach ($number in $attributeNumbers)
{
$attributeName = "$attributeNameTemplate$number"
[void]$filter.Append("($attributeName=*)")
}
}
[void]$filter.Append("))")
$searchResultsSourceService = @{}
SearchExtendingObjects $extendingObjectSourceContainer $searchResultsSourceService $filter.ToString()
$searchResultsTargetService = @{}
SearchExtendingObjects $extendingObjectTargetContainer $searchResultsTargetService "(objectClass=adm-ExtendingObject)"
foreach ($extendingObjectGuid in $searchResultsSourceService.Keys)
{
$sourceSearchResult = $searchResultsSourceService[$extendingObjectGuid]
if ($searchResultsTargetService.ContainsKey($extendingObjectGuid))
{
$targetSearchResult = $searchResultsTargetService[$extendingObjectGuid]
$targetExtendingObject = $admTargetService.OpenObject($targetSearchResult.AdsPath, $adaxesServiceTargetCred.UserName, $adaxesServiceTargetCred.GetNetworkCredential().Password, 0)
CopyCustomAttributeValues $targetExtendingObject $sourceSearchResult $customAttributesInfo
}
else
{
$targetExtendingObject = $extendingObjectTargetContainer.Create($sourceSearchResult.ObjectType, "CN=" + $sourceSearchResult.Name)
$targetExtendingObject.Put("adm-ExtendingObjectGuid", $sourceSearchResult.GetPropertyByName("adm-ExtendingObjectGuid").Values[0])
CopyCustomAttributeValues $targetExtendingObject $sourceSearchResult $customAttributesInfo
}
$targetExtendingObject.SetInfo()
}
Comments 0
You must be signed in to comment.