-
Notifications
You must be signed in to change notification settings - Fork 4
Setting up the lab environment
Ryan Newington edited this page Sep 4, 2025
·
8 revisions
This guide provides step-by-step instructions for creating and configuring the ACMA demonstration environment. Follow these steps to establish a fully functional lab with sample data.
Execute the following PowerShell script to create the database and configure the complete schema. Adjust the ServerName parameter to match your SQL Server instance.
# Load ACMA PowerShell module
Import-Module AcmaPS
# Create database and establish connection
New-AcmaDatabase -ServerName localhost -DatabaseName AcmaDemo
Connect-AcmaEngine -ServerName localhost -DatabaseName AcmaDemo
try {
# ============================================
# SCHEMA ATTRIBUTES CONFIGURATION
# ============================================
# Person identity attributes
Add-AcmaSchemaAttribute -Name firstName -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name middleName -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name sn -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name employeeNumber -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name displayName -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
# Contact attributes
Add-AcmaSchemaAttribute -Name mail -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name accountName -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name homeFolderPath -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
# System attributes
Add-AcmaSchemaAttribute -Name unixUid -Type Integer -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name hasAdminAccount -Type Boolean -IsMultivalued $false -Operation ImportExport
# Reference attributes
Add-AcmaSchemaAttribute -Name orgUnit -Type Reference -IsIndexed $true -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name adminAccount -Type Reference -IsMultivalued $false -Operation ImportOnly
Add-AcmaSchemaAttribute -Name manager -Type Reference -IsMultivalued $false -Operation ImportExport
Add-AcmaSchemaAttribute -Name directReports -Type Reference -IsMultivalued $true -Operation ImportExport
# Derived attributes
Add-AcmaSchemaAttribute -Name orgUnitName -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
# Organizational unit attributes
Add-AcmaSchemaAttribute -Name ouNumber -Type String -IsIndexed $false -IsMultivalued $false -Operation ImportExport
# ============================================
# OBJECT CLASSES CONFIGURATION
# ============================================
Add-AcmaSchemaObjectClass -Name orgUnit -IsUndeletable $false
Add-AcmaSchemaObjectClass -Name person -IsUndeletable $true
Add-AcmaSchemaObjectClass -Name shadowAdminAccount -IsUndeletable $false -ShadowFrom person
# ============================================
# ATTRIBUTE BINDINGS - ORGANIZATIONAL UNITS
# ============================================
Add-AcmaSchemaBinding -Attribute ouNumber -ObjectClass orgUnit
Add-AcmaSchemaBinding -Attribute displayName -ObjectClass orgUnit
# ============================================
# ATTRIBUTE BINDINGS - PERSON OBJECTS
# ============================================
# Identity bindings
Add-AcmaSchemaBinding -Attribute firstName -ObjectClass person
Add-AcmaSchemaBinding -Attribute sn -ObjectClass person
Add-AcmaSchemaBinding -Attribute middleName -ObjectClass person
Add-AcmaSchemaBinding -Attribute employeeNumber -ObjectClass person
Add-AcmaSchemaBinding -Attribute displayName -ObjectClass person
# Contact bindings
Add-AcmaSchemaBinding -Attribute mail -ObjectClass person
Add-AcmaSchemaBinding -Attribute accountName -ObjectClass person
Add-AcmaSchemaBinding -Attribute homeFolderPath -ObjectClass person
# System bindings
Add-AcmaSchemaBinding -Attribute unixUid -ObjectClass person
Add-AcmaSchemaBinding -Attribute hasAdminAccount -ObjectClass person
Add-AcmaSchemaBinding -Attribute adminAccount -ObjectClass person
# Reference bindings
Add-AcmaSchemaBinding -Attribute orgUnit -ObjectClass person
Add-AcmaSchemaBinding -Attribute manager -ObjectClass person
Add-AcmaSchemaBinding -Attribute directReports -ObjectClass person
# Inheritance binding (orgUnitName inherits from referenced orgUnit's displayName)
Add-AcmaSchemaBinding -Attribute orgUnitName -ObjectClass person -InheritanceSourceAttribute displayName -InheritanceSourceClass orgUnit -InheritanceSourceReference orgUnit
# ============================================
# REFERENCE BACK-LINKS
# ============================================
# Automatically populate directReports when manager references are created
Add-AcmaSchemaReferenceBackLink -SourceObjectClass person -SourceAttribute manager -TargetObjectClass person -TargetAttribute directReports
# ============================================
# ATTRIBUTE BINDINGS - SHADOW ADMIN ACCOUNTS
# ============================================
# Direct bindings
Add-AcmaSchemaBinding -Attribute accountName -ObjectClass shadowAdminAccount
Add-AcmaSchemaBinding -Attribute mail -ObjectClass shadowAdminAccount
Add-AcmaSchemaBinding -Attribute displayName -ObjectClass shadowAdminAccount
# Inherited bindings from parent person object
Add-AcmaSchemaBinding -Attribute firstName -ObjectClass shadowAdminAccount -InheritanceSourceAttribute firstName -InheritanceSourceClass person -InheritanceSourceReference shadowParent
Add-AcmaSchemaBinding -Attribute middleName -ObjectClass shadowAdminAccount -InheritanceSourceAttribute middleName -InheritanceSourceClass person -InheritanceSourceReference shadowParent
Add-AcmaSchemaBinding -Attribute sn -ObjectClass shadowAdminAccount -InheritanceSourceAttribute sn -InheritanceSourceClass person -InheritanceSourceReference shadowParent
Add-AcmaSchemaBinding -Attribute employeeNumber -ObjectClass shadowAdminAccount -InheritanceSourceAttribute employeeNumber -InheritanceSourceClass person -InheritanceSourceReference shadowParent
# ============================================
# CONSTANTS CONFIGURATION
# ============================================
Add-AcmaConstant -Name homeFolderPathRoot -Value '%temp%\acmausers'
Add-AcmaConstant -Name mailSuffix -Value 'acma-demo.com'
# ============================================
# SEQUENCES CONFIGURATION
# ============================================
Add-AcmaSequence -Name unixUid -StartValue 20000 -IncrementBy 1
# ============================================
# SHADOW OBJECT LINKS
# ============================================
Add-AcmaShadowObjectLink -Name adminAccount -ReferenceAttribute adminAccount -ProvisioningAttribute hasAdminAccount -ShadowObjectClass shadowAdminAccount
Write-Host "✅ Database schema configuration completed successfully!" -ForegroundColor Green
}
catch {
Write-Host "❌ Error during schema configuration:" -ForegroundColor Red
$_.Exception.ToString()
throw
}Create sample organizational units and person objects to demonstrate ACMA functionality. Adjust file paths to match your environment.
# Connect with business rules configuration
Connect-AcmaEngine -ServerName localhost -DatabaseName AcmaDemo -ConfigFile "C:\AcmaDemo\acma-demo.acmax" -LogFile "C:\AcmaDemo\demo.log" -LogLevel Debug
# ============================================
# CREATE ORGANIZATIONAL UNITS
# ============================================
Write-Host "Creating organizational units..." -ForegroundColor Yellow
$orgUnit1 = Add-AcmaObject -ObjectClass orgUnit
$orgUnit1.displayName = "Finance"
$orgUnit1.ouNumber = "2001"
Save-AcmaObject $orgUnit1
$orgUnit2 = Add-AcmaObject -ObjectClass orgUnit
$orgUnit2.displayName = "IT"
$orgUnit2.ouNumber = "2002"
Save-AcmaObject $orgUnit2
$orgUnit3 = Add-AcmaObject -ObjectClass orgUnit
$orgUnit3.displayName = "Sales"
$orgUnit3.ouNumber = "2003"
Save-AcmaObject $orgUnit3
# ============================================
# CREATE PERSON OBJECTS
# ============================================
Write-Host "Creating person objects..." -ForegroundColor Yellow
# Manager in IT department
$person1 = Add-AcmaObject -ObjectClass person
$person1.firstName = "John"
$person1.sn = "Smith"
$person1.employeeNumber = "1000"
$person1.orgUnit = $orgUnit2
Save-AcmaObject $person1
Write-Host "✅ Created John Smith (IT Manager)" -ForegroundColor Green
# Sales employee with unique name
$person2 = Add-AcmaObject -ObjectClass person
$person2.firstName = "William"
$person2.sn = "Keys"
$person2.employeeNumber = "1001"
$person2.orgUnit = $orgUnit3
$person2.manager = $person1
Save-AcmaObject $person2
Write-Host "✅ Created William Keys (Sales)" -ForegroundColor Green
# Finance employee with middle name (tests email conflict resolution)
$person3 = Add-AcmaObject -ObjectClass person
$person3.firstName = "William"
$person3.middleName = "John"
$person3.sn = "Keys"
$person3.employeeNumber = "1002"
$person3.orgUnit = $orgUnit1
$person3.manager = $person1
Save-AcmaObject $person3
Write-Host "✅ Created William John Keys (Finance)" -ForegroundColor Green
# Employee with surname only (tests account name generation)
$person4 = Add-AcmaObject -ObjectClass person
$person4.sn = "Stewart"
$person4.employeeNumber = "1003"
$person4.orgUnit = $orgUnit3
$person4.manager = $person1
Save-AcmaObject $person4
Write-Host "✅ Created Stewart (Sales)" -ForegroundColor Green
# Another William Keys (tests uniqueness handling)
$person5 = Add-AcmaObject -ObjectClass person
$person5.firstName = "William"
$person5.sn = "Keys"
$person5.employeeNumber = "1004"
$person5.orgUnit = $orgUnit1
$person5.manager = $person1
Save-AcmaObject $person5
Write-Host "✅ Created William Keys (Finance) - duplicate name test" -ForegroundColor Green
Write-Host "🎉 Lab environment setup completed successfully!" -ForegroundColor CyanAfter running the setup scripts, verify the configuration:
- Check object creation: Verify all objects were created successfully
- Validate business rules: Confirm automatic attribute population (account names, email addresses)
- Test inheritance: Check that orgUnitName and directReports are populated correctly
- Verify sequences: Ensure unixUid values are assigned sequentially
- Check shadow objects: Confirm admin accounts are created for IT department users
- Business rule evaluation: Evaluating the business rules
- Previous step: Lab environment definition