|
| 1 | +# Get-MigrationWizLicensing |
| 2 | + |
| 3 | +## Overview |
| 4 | +Calculates BitTitan MigrationWiz license requirements and costs based on Microsoft 365 assessment data. The script analyzes user mailboxes, shared mailboxes, Teams sites, SharePoint libraries, OneDrive sites, and public folders to provide accurate license recommendations and cost estimates. |
| 5 | + |
| 6 | +## Features |
| 7 | +- **Smart License Selection**: Automatically chooses the most cost-effective license tier based on migration scope |
| 8 | +- **Data-Driven Filtering**: Only licenses resources that contain actual data to migrate |
| 9 | +- **Tiered Pricing**: Applies correct pricing tiers based on data size (e.g., 50GB vs 100GB SharePoint libraries) |
| 10 | +- **Teams Site Detection**: Identifies genuine Teams sites with data vs empty M365 Group sites |
| 11 | +- **Shared Mailbox Separation**: Distinguishes between user and shared mailboxes for accurate licensing |
| 12 | +- **Professional Reports**: Generates formatted text reports with tables and cost breakdowns |
| 13 | +- **Flexible Bundles**: Supports Mailbox ($14), User Migration Bundle ($17.50), and Tenant Migration Bundle ($57) |
| 14 | + |
| 15 | +## Prerequisites |
| 16 | +- **PowerShell**: 5.1 or later |
| 17 | +- **ImportExcel Module**: Auto-installs if missing |
| 18 | +- **Assessment Excel File**: Output from Get-QuickO365Report.ps1 or Get-ComprehensiveO365Report.ps1 |
| 19 | + |
| 20 | +### Required Excel Worksheets |
| 21 | +The script expects an Excel file with these worksheets: |
| 22 | +- **Mailboxes**: User and shared mailbox data with `MailboxType` and `TotalSizeGB` columns |
| 23 | +- **OneDrive** (optional): OneDrive site data |
| 24 | +- **Teams Sites** (optional): Teams data with `HasTeamsIntegration` and `StorageUsedGB` columns |
| 25 | +- **SharePoint** (optional): SharePoint site data with `UsedGB` and `Template` columns |
| 26 | +- **Public Folders** (optional): Public folder data with size information |
| 27 | + |
| 28 | +## Parameters |
| 29 | + |
| 30 | +### Required Parameters |
| 31 | + |
| 32 | +#### `-InputExcelFile` |
| 33 | +- **Type**: String |
| 34 | +- **Description**: Path to the Microsoft 365 assessment Excel file |
| 35 | +- **Validation**: File must exist |
| 36 | +- **Example**: `"C:\Assessments\Contoso_Assessment.xlsx"` |
| 37 | + |
| 38 | +### Optional Parameters |
| 39 | + |
| 40 | +#### `-OutputDirectory` |
| 41 | +- **Type**: String |
| 42 | +- **Default**: `C:\Temp\MigrationWiz` |
| 43 | +- **Description**: Directory where license calculation reports will be saved |
| 44 | + |
| 45 | +#### `-OrganizationName` |
| 46 | +- **Type**: String |
| 47 | +- **Default**: `"Organization"` |
| 48 | +- **Description**: Organization name displayed in the report header |
| 49 | + |
| 50 | +#### `-IncludeArchives` |
| 51 | +- **Type**: Switch |
| 52 | +- **Description**: Include archive mailboxes in calculations (requires User Migration Bundle) |
| 53 | + |
| 54 | +#### `-IncludeTeams` |
| 55 | +- **Type**: Switch |
| 56 | +- **Description**: Include Microsoft Teams sites in calculations |
| 57 | + |
| 58 | +#### `-IncludeSharePoint` |
| 59 | +- **Type**: Switch |
| 60 | +- **Description**: Include SharePoint document libraries in calculations |
| 61 | + |
| 62 | +#### `-IncludePublicFolders` |
| 63 | +- **Type**: Switch |
| 64 | +- **Description**: Include public folders in calculations |
| 65 | + |
| 66 | +#### `-UseUserMigrationBundle` |
| 67 | +- **Type**: Switch |
| 68 | +- **Description**: Use User Migration Bundle ($17.50) instead of basic Mailbox license ($14) |
| 69 | +- **Recommended**: For mailboxes >50GB or when OneDrive migration is needed |
| 70 | + |
| 71 | +#### `-UseTenantMigrationBundle` |
| 72 | +- **Type**: Switch |
| 73 | +- **Description**: Use Tenant Migration Bundle ($57) for comprehensive migrations |
| 74 | +- **Includes**: Mailbox + OneDrive + Archives + Teams/SharePoint (100GB) |
| 75 | + |
| 76 | +## Usage Examples |
| 77 | + |
| 78 | +### Example 1: Basic Mailbox-Only Migration |
| 79 | +```powershell |
| 80 | +.\Get-MigrationWizLicensing.ps1 -InputExcelFile "C:\Assessments\Contoso_Assessment.xlsx" |
| 81 | +``` |
| 82 | +Calculates licensing for mailboxes only using the basic $14/user pricing. |
| 83 | + |
| 84 | +### Example 2: User Migration Bundle with Organization Name |
| 85 | +```powershell |
| 86 | +.\Get-MigrationWizLicensing.ps1 ` |
| 87 | + -InputExcelFile "C:\Assessments\Contoso_Assessment.xlsx" ` |
| 88 | + -UseUserMigrationBundle ` |
| 89 | + -OrganizationName "Contoso Corporation" |
| 90 | +``` |
| 91 | +Uses User Migration Bundle ($17.50) for unlimited mailbox data and includes OneDrive. |
| 92 | + |
| 93 | +### Example 3: Full Migration with Teams and SharePoint |
| 94 | +```powershell |
| 95 | +.\Get-MigrationWizLicensing.ps1 ` |
| 96 | + -InputExcelFile "C:\Assessments\Assessment.xlsx" ` |
| 97 | + -UseUserMigrationBundle ` |
| 98 | + -IncludeTeams ` |
| 99 | + -IncludeSharePoint ` |
| 100 | + -OrganizationName "Fabrikam Inc" |
| 101 | +``` |
| 102 | +Comprehensive migration including Teams sites and SharePoint libraries. |
| 103 | + |
| 104 | +### Example 4: Complete Tenant Migration |
| 105 | +```powershell |
| 106 | +.\Get-MigrationWizLicensing.ps1 ` |
| 107 | + -InputExcelFile "C:\Assessments\Assessment.xlsx" ` |
| 108 | + -UseTenantMigrationBundle ` |
| 109 | + -IncludeTeams ` |
| 110 | + -IncludeSharePoint ` |
| 111 | + -IncludeArchives ` |
| 112 | + -IncludePublicFolders ` |
| 113 | + -OutputDirectory "D:\Reports" |
| 114 | +``` |
| 115 | +Full tenant migration with all workloads using Tenant Migration Bundle. |
| 116 | + |
| 117 | +### Example 5: Custom Output Location |
| 118 | +```powershell |
| 119 | +.\Get-MigrationWizLicensing.ps1 ` |
| 120 | + -InputExcelFile "C:\Assessments\Assessment.xlsx" ` |
| 121 | + -UseUserMigrationBundle ` |
| 122 | + -IncludeTeams ` |
| 123 | + -OutputDirectory "C:\Reports\Licensing" |
| 124 | +``` |
| 125 | +Saves report to custom directory location. |
| 126 | + |
| 127 | +## Output |
| 128 | + |
| 129 | +### Report File Naming |
| 130 | +Pattern: `MigrationWiz_Licensing_{OrganizationName}_{YYYYMMDD_HHmmss}.txt` |
| 131 | + |
| 132 | +Example: `MigrationWiz_Licensing_Contoso_20251223_161143.txt` |
| 133 | + |
| 134 | +### Report Sections |
| 135 | + |
| 136 | +#### 1. Migration Scope |
| 137 | +Summary of discovered resources: |
| 138 | +``` |
| 139 | +User Mailboxes: 69 |
| 140 | +Shared Mailboxes: 39 |
| 141 | +OneDrive Sites: 69 |
| 142 | +Teams Sites: 15 total |
| 143 | + (Licensed): 1 with data & Teams integration |
| 144 | +SharePoint Sites: 20 total |
| 145 | + (M365 Groups): 15 (potential Teams sites) |
| 146 | + (Licensed): 4 with data |
| 147 | +``` |
| 148 | + |
| 149 | +#### 2. License Requirements Table |
| 150 | +Professional table showing license breakdown: |
| 151 | +``` |
| 152 | +┌────────────────────────────────┬──────────┬─────────────┬──────────────┬──────────────┐ |
| 153 | +│ License Type │ Quantity │ Unit │ Price/Unit │ Subtotal │ |
| 154 | +├────────────────────────────────┼──────────┼─────────────┼──────────────┼──────────────┤ |
| 155 | +│ User Migration Bundle │ 69 │ user │ $17.5 │ $1207.5 │ |
| 156 | +│ Teams Collaboration │ 1 │ team │ $48 │ $48 │ |
| 157 | +│ Shared Documents (50GB) │ 4 │ library │ $25 │ $100 │ |
| 158 | +│ Mailbox (Shared) │ 39 │ shared mail │ $14 │ $546 │ |
| 159 | +├────────────────────────────────┴──────────┴─────────────┴──────────────┼──────────────┤ |
| 160 | +│ TOTAL ESTIMATED COST │ $ 1,901.50│ |
| 161 | +└────────────────────────────────────────────────────────────────────────┴──────────────┘ |
| 162 | +``` |
| 163 | + |
| 164 | +#### 3. License Notes |
| 165 | +Details about each license type's features and limitations. |
| 166 | + |
| 167 | +#### 4. General Notes |
| 168 | +- Pricing effective date |
| 169 | +- Volume discount availability |
| 170 | +- Educational/non-profit discounts |
| 171 | +- PowerSyncPro requirements |
| 172 | + |
| 173 | +#### 5. Recommendations |
| 174 | +Context-aware suggestions based on migration scope. |
| 175 | + |
| 176 | +## Licensing Logic |
| 177 | + |
| 178 | +### Mailbox Licensing |
| 179 | +- **User Mailboxes**: Excludes mailboxes with 0 GB data |
| 180 | +- **Shared Mailboxes**: Always use basic Mailbox license ($14) |
| 181 | +- **Bundle Selection**: |
| 182 | + - Basic Mailbox ($14): Up to 50GB per mailbox |
| 183 | + - User Migration Bundle ($17.50): Unlimited data, includes OneDrive |
| 184 | + - Tenant Migration Bundle ($57): Includes Teams/SharePoint |
| 185 | + |
| 186 | +### Teams Site Licensing |
| 187 | +Only licenses Teams sites that meet **BOTH** criteria: |
| 188 | +1. `HasTeamsIntegration = True` (actual Teams site, not just M365 Group) |
| 189 | +2. `StorageUsedGB > 0` (contains data to migrate) |
| 190 | + |
| 191 | +### SharePoint Licensing |
| 192 | +- **50GB Tier ($25)**: Libraries with ≤50GB data |
| 193 | +- **100GB Tier ($48)**: Libraries with >50GB data |
| 194 | +- **Filtering**: Only licenses libraries with data (UsedGB > 0) |
| 195 | +- **Detection**: Identifies M365 Group sites (GROUP#0 template) |
| 196 | + |
| 197 | +### Public Folder Licensing |
| 198 | +Priced at $114 per 10GB block (rounded up). |
| 199 | + |
| 200 | +## Cost Optimization |
| 201 | + |
| 202 | +The script automatically optimizes costs by: |
| 203 | + |
| 204 | +1. **Excluding Empty Resources** |
| 205 | + - Mailboxes with 0 GB data |
| 206 | + - Teams sites without data or Teams integration |
| 207 | + - SharePoint libraries with no content |
| 208 | + |
| 209 | +2. **Tiered Pricing** |
| 210 | + - Uses $25 license for SharePoint libraries under 50GB |
| 211 | + - Uses $48 license only for libraries over 50GB |
| 212 | + |
| 213 | +3. **Smart Bundle Selection** |
| 214 | + - Recommends User Migration Bundle when OneDrive detected |
| 215 | + - Suggests Tenant Migration Bundle for Teams migrations |
| 216 | + |
| 217 | +4. **Shared Mailbox Separation** |
| 218 | + - Licenses shared mailboxes separately at basic $14 rate |
| 219 | + - Doesn't apply expensive bundles to shared mailboxes |
| 220 | + |
| 221 | +## Common Issues & Troubleshooting |
| 222 | + |
| 223 | +### Issue: ImportExcel Module Not Found |
| 224 | +**Error**: `ImportExcel module not installed` |
| 225 | + |
| 226 | +**Solution**: The script auto-installs the module. If this fails: |
| 227 | +```powershell |
| 228 | +Install-Module ImportExcel -Scope CurrentUser -Force |
| 229 | +``` |
| 230 | + |
| 231 | +### Issue: Worksheet Not Found |
| 232 | +**Error**: `Worksheet 'Users' not found` |
| 233 | + |
| 234 | +**Solution**: Ensure the Excel file is from Get-QuickO365Report.ps1 or contains the expected worksheet names: |
| 235 | +- "Mailboxes" (not "Users") |
| 236 | +- "Teams Sites" (not "Teams") |
| 237 | +- "SharePoint" |
| 238 | + |
| 239 | +### Issue: No Teams Sites Licensed |
| 240 | +**Symptom**: Report shows "0 with data & Teams integration" |
| 241 | + |
| 242 | +**Cause**: Teams sites either lack data or don't have Teams integration enabled |
| 243 | + |
| 244 | +**Verification**: Check the "Teams Sites" worksheet for: |
| 245 | +- `HasTeamsIntegration` column = True |
| 246 | +- `StorageUsedGB` column > 0 |
| 247 | + |
| 248 | +### Issue: All SharePoint Libraries Show 0 Data |
| 249 | +**Symptom**: "(Licensed): 0 with data" |
| 250 | + |
| 251 | +**Cause**: Column name mismatch or all libraries are empty |
| 252 | + |
| 253 | +**Solution**: Verify SharePoint worksheet has `UsedGB` column with numeric values |
| 254 | + |
| 255 | +### Issue: Higher Cost Than Expected |
| 256 | +**Symptom**: Total cost seems high |
| 257 | + |
| 258 | +**Analysis Steps**: |
| 259 | +1. Check if empty resources are being excluded (look for "Excluded" messages) |
| 260 | +2. Verify correct bundle is selected (User vs Tenant) |
| 261 | +3. Review SharePoint tier distribution (50GB vs 100GB) |
| 262 | +4. Confirm Teams filtering is working (Teams integration + data) |
| 263 | + |
| 264 | +## Pricing Reference |
| 265 | + |
| 266 | +Current pricing as of 2025-12-23: |
| 267 | + |
| 268 | +| License Type | Price | Notes | |
| 269 | +|---|---|---| |
| 270 | +| Mailbox | $14/user | Up to 50GB per mailbox | |
| 271 | +| User Migration Bundle | $17.50/user | Unlimited mailbox + OneDrive + archives | |
| 272 | +| Tenant Migration Bundle | $57/user | Full tenant including Teams/SharePoint (100GB) | |
| 273 | +| Teams Collaboration | $48/team | Up to 100GB per team | |
| 274 | +| Shared Documents (50GB) | $25/library | Up to 50GB per library | |
| 275 | +| Shared Documents (100GB) | $48/library | Up to 100GB per library | |
| 276 | +| Public Folders | $114/10GB | Per 10GB block | |
| 277 | +| AD/Entra ID SMB | $6.25/user | ≤1000 users, 12 months | |
| 278 | +| AD/Entra ID Enterprise | $8/user | 12 months | |
| 279 | +| Migration Agent | $13.50/device | 12 months validity | |
| 280 | + |
| 281 | +**Note**: Volume discounts and educational/non-profit pricing available through BitTitan sales. |
| 282 | + |
| 283 | +## Performance Notes |
| 284 | + |
| 285 | +- **Excel Reading**: Uses ImportExcel module for efficient data import |
| 286 | +- **Memory Usage**: Processes large datasets in memory; tested with 1000+ mailboxes |
| 287 | +- **Execution Time**: Typically completes in 5-15 seconds depending on Excel file size |
| 288 | +- **Output Size**: Text reports are typically 2-5 KB |
| 289 | + |
| 290 | +## Integration with Assessment Scripts |
| 291 | + |
| 292 | +This script works seamlessly with: |
| 293 | + |
| 294 | +### Get-QuickO365Report.ps1 |
| 295 | +```powershell |
| 296 | +# Run assessment |
| 297 | +.\Get-QuickO365Report.ps1 -OutputPath "C:\Assessments" |
| 298 | +
|
| 299 | +# Calculate licensing |
| 300 | +.\Get-MigrationWizLicensing.ps1 ` |
| 301 | + -InputExcelFile "C:\Assessments\O365_Assessment_20251223_134603.xlsx" ` |
| 302 | + -UseUserMigrationBundle ` |
| 303 | + -IncludeTeams ` |
| 304 | + -IncludeSharePoint |
| 305 | +``` |
| 306 | + |
| 307 | +### Get-ComprehensiveO365Report.ps1 |
| 308 | +Compatible with comprehensive assessment output as long as worksheet names match. |
| 309 | + |
| 310 | +## Related Scripts |
| 311 | +- [Get-QuickO365Report](Get-QuickO365Report.md) - Quick O365 tenant assessment |
| 312 | +- [Get-MailboxPermissionsReport](Get-MailboxPermissionsReport.md) - Mailbox delegation analysis |
| 313 | +- [Get-MailboxRules](Get-MailboxRules.md) - Mailbox rule auditing |
| 314 | + |
| 315 | +## Version History |
| 316 | +- **v1.2** (2025-12-23): Added Teams site filtering, SharePoint tier pricing, empty mailbox exclusion, M365 Group detection, table format output |
| 317 | +- **v1.1** (2025-12-23): Added shared mailbox distinction, SharePoint data filtering |
| 318 | +- **v1.0** (2025-12-23): Initial release - Core functionality |
| 319 | + |
| 320 | +## Additional Resources |
| 321 | +- [BitTitan MigrationWiz Pricing](https://www.bittitan.com/pricing-bittitan-migrationwiz/) |
| 322 | +- [BitTitan Sales Contact](https://www.bittitan.com/contactsales/) |
| 323 | +- [BitTitan Store](https://store.bittitan.com/) |
| 324 | + |
| 325 | +## See Also |
| 326 | +- [Microsoft 365 Migration Best Practices](https://docs.microsoft.com/microsoft-365/enterprise/microsoft-365-migration-best-practices) |
| 327 | +- [BitTitan MigrationWiz Documentation](https://www.bittitan.com/migrationwiz/) |
0 commit comments