Skip to content

Commit de01778

Browse files
committed
Add Get-MigrationWizLicensing script and update documentation links
1 parent 6353072 commit de01778

4 files changed

Lines changed: 356 additions & 0 deletions

File tree

Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
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/)

docs/wiki/_Sidebar.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
- [Get-QuickO365Report](Assessments-Microsoft365-Get-QuickO365Report)
2424
- [Get-MailboxPermissionsReport](Assessments-Microsoft365-Get-MailboxPermissionsReport)
2525
- [Get-MailboxRules](Assessments-Microsoft365-Get-MailboxRules)
26+
- [Get-MigrationWizLicensing](Assessments-Microsoft365-Get-MigrationWizLicensing)
2627

2728
### Teams
2829
- Teams Assessment Scripts _(coming soon)_

docs/wiki/home.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Office 365 tenant assessment and reporting tools:
2323
- **[Get-QuickO365Report](Assessments-Microsoft365-Get-QuickO365Report)** - Complete O365 assessment with Excel output
2424
- **[Get-MailboxPermissionsReport](Assessments-Microsoft365-Get-MailboxPermissionsReport)** - Mailbox delegation and permissions audit
2525
- **[Get-MailboxRules](Assessments-Microsoft365-Get-MailboxRules)** - Export mailbox rules (forwarding, redirects, auto-replies)
26+
- **[Get-MigrationWizLicensing](Assessments-Microsoft365-Get-MigrationWizLicensing)** - BitTitan MigrationWiz license calculator
2627

2728
### 🔧 Development Resources
2829
- **Code Standards** - PowerShell coding standards and best practices _(coming soon)_

scripts/Assessment/Microsoft365/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,33 @@ Generates a comprehensive snapshot report of Office 365/Microsoft 365 tenant con
5656

5757
---
5858

59+
### [Get-MigrationWizLicensing.ps1](../../docs/wiki/Assessments-Microsoft365-Get-MigrationWizLicensing.md)
60+
Calculates BitTitan MigrationWiz license requirements and costs based on Microsoft 365 assessment data.
61+
62+
**Quick Start:**
63+
```powershell
64+
.\Get-MigrationWizLicensing.ps1 `
65+
-InputExcelFile "C:\Assessments\O365_Assessment.xlsx" `
66+
-UseUserMigrationBundle `
67+
-IncludeTeams `
68+
-IncludeSharePoint
69+
```
70+
71+
**Use Cases:**
72+
- Pre-migration cost estimation
73+
- License optimization and cost savings
74+
- Migration planning and budgeting
75+
- Accurate resource scoping
76+
77+
**Features:**
78+
- Smart filtering (excludes empty mailboxes, Teams sites, SharePoint libraries)
79+
- Tiered SharePoint pricing (50GB vs 100GB)
80+
- Shared vs user mailbox separation
81+
- Teams site data validation
82+
- Professional cost breakdown reports
83+
84+
---
85+
5986
## 🚀 Prerequisites
6087

6188
### PowerShell Requirements

0 commit comments

Comments
 (0)