# V1.0 Begin

 *******************************************************************************************************

 Move Public Folder script from 2007/2010 to Exchange 2013 Script created by Ward Vissers

 www.wardvissers.nl

 

 THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK

 OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER

 

 

 Please Select the Choice You Want

 

 Prepare for Migration (Legacy Exchange Server

 01) Take a snapshot of the original source folder structure

 02) Take a snapshot of public folder statistics such as item count, size, and owner.

 03) Take a snapshot of the permissions

 04) Locate public folders that have a backslash in the name

 05) Rename Public Folder

 06) Checks the public folder migration status.

 07) Set PublicFolderMigrationComplete to False

 

 Check Exchange 2013

 08) Get-PublicFolderMigrationRequest

 09) Get-Mailbox -PublicFolder

 10) Get-PublicFolder

 

 Generate CSV Files and create Public Folder Mailboxes (Legacy Exchange Server)

 11) Export-PublicFolderStatistics PFSizeMap.csv

 12) PublicFolderToMailboxMapGenerator PFMailboxMap.csv

 

 Create the public folder mailboxes on the Exchange 2013 server

 13) Master Public Folder Name

 14) Create Public Folder Mailboxen (Check PFMailboxMap.csv)

 

 Migrating the Public Folders

 15) BadItemLimit (Exchange 2007 Only)

 16) Migrate Exchange 2010 public folders

 17) To verify that the migration started successfully (AutoSuspend is Compleet)

 

 Lock down the public folders on the legacy Exchange server for final migration (downtime required)

 18) Lock the legacy public folders for finalization

 

 Finalize the public folder migration (downtime required)

 19) Finalize the public folder migration (downtime required)

 

 Test and unlock the public folder migration

 20) Add Public Folder to Test User

 21) Unlock the public folders for all other users

 22) Public Folder Migration Complete (Legacy Exchange Server)

 23) Public Folders Enabled Local

 

 Final Check

 24) Take a snapshot of the original source folder structure.

 25) Take a snapshot of the public folder statistics such as item count, size, and owner

 26) Take a snapshot of the permissions

 

 99) Exit                                                        

 

JavaScript
Edit|Remove
# V1.0 Begin 
 
"*******************************************************************************************************" 
" Move Public Folder script from 2007/2010 to Exchange 2013 Script created by Ward Vissers" 
" www.wardvissers.nl" 
"" 
" THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK" 
" OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER " 
"" 
""                                           
" Please Select the Choice You Want" 
"" 
" Prepare for Migration (Legacy Exchange Server" 
" 01) Take a snapshot of the original source folder structure" 
" 02) Take a snapshot of public folder statistics such as item count, size, and owner." 
" 03) Take a snapshot of the permissions" 
" 04) Locate public folders that have a backslash in the name"  
" 05) Rename Public Folder" 
" 06) Checks the public folder migration status." 
" 07) Set PublicFolderMigrationComplete to False" 
"" 
" Check Exchange 2013" 
" 08) Get-PublicFolderMigrationRequest" 
" 09) Get-Mailbox -PublicFolder" 
" 10) Get-PublicFolder" 
"" 
" Generate CSV Files and create Public Folder Mailboxes (Legacy Exchange Server)" 
" 11) Export-PublicFolderStatistics PFSizeMap.csv" 
" 12) PublicFolderToMailboxMapGenerator PFMailboxMap.csv" 
"" 
" Create the public folder mailboxes on the Exchange 2013 server" 
" 13) Master Public Folder Name" 
" 14) Create Public Folder Mailboxen (Check PFMailboxMap.csv)" 
"" 
" Migrating the Public Folders" 
" 15) BadItemLimit (Exchange 2007 Only)" 
" 16) Migrate Exchange 2010 public folders" 
" 17) To verify that the migration started successfully (AutoSuspend is Compleet)" 
"" 
" Lock down the public folders on the legacy Exchange server for final migration (downtime required)"  
" 18) Lock the legacy public folders for finalization" 
"" 
" Finalize the public folder migration (downtime required)" 
" 19) Finalize the public folder migration (downtime required)"  
"" 
" Test and unlock the public folder migration" 
" 20) Add Public Folder to Test User" 
" 21) Unlock the public folders for all other users" 
" 22) Public Folder Migration Complete (Legacy Exchange Server)" 
" 23) Public Folders Enabled Local" 
"" 
" Final Check" 
" 24) Take a snapshot of the original source folder structure." 
" 25) Take a snapshot of the public folder statistics such as item count, size, and owner"  
" 26) Take a snapshot of the permissions" 
"" 
" 99) Exit"                                                          
""                                                             
"*******************************************************************************************************" 
$a=read-host 
IF ($a-eq 1{ 
# take a snapshot of the original source folder structure 
Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\Legacy_PFStructure.xml 
} 
ElseIf ($a-eq 2{ 
# take a snapshot of public folder statistics such as item count, size, and owner. 
Get-PublicFolderStatistics | Export-CliXML C:\PFMigration\Legacy_PFStatistics.xml 
} 
ElseIf ($a-eq 3)   
{ 
# take a snapshot of the permissions 
Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\PFMigration\Legacy_PFPerms.xml 
} 
ElseIf ($a-eq 4)  
{ 
$versie = Read-Host 'What is the Legacy Exchange Versie 2007 or 2010' 
 IF ($versie-eq 2010) 
 { 
 # Locate public folders that have a backslash in the name Exchange 2010 
 Get-PublicFolderStatistics -ResultSize Unlimited | Where {$_.Name -like "*\*"} | Format-List Name, Identity 
 } 
 IF ($versie-eq 2007) 
 { 
 # Locate public folders that have a backslash in the name Exchange 2007 
 Get-PublicFolderDatabase | ForEach {Get-PublicFolderStatistics -Server $_.Server | Where {$_.Name -like "*\*"}} 
 } 
} 
ElseIf ($a-eq 5)  
{ 
# rename public folder 
$publicold = Read-Host 'What is the Public Folder Name' 
$publicnew = Read-Host 'What is the new Public Folder Name' 
Set-PublicFolder -Identity $publicold -Name $publicnew 
} 
ElseIf ($a-eq 6)  
{ 
# Checks the public folder migration status 
Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete 
} 
ElseIf ($a-eq 7)   
{ 
#If the status of the PublicFoldersLockedforMigration or PublicFolderMigrationComplete properties is $true, run the following command to set the value to $false. 
Set-OrganizationConfig -PublicFoldersLockedforMigration:$false -PublicFolderMigrationComplete:$false  
} 
ElseIf ($a-eq 8)  
{ 
Get-PublicFolderMigrationRequest 
} 
ElseIf ($a-eq 9)  
{ 
Get-Mailbox -PublicFolder 
} 
ElseIf ($a-eq 10)  
{ 
Get-PublicFolder 
} 
ElseIf ($a-eq 11)  
{ 
# 
$servername = Read-Host 'What is the Legacy Public Folder Exchange Server?' 
.\Export-PublicFolderStatistics.ps1 C:\PFMigration\PFSizeMap.csv $servername 
} 
ElseIf ($a-eq 12)  
{ 
# PublicFolderToMailboxMapGenerator PFMailboxMap 
.\PublicFolderToMailboxMapGenerator.ps1 10GB C:\PFMigration\PFSizeMap.csv C:\PFMigration\PFMailboxMap.csv 
} 
ElseIf ($a-eq 13)  
{ 
# Master Public Folder Name 
$publicmaster = Read-Host 'What is the Master Public Folder Name?' 
New-Mailbox -PublicFolder $publicmaster -HoldForMigration:$true 
} 
ElseIf ($a-eq 14)  
{ 
#  
$numberOfMailboxes = Read-Host 'What is the number of Mailboxen?' 
for($index =1 ; $index -le $numberOfMailboxes ; $index++) 
 { 
    $PFMailboxName = "Mailbox"+$index;  if($index -eq 1{New-Mailbox -PublicFolder $PFMailboxName -HoldForMigration:$true -IsExcludedFromServingHierarchy:$true;}else{New-Mailbox -PublicFolder $PFMailboxName -IsExcludedFromServingHierarchy:$true} 
 } 
} 
ElseIf ($a-eq 15{ 
# Exchange 2007 
$PublicFolderDatabasesInOrg = @(Get-PublicFolderDatabase) 
$BadItemLimitCount = 5 + ($PublicFolderDatabasesInOrg.Count -1} 
ElseIf ($a-eq 16{ 
# Migrate Exchange 2010 public folders 
$servername = Read-Host 'What is the Legacy Public Folder Exchange Server?' 
New-PublicFolderMigrationRequest -SourceDatabase (Get-PublicFolderDatabase -Server $servername) -CSVData (Get-Content C:\PFMigration\PFMailboxMap.csv -Encoding Byte) 
} 
ElseIf ($a-eq 17)  
{ 
# To verify that the migration started successfully 
Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics -IncludeReport | Format-List 
} 
ElseIf ($a-eq 18{ 
# Lock the legacy public folders for finalization 
Set-OrganizationConfig -PublicFoldersLockedForMigration:$true 
} 
ElseIf ($a-eq 19{ 
#  Finalize the public folder migration (downtime required) 
Set-PublicFolderMigrationRequest -Identity \PublicFolderMigration -PreventCompletion:$false 
Resume-PublicFolderMigrationRequest -Identity \PublicFolderMigration 
} 
ElseIf ($a-eq 20{ 
# Test User to Public Folder 
$username= Read-Host 'What is the User name?' 
$publicfoldermailbox= Read-Host 'What is the Public Folder Mailbox Name?' 
Set-Mailbox -Identity $username -DefaultPublicFolderMailbox $publicfoldermailbox 
} 
ElseIf ($a-eq 21{ 
# unlock the public folders for all other users. 
Get-Mailbox -PublicFolder | Set-Mailbox -PublicFolder -IsExcludedFromServingHierarchy $false 
} 
ElseIf ($a-eq 22{ 
# PublicFolderMigrationComplete 
Set-OrganizationConfig -PublicFolderMigrationComplete:$true 
} 
ElseIf ($a-eq 23{ 
# Set-OrganizationConfig -PublicFoldersEnabled Local 
Set-OrganizationConfig -PublicFoldersEnabled Local 
} 
ElseIf ($a-eq 24{ 
#  
Get-PublicFolder -Recurse | Export-CliXML C:\PFMigration\New_PFStructure.xml 
} 
ElseIf ($a-eq 25{ 
# 
Get-PublicFolderStatistics | Export-CliXML C:\PFMigration\New_PFStatistics.xml 
} 
ElseIf ($a-eq 26{ 
#  
Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:\PFMigration\New_PFPerms.xml 
} 
ElseIf ($a-eq 99{exit}