Huge update Sept 30, 2015: Start-SqlMigration is now part of a PowerShell module called dbatools. dbatools offers a number of functions for DBAs. Start-SqlMigration, one of the included functions, migrates databases, logins, job server, credentials, linked servers, server triggers, backup devices, Central Management Server, server configurations, database mail and user objects in system databases.

SMO, which is installed with SQL Server and SQL Server Management Studio, is required. 

To install dbatools module: 

Invoke-Expression (Invoke-WebRequest https://git.io/vn1hQ)

dbatools0801

 

Start-SqlMigration is like an "easy button" that combines the following functions Copy-SqlCentralManagementServer, Copy-SqlCredential, Copy-SqlDatabase, Copy-SqlDatabaseMail, Copy-SqlJobServer, Copy-SqlLinkedServer, Copy-SqlLogin, Copy-SqlSysDbUserObjects, and Import-SqlSpConfigure. This helps you migrate your entire instance all at once. If you need more granular control, simply run each command individually. More documentation coming soon, please see dbatools.io for more info.

By default, databases will be migrated to the destination SQL Server's default data and log directories. You can override this by specifying -ReuseFolderStructure. Filestreams and filegroups are also migrated. Safety is emphasized.

Basic Usage Examples

Start-SqlMigration -Source sqlserver\instance -Destination sqlcluster -DetachAttach -Reattach -SetSourceReadOnly

All databases, logins, job server, credentials, linked servers, Central Management Server, server configurations, database mail and user objects in system databases will be migrated from sqlserver\instance to sqlcluster. Databases will be migrated using the detach/copy files/attach method and administrative shares must be accessible. User passwords, SIDs, database and server permissions sets, database roles and server roles will be migrated along with the login. DBOwner will be updated. The detached databases will be reattached at the souce and set to read-only. 


$scred = Get-Credential
$dcred = Get-Credential
Start-SqlMigration -Source sqlserver\instance -Destination sqlcluster -BackupRestore -NetworkShare \\server\share\sql -SkipDatabaseMail -SourceSqlCredential $scred -DestinationSqlCredential $dcred

All databases, logins, job server, credentials, linked servers, Central Management Server, server configurations, and user objects in system databases will be migrated from sqlserver\instance to sqlcluster. Database mail settings (profiles/accounts) will not be migrated. Databases will be migrated using the backup/restore method. DBowner will be updated. User passwords, SIDs, database and server permissions sets, database roles and server roles will be migrated along with the login. SQL Authenetication will be used to authenticate to the source and destination SQL Servers.

Cool things about this module

PowerShell
Edit|Remove
<#  
.SYNOPSIS  
Migrates SQL Server *ALL* databases, logins, database mail profies/accounts, SQL Agent objects, linked servers, Central Management Server objects, and global configuration settings from one SQL Server to another. For more granular control, please see the other functions available within the dbatools module. 
 
.DESCRIPTION  
 
Start-SqlMigration consolidates most of the migration tools in dbatools into one command.  This is useful when you're looking to migrate entire instances. It less flexible than using the underlying functions. Think of it as an easy button. It migrates: 
 
All user databases. Use -SkipDatabases to skip. 
All logins. Use -SkipLogins to skip. 
All database mail objects. Use -SkipDatabaseMail 
All credentials. Use -SkipCredentials to skip. 
All objects within the Job Server (SQL Agent). Use -SkipJobServer to skip. 
Linked Server. Use -SkipLinkedServers to skip. 
All items within Central Management Server. Use -SkipCentralManagementServer to skip. 
SQL Server configuration objects (everything in sp_configure). Use -SkipSpConfigure to skip. 
 
This script provides the ability to migrate databases using detach/copy/attach or backup/restore. SQL Server logins, including passwords, SID and database/server roles can also be migrated. In addition, job server objects can be migrated and server configuration settings can be exported or migrated. This script works with named instances, clusters and SQL Express. 
 
By default, databases will be migrated to the destination SQL Server's default data and log directories. You can override this by specifying -ReuseFolderStructure. Filestreams and filegroups are also migrated. Safety is emphasized. 
 
THIS CODE IS PROVIDED "AS IS", WITH NO WARRANTIES. 
 
.PARAMETER Source 
Source SQL Server. You must have sysadmin access and server version must be > SQL Server 7. 
 
.PARAMETER Destination 
Destination SQL Server. You must have sysadmin access and server version must be > SQL Server 7. 
 
.PARAMETER SourceSqlCredential 
Allows you to login to servers using SQL Logins as opposed to Windows Auth/Integrated/Trusted. To use: 
 
$scred = Get-Credential, this pass $scred object to the param.  
 
Windows Authentication will be used if DestinationSqlCredential is not specified. To connect as a different Windows user, run PowerShell as that user.     
 
.PARAMETER DestinationSqlCredential 
Allows you to login to servers using SQL Logins as opposed to Windows Auth/Integrated/Trusted. To use: 
 
$dcred = Get-Credential, this pass this $dcred to the param.  
 
Windows Authentication will be used if DestinationSqlCredential is not specified. To connect as a different Windows user, run PowerShell as that user.     
 
.PARAMETER BackupRestore 
Use the a Copy-Only Backup and Restore Method. This parameter requires that you specify -NetworkShare in a valid UNC format (\\server\share) 
 
.PARAMETER DetachAttach 
Uses the detach/copy/attach method to perform database migrations. No files are deleted on the source. If the destination attachment fails, the source database will be reattached. File copies are performed over administrative shares (\\server\x$\mssql) using BITS. If a database is being mirrored, the mirror will be broken prior to migration.  
 
.PARAMETER Reattach 
Reattaches all source databases after DetachAttach migration. 
 
.PARAMETER ReuseFolderStructure 
By default, databases will be migrated to the destination SQL Server's default data and log directories. You can override this by specifying -ReuseFolderStructure. The same structure will be kept exactly, so consider this if you're migrating between different versions and use part of Microsoft's default SQL structure (MSSQL12.INSTANCE, etc) 
 
.PARAMETER NetworkShare 
Specifies the network location for the backup files. The SQL Service service accounts must read/write permission to access this location. 
 
.PARAMETER SetSourceReadOnly 
Sets all migrated databases to ReadOnly prior to detach/attach & backup/restore. If -Reattach is used, db is set to read-only after reattach. 
 
.PARAMETER SkipDatabases 
Skips the database migration. 
 
.PARAMETER SkipLogins 
Skips the login migration. 
 
.PARAMETER SkipJobServer 
Skips the job server (SQL Agent) migration. 
 
.PARAMETER SkipCredentials 
Skips the credential migration. 
 
.PARAMETER SkipLinkedServers 
Skips the Linked Server migration. 
 
.PARAMETER SkipSpConfigure 
Skips the global configuration migration. 
 
.PARAMETER SkipCentralManagementServer 
Skips the CMS migration. 
 
.PARAMETER SkipDatabaseMail 
Skips the database mail migration. 
 
.PARAMETER SkipSysDbUserObjects 
Skips the import user objects found in source SQL Server's master, msdb and model databases to the destination. 
 
.PARAMETER Force 
If migrating users, forces drop and recreate of SQL and Windows logins.  
If migrating databases, deletes existing databases with matching names.  
If using -DetachAttach, -Force will break mirrors and drop dbs from Availability Groups. 
 
For other migration objects, it will just drop existing items and readd, if -force is supported within the udnerlying function. 
 
.NOTES  
Author  : Chrissy LeMaire 
Limitations:     Doesn't cover what it doesn't cover (replication, certificates, etc) 
            SQL Server 2000 login migrations have some limitations (server perms aren't migrated) 
            SQL Server 2000 databases cannot be directly migrated to SQL Server 2012 and above. 
            Logins within SQL Server 2012 and above logins cannot be migrated to SQL Server 2008 R2 and below.                 
 
.LINK  
https://gallery.technet.microsoft.com/scriptcenter/Use-PowerShell-to-Migrate-86c841df/ 
 
.EXAMPLE    
Start-SqlMigration -Source sqlserver\instance -Destination sqlcluster -DetachAttach  
 
Description 
 
All databases, logins, job objects and sp_configure options will be migrated from sqlserver\instance to sqlcluster. Databases will be migrated using the detach/copy files/attach method. Dbowner will be updated. User passwords, SIDs, database roles and server roles will be migrated along with the login. 
 
.EXAMPLE   
Start-SqlMigration -Verbose -Source sqlcluster -Destination sql2016 -SourceSqlCredential \$cred -ReuseFolderstructure -DestinationSqlCredential $cred -Force -NetworkShare \\fileserver\share\sqlbackups\Migration -BackupRestore 
 
Migrate databases uses backup/restore. Also migrate logins, database mail, credentials, SQL Agent, Central Management Server, SQL global configuration. 
 
.EXAMPLE 
Start-SqlMigration -Verbose -Source sqlcluster -Destination sql2016 -SkipDatabases -SkipLogins 
 
Migrate only database mail, credentials, SQL Agent, Central Management Server, SQL global configuration.  
 
.EXAMPLE 
Start-SqlMigration -Verbose -Source sqlcluster -Destination sql2016 -DetachAttach -Reattach -SetSourceReadonly 
 
Migrate databases using detach/copy/attach. Reattach at source and set source databases read-only. Also migrate logins, database mail, credentials, SQL Agent, Central Management Server, SQL global configuration.  
 
#> 

I've tested this migration script on as many platforms as possible. Please let me know if you have any issues.