Get identifier of Adaxes configuration object

Each Adaxes configuration object (e.g. custom command, report, business unit) has an immutable identifier that doesn't change even after the configuration backup/restore. These identifiers can be used to locate and refer to specific configuration objects in your scripts. For example, to execute a custom command in a script,
you need to know its identifier, which can be obtained using one of the methods below.

Get identifier by object name

To search for a configuration object by name and get its identifier, use the following script.

In the script:

  • $serviceHost – the host name of the computer where the Adaxes service is installed.
  • $objectNameToSearch – the name of the configuration object to search for.

Tip

$objectNameToSearch can contain wildcards (* character) to get the identifiers of multiple objects or search for objects whose name you're unsure of. For example:

  • Specify My* to get the identifiers of all objects whose names start with My.
  • Specify * to get the identifiers of all configuration objects.
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi")

$serviceHost = "localhost"
$objectNameToSearch = "My object*"

# Prompt for credentials.
$credential = Get-Credential

# Connect to the Adaxes service.
$admNS = New-Object "Softerra.Adaxes.Adsi.AdmNamespace"
$admService = $admNS.GetServiceDirectly("$serviceHost")

# Search objects
$objectClassFilter = "(|(objectClass=adm-CustomCommand)(objectClass=adm-BusinessRule)" `
    + "(objectClass=adm-BusinessUnit)(objectClass=adm-PropertyPattern)" `
    + "(objectClass=adm-Report)(objectClass=adm-ReportOverview))"
$filter = "(&" + $objectClassFilter + "(name=$objectNameToSearch))"
$configRootPath = $admService.Backend.GetConfigurationContainerPath("ConfigurationRoot")
$searcher = $admService.OpenObject($configRootPath, 
    $credential.UserName, $credential.GetNetworkCredential().Password, 0)
$searcher.SearchFilter = $filter
$searcher.SearchScope = "ADS_SCOPE_SUBTREE"
    
try
{
    # Execute search
    $searchResultIterator = $searcher.ExecuteSearch()
    $searchResults = $searchResultIterator.FetchAll()
    
    if ($searchResults.Length -gt 0)
    {
        foreach ($searchResult in $searchResults)
        {
            if ($searchResult.ObjectType -eq "objectClass=adm-CustomCommand")
            {
                $id = [Guid]$searchResult.Properties["adm-CustomCommandID"].Value
            }
            else
            {
                $id = [Guid]$searchResult.Properties["adm-ObjectID"].Value
            }

            # Output information
            Write-Host "`nName:" $searchResult.Properties["name"].Value
            Write-Host "ID:" $id
            Write-Host "Type:" $searchResult.ObjectType
            Write-Host "DN:" $searchResult.Properties["distinguishedName"].Value
        }
    }
    else
    {
        Write-Host "`nNo objects found."
    }
}
finally
{
    # Release resources
    if ($searchResultIterator){ $searchResultIterator.Dispose() }
}

Get identifier by DN

If you know the distinguished name of the configuration object, you can get its identifier using the following script.

In the script:

  • $serviceHost – the host name of the computer where the Adaxes service is installed.
  • $objDN – the distinguished name of an Adaxes configuration object. For details on how to get the DN of a configuration object, see Get the DN of a directory object.
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi")

$serviceHost = "localhost" 
$objDN = "CN=My Command,CN=Custom Commands,CN=Configuration Objects,CN=Adaxes Configuration,CN=Adaxes"

# Prompt for credentials.
$credential = Get-Credential

# Connect to the Adaxes service.
$admNS = New-Object "Softerra.Adaxes.Adsi.AdmNamespace"
$admService = $admNS.GetServiceDirectly($serviceHost)

# Bind to the configuration object.
$configObject = $admService.OpenObject("Adaxes://$objDN", $credential.UserName, `
    $credential.GetNetworkCredential().Password, 0)

# Get object identifier.
if ($configObject.Class -ne "adm-CustomCommand")
{
    $id = [Guid]$configObject.Get("adm-ObjectId")
}
else
{
    $id = [Guid]$configObject.Get("adm-CustomCommandId")
}

Write-Host "ID: $id"

See also