-
Notifications
You must be signed in to change notification settings - Fork 0
Get ComprehensiveLyncReport
Generates a comprehensive text-based assessment report of a Lync/Skype for Business environment. This enterprise-grade reporting tool provides administrators with a complete overview of pool architecture, certificate health, user distribution, system configuration, database mirror status, and infrastructure recommendations.
- Executive Summary: High-level environment overview with key metrics
- Pool Architecture Analysis: Categorizes pools by type (Standard, SBA, IVR, Edge)
- Certificate Health Monitoring: Expiration tracking and validity assessment
- User Distribution Analytics: Users by pool, site, and voice enablement
- Database Mirror State: SQL mirroring health and failover readiness
- System Configuration Review: Policies, conferencing, and voice config
- Infrastructure Health Summary: Service status and operational metrics
- Recommendations Engine: Actionable insights for optimization
- Customizable Patterns: Flexible pool identification for various deployments
- PowerShell Version: 3.0 or higher
- Required Environment: Lync/Skype for Business Management Shell
-
Required Permissions:
- Lync Administrator or CsAdministrator role
- Read access to Lync database and configuration
- Certificate store read permissions
- Network Requirements: Access to all Lync Front End servers and pools
-
PoolFQDN: Primary Lync pool FQDN
- Type: String
- Validation: Must not be null or empty
- Description: FQDN of the primary pool for database mirror analysis
- Example:
"lyncpool.contoso.com"
-
ReportPath: Output file path
- Type: String
- Default:
"C:\Reports\Organization_Lync_Comprehensive_{timestamp}.txt" - Description: Full path where report will be saved
-
OrganizationName: Organization name
- Type: String
- Default:
"Organization" - Description: Organization name for report headers
-
SBAPattern: SBA pool identification pattern
- Type: String
- Default:
"*MSSBA*" - Description: Wildcard pattern to identify Survivable Branch Appliance pools
-
IVRPattern: IVR pool identification pattern
- Type: String
- Default:
"*ivr*" - Description: Pattern to identify IVR (Interactive Voice Response) pools
-
EdgePattern: Edge server pool pattern
- Type: String
- Default:
"*edge*" - Description: Pattern to identify Edge server pools
-
LyncPattern: Standard Lync pool pattern
- Type: String
- Default:
"*lync*" - Description: Pattern to identify standard Lync pools
-
RecentModifiedDays: Recent modification timeframe
- Type: Integer
- Default:
30 - Description: Number of days to look back for recently modified users
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "lyncpool.contoso.com"Generates a comprehensive report using default settings and patterns.
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "lyncpool.contoso.com" -OrganizationName "Contoso Corp" -ReportPath "D:\Reports\Contoso_Lync_Report.txt"Creates a report with custom organization name and saves to specified location.
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "teamspool.contoso.com" -SBAPattern "*Branch*" -LyncPattern "*teams*" -RecentModifiedDays 60Uses custom patterns for Teams-branded deployment with extended modification timeframe.
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "eastpool.contoso.com" -EdgePattern "*dmz*" -IVRPattern "*voicemail*"Analyzes environment with custom Edge and IVR identification patterns.
- Total pools and deployment architecture
- Total users and voice enablement statistics
- Certificate expiration warnings
- Database mirror state summary
- Key recommendations for immediate attention
- Standard Lync Pools: Core communication servers
- Survivable Branch Appliances: Branch office resilience
- IVR Pools: Voice response systems
- Edge Servers: External access and federation
- Unclassified Pools: Pools not matching defined patterns
For each pool type:
- Identity (FQDN)
- Services (Registrar, Web Services, etc.)
- Computer count and distribution
- Site assignment
- Certificate thumbprint and subject
- Issuer information
- Expiration date with days remaining
- Status indicators:
β οΈ Critical: Expires within 30 daysβ οΈ Warning: Expires within 90 days- β OK: Valid for more than 90 days
- Total Lync-enabled users
- Users by registrar pool
- Users by site/location
- Enterprise Voice enabled users
- HostedVoiceMail enabled users
- Recently modified users (within specified days)
For the specified primary pool:
- Mirror database identity
- State machine state (Synchronized, Principal, Mirror)
- Synchronized status
- Failover readiness indicators
- Voice Policies: Count and configuration overview
- Conferencing Policies: Meeting and collaboration settings
- Client Policies: User experience policies
- Topology Sites: Geographic distribution
- Conference Directories: Conferencing infrastructure
- Overall health status indicators
- Service availability metrics
- Configuration compliance status
- Performance indicators
Categorized recommendations for:
- Certificate renewals needed
- Pool upgrades or migrations
- User distribution optimization
- Database failover testing
- Policy consolidation opportunities
- Security enhancements
Default: C:\Reports\
The script creates this directory automatically if it doesn't exist.
Pattern: {OrganizationName}_Lync_Comprehensive_{YYYYMMDD_HHmmss}.txt
Example: Contoso_Lync_Comprehensive_20251223_143052.txt
Real-time progress indicators:
- Section generation status
- Data collection progress
- Error or warning notifications
- Final report location
Error: "Cannot validate argument on parameter 'PoolFQDN'"
Solution: Ensure you provide a valid pool FQDN:
# Get available pools first
Get-CsPool | Select-Object Identity
# Then run with correct FQDN
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "pool01.contoso.com"Error: Report shows "No database mirror state information available"
Solution: This occurs if:
- Pool doesn't use SQL mirroring (verify with
Get-CsDatabaseMirrorState) - Incorrect PoolFQDN specified
- Insufficient permissions to query SQL state
Verify mirroring:
Get-CsDatabaseMirrorState -PoolFqdn "lyncpool.contoso.com"Solution: Script needs access to certificate stores. Run as administrator:
# Right-click Lync Management Shell β Run as Administrator
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "lyncpool.contoso.com"Solution: Ensure your account has:
- CsAdministrator role assignment
- Read access to Lync configuration store
- Permissions to query all pools
Grant permissions:
# Admin runs this
Grant-CsAdministratorRole -Identity "DOMAIN\Username" -Role CsServerAdministratorSolution: Adjust the SBAPattern parameter to match your naming convention:
# If your SBAs are named like "branch-sba01.contoso.com"
.\Get-ComprehensiveLyncReport.ps1 -PoolFQDN "pool.contoso.com" -SBAPattern "*branch-sba*"
# List all pools to identify naming patterns
Get-CsPool | Select-Object Identity | Format-Table -AutoSizeSolution: For very large environments (>50,000 users):
- Run during off-peak hours
- Consider generating separate reports per pool
- Increase PowerShell memory if needed:
# Increase memory limit [System.GC]::Collect()
Solution: Verify cmdlet access:
# Test user cmdlet
Get-CsUser -ResultSize 1
# If fails, import module explicitly
Import-Module LyncGenerate comprehensive report quarterly for:
- Executive stakeholder updates
- Capacity planning reviews
- Security compliance audits
- Budget planning for renewals
Before Teams migration:
- Document current pool architecture
- Identify certificate renewal needs
- Assess user distribution for phased migration
- Capture voice configuration for Teams mapping
- Archive complete Lync state
Monthly certificate monitoring:
- Run report and review certificate section
- Plan renewals for 30-90 day warnings
- Coordinate with security team
- Document certificate inventory
For DR documentation:
- Document mirror states and failover readiness
- Capture pool dependencies
- Identify critical SBA locations
- Map user distribution for recovery prioritization
For compliance requirements:
- Document infrastructure configuration
- Capture policy assignments
- Track user enablement status
- Provide evidence of system health monitoring
After major changes:
- Generate report before changes
- Perform upgrade or configuration change
- Generate report after changes
- Compare reports to verify changes
- β OK (>90 days): No action needed
-
β οΈ Warning (30-90 days): Plan renewal - π΄ Critical (<30 days): Immediate action required
- β Expired: System at risk
- Synchronized: Healthy, data replicated
- Principal: Active database (normal)
- Mirror: Standby database (normal)
- Disconnected: Requires immediate attention
- Synchronizing: May be normal during recovery
- Service Count: Should match expected services per pool type
- Computer Count: Verify matches deployment
- User Count: Check for imbalanced distribution
- Critical: Immediate action required (expired certs, failed mirrors)
- High: Action needed within 30 days
- Medium: Action needed within 90 days
- Low: Optimization opportunities
- Start-LyncCsvExporter.ps1 - CSV exports for data analysis
- Get-LyncHealthReport.ps1 - Focused health diagnostics
- Get-LyncInfrastructureReport.ps1 - Infrastructure deep dive
- Get-LyncUserRegistrationReport.ps1 - User registration details
-
v2.0 (2025-09-17): Enhanced comprehensive reporting
- Added executive summary section
- Improved pool categorization
- Enhanced certificate analysis
- Added recommendations engine
- Improved error handling
- Updated documentation
-
v1.0 (2024): Initial release
- Basic reporting functionality
- Pool and user analysis
- Overview
- Start-LyncCsvExporter
- Get-ComprehensiveLyncReport
- Get-LyncHealthReport
- Get-LyncInfrastructureReport
- Get-LyncServiceStatus
- Get-LyncUserRegistrationReport
- Export-ADLyncTeamsMigrationData
- New-Office365Accounts
- Sync-ContactsFromCsv
- Set-EmailToSharedAccount
- Set-SMTPForward
- Invoke-UserSignOutAndBlock
- Security Assessment Scripts (coming soon)
- Azure Automation (documentation pending)
- Get-GraphToken
- Get-GraphHeaders
- Get-AzureResourcePaging
- Get-EnterpriseAppUsage
- Get-ExchangeErrorsGraph
- Get-PBIWorkspaceUsageReport
- Intune Management (documentation pending)