AD User Manager
Modern Active Directory user management tool with conflict resolution, supporting both domain controller (PowerShell) and remote LDAP operations.
Features
- Dual Operation Modes: PowerShell on domain controllers for optimal performance, LDAP for remote connections
- Automatic Conflict Resolution: Intelligent username conflict detection and resolution
- Type-Safe Configuration: Pydantic-based configuration with validation
- Rich CLI Interface: Beautiful command-line interface with progress indicators
- Structured Logging: JSON and console logging with contextual information
- Modern Python: Built for Python 3.12+ with type hints and async support
Installation
pip install ad-user-manager
Quick Start
Domain Controller Mode (Recommended)
When running directly on a domain controller, the tool automatically uses PowerShell for optimal performance:
from ad_user_manager import ADConfig, DCServerConfig, create_ad_manager
# Configure for domain controller
config = ADConfig(
server=DCServerConfig(
connection_type="domain_controller",
base_dn="CN=Users,DC=example,DC=com",
use_current_credentials=True # Use current user's AD credentials
)
)
# Create user
with create_ad_manager(config) as manager:
result = manager.create_user(
username="jdoe",
first_name="John",
last_name="Doe",
email="john.doe@example.com",
resolve_conflicts=True
)
print(f"Created user: {result.username}")
LDAP Mode (Remote Connections)
For remote connections to Active Directory:
from ad_user_manager import ADConfig, LDAPServerConfig, create_ad_manager
# Configure for LDAP connection
config = ADConfig(
server=LDAPServerConfig(
connection_type="ldap",
host="dc.example.com",
port=389,
use_ssl=False,
bind_dn="CN=service-account,CN=Users,DC=example,DC=com",
bind_password="your-password",
base_dn="CN=Users,DC=example,DC=com"
)
)
# Create user
with create_ad_manager(config) as manager:
result = manager.create_user(
username="jsmith",
first_name="Jane",
last_name="Smith",
email="jane.smith@example.com"
)
CLI Usage
Create a User
# Domain controller mode
ad-user-manager create-user -u jdoe -f John -l Doe -e john.doe@example.com
# With conflict resolution
ad-user-manager create-user -u jdoe -f John -l Doe -e john.doe@example.com --resolve-conflicts
# Dry run mode
ad-user-manager create-user -u jdoe -f John -l Doe -e john.doe@example.com --dry-run
Search for a User
ad-user-manager search-user -u jdoe
Test Connection
ad-user-manager test-connection
Generate Username Suggestions
ad-user-manager suggest-usernames -f John -l Doe
Configuration
Environment Variables
# LDAP Configuration
export AD_CONNECTION_TYPE=ldap
export AD_HOST=dc.example.com
export AD_PORT=389
export AD_USE_SSL=false
export AD_BIND_DN="CN=service-account,CN=Users,DC=example,DC=com"
export AD_BIND_PASSWORD="your-password"
export AD_BASE_DN="CN=Users,DC=example,DC=com"
# Domain Controller Configuration
export AD_CONNECTION_TYPE=domain_controller
export AD_BASE_DN="CN=Users,DC=example,DC=com"
export AD_USE_CURRENT_CREDENTIALS=true
Configuration File
Create a .env file or use environment variables:
# For LDAP mode
AD_CONNECTION_TYPE=ldap
AD_HOST=dc.example.com
AD_BIND_DN=CN=service-account,CN=Users,DC=example,DC=com
AD_BIND_PASSWORD=your-password
AD_BASE_DN=CN=Users,DC=example,DC=com
# For DC mode
AD_CONNECTION_TYPE=domain_controller
AD_BASE_DN=CN=Users,DC=example,DC=com
AD_USE_CURRENT_CREDENTIALS=true
Advanced Features
Conflict Resolution
The tool automatically detects username conflicts and generates alternatives:
# Automatic conflict resolution
result = manager.create_user(
username="jdoe", # If exists, might become "jdoe1", "jdoe2", etc.
first_name="John",
last_name="Doe",
email="john.doe@example.com",
resolve_conflicts=True
)
print(f"Final username: {result.username}")
print(f"Conflicts resolved: {result.conflicts_resolved}")
Custom Attributes
result = manager.create_user(
username="jdoe",
first_name="John",
last_name="Doe",
email="john.doe@example.com",
additional_attributes={
"department": "Engineering",
"title": "Software Developer",
"telephoneNumber": "+1-555-0123"
}
)
Logging Configuration
config = ADConfig(
server=your_server_config,
log_level="DEBUG", # DEBUG, INFO, WARNING, ERROR, CRITICAL
log_format="json" # "json" or "console"
)
Development
Setup
git clone https://github.com/your-org/ad-user-manager.git
cd ad-user-manager
pip install -e ".[dev]"
Running Tests
pytest
Code Quality
# Linting
ruff check .
# Formatting
black .
# Type checking
mypy .
Architecture
The project is organized into focused modules:
models.py- Data models and configuration schemaspowershell_manager.py- PowerShell-based AD operations (DC mode)ldap_manager.py- LDAP-based AD operations (remote mode)factory.py- Manager creation and auto-detectionconfig.py- Configuration managementvalidators.py- Input validation and conflict resolutionexceptions.py- Custom exception hierarchycli.py- Command-line interfaceutils.py- Utility functions
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite
- Submit a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For issues, feature requests, or questions:
- Check the GitHub Issues
- Create a new issue with detailed information
- Include configuration (without sensitive data) and error messages
Metadata
Release files for ad-user-manager 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ad_user_manager-1.0.0.tar.gz | 47.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ad_user_manager-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.9 kB
Release files / ad_user_manager-1.0.0.tar.gz
| Download URL | ad_user_manager-1.0.0.tar.gz |
|---|---|
| Size | 47.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f883b1e48295cabcf0a6ec49e9499821eb459638a9c743b84a3fdf39ddbcf7b
|
|
BLAKE2b-256 checksum How to use checksums |
ba610c40fd7b2832367f37b52bef9b9e71be3d6c449ab80cf512433c3c681d43
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/44.0 requests/2.32.4 requests-toolbelt/1.0.0 urllib3/2.4.0 tqdm/4.67.1 importlib-metadata/7.2.1 keyring/25.6.0 rfc3986/1.5.0 colorama/0.4.6 CPython/3.12.7
|
Release files / ad_user_manager-1.0.0-py3-none-any.whl
| Download URL | ad_user_manager-1.0.0-py3-none-any.whl |
|---|---|
| Size | 24.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26624ac8b44de960f146d621e4085d03bd1ac95e8f877c1342b578ae74a83f47
|
|
BLAKE2b-256 checksum How to use checksums |
9b2fbbd998141f4261241429555773ef5631502f3b1145079f001733537884d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/44.0 requests/2.32.4 requests-toolbelt/1.0.0 urllib3/2.4.0 tqdm/4.67.1 importlib-metadata/7.2.1 keyring/25.6.0 rfc3986/1.5.0 colorama/0.4.6 CPython/3.12.7
|