Migrate SQL Server instances in minutes instead of days. Test hundreds of backups automatically. Find that one database across 50 servers. dbatools is a PowerShell module with nearly 700 commands that replace manual SQL Server administration with powerful and fun automation.
Performance at Scale: Migrate terabyte databases in under an hour. Test 1000+ backups per hour. Manage 100+ SQL instances from a single console.
- Why dbatools?
- Quick Start
- System Requirements
- Common Use Cases
- Installation
- Getting Help
- Advanced Usage
- Troubleshooting
- Community & Support
- Contributing
| Traditional Methods | dbatools |
|---|---|
| SSMS: Click through 50 servers manually | PowerShell: Query all 50 servers in one command |
| Migration: Days of planning and execution | Migration: Minutes with automated best practices |
| Backup Testing: Manual restores, hope for the best | Backup Testing: Automated verification of all backups |
| Documentation: Hours of manual collection | Documentation: Instant HTML/Excel reports |
| Scripting: Complex T-SQL across versions | Scripting: Consistent commands for SQL 2000-2022 |
# Check your PowerShell version (v3+ required for Windows, Core 7.4+ for Linux/macOS)
$PSVersionTable.PSVersion
# Install (Windows/Linux/macOS)
Install-Module dbatools -Scope CurrentUser
# See your databases
Get-DbaDatabase -SqlInstance localhost
# Check your backups
Get-DbaLastBackup -SqlInstance localhost | Format-Table
# Test your last backup (yes, really!)
Test-DbaLastBackup -SqlInstance localhost| Version | Commands Supported |
|---|---|
| SQL Server 2000 | 75% |
| SQL Server 2005 | 90% |
| SQL Server 2008/R2 | 93% |
| SQL Server 2012+ | 100% |
| Azure SQL VM | As per version above |
| Azure SQL Database | 40% |
| Azure SQL Managed Instance | 60% |
| Containers/Kubernetes | 75% |
| OS | Commands Supported | PowerShell Required |
|---|---|---|
| Windows 7/8/10/11 | 100% | v3+ |
| Windows Server 2008 R2+ | 100% | v3+ |
| Linux (Intel/ARM64) | 78% | Core 7.4.0+ |
| macOS (Intel/M1) | 78% | Core 7.4.0+ |
π‘ Note: Commands requiring SQL WMI or -ComputerName parameter typically don't work on Linux/macOS.
For remote SQL Server management, ensure these ports are accessible:
| Protocol | Default Port | Used By | Required For | Firewall Note |
|---|---|---|---|---|
| SQL Database Engine | 1433 | Get-DbaDatabase |
62% of commands | Allow inbound on SQL Server |
| WS-Management | 5985/5986 | New-DbaClientAlias |
25% of commands | Windows Remote Management |
| SQL WMI | 135 | Enable-DbaAgHadr |
4% of commands | DCOM/RPC endpoint mapper |
| SMB | 445 | Backup-DbaDatabase |
4% of commands | File sharing for backups |
Firewall Tip: Create a dedicated Windows Firewall rule group for dbatools management traffic.
# Backup all databases
Get-DbaDatabase -SqlInstance sql01 | Backup-DbaDatabase
# Simple restore
Restore-DbaDatabase -SqlInstance sql01 -Path "C:\temp\mydb.bak"
# Test ALL your backups on a different server
Test-DbaLastBackup -SqlInstance sql01 -Destination sql02 | Out-GridView# Migrate entire SQL instance with one command
$params = @{
Source = 'sql01'
Destination = 'sql02'
BackupRestore = $true
SharedPath = '\\nas\temp'
}
Start-DbaMigration @params -Force
# Copy jobs between servers
Copy-DbaAgentJob -Source sql01 -Destination sql02# Find databases without recent backups
Get-DbaLastBackup -SqlInstance sql01 |
Where-Object LastFullBackup -lt (Get-Date).AddDays(-7)
# Check for corruption
Get-DbaLastGoodCheckDb -SqlInstance sql01 | Out-GridView
# Monitor currently running queries
Install-DbaWhoIsActive -SqlInstance sql01 -Database master
Invoke-DbaWhoIsActive -SqlInstance sql01# Find databases across multiple servers
Find-DbaDatabase -SqlInstance sql01, sql02, sql03 -Pattern "Production"
# Find stored procedures containing specific text
Find-DbaStoredProcedure -SqlInstance sql01 -Pattern "INSERT INTO Audit"
# Discover SQL instances on network
Find-DbaInstance -ComputerName server01, server02# Check your PowerShell version
$PSVersionTable.PSVersion
# Set execution policy (one-time setup)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Trust PowerShell Gallery (one-time setup)
Set-PSRepository -Name PSGallery -InstallationPolicy TrustedInstall-Module dbatools -Scope CurrentUserInstall-Module dbatools# On internet-connected machine:
Save-Module -Name dbatools -Path C:\temp
# Copy to target machine and place in:
# - All users: C:\Program Files\WindowsPowerShell\Modules
# - Current user: $HOME\Documents\WindowsPowerShell\Modules
# Import the module after copying
Import-Module dbatoolsStarting with v2.5.5, dbatools uses Microsoft Azure Trusted Signing. When upgrading from older versions:
Install-Module dbatools -Force -SkipPublisherCheck# Detailed help for any command
Get-Help Test-DbaLastBackup -Full
# Find commands
Get-Command -Module dbatools *backup*
Find-DbaCommand -Tag Migration
# Online help
Get-Help Test-DbaLastBackup -OnlineResources:
- π Documentation
- π Command Reference
- π° Blog
- π¬ Slack Community
$cred = Get-Credential sqladmin
Get-DbaDatabase -SqlInstance sql01 -SqlCredential $cred$cred = Get-Credential ad\winadmin
Get-DbaDiskSpace -ComputerName sql01 -Credential $credPowerShell's Export-CliXml provides a fast and secure way to store credentials to disk. The credentials are encrypted using Windows Data Protection API (DPAPI) and can only be decrypted by the same user on the same machine.
# Save credentials to disk (one-time setup)
Get-Credential | Export-CliXml -Path "$HOME\sql-credentials.xml"
# Reuse saved credentials in scripts
$cred = Import-CliXml -Path "$HOME\sql-credentials.xml"
Get-DbaDatabase -SqlInstance sql01 -SqlCredential $credFor more advanced credential management approaches including the Secrets Management module, see Rob Sewell's guide.
# Using colon or comma for non-default ports
Get-DbaDatabase -SqlInstance 'sql01:55559'
Get-DbaDatabase -SqlInstance 'sql01,55559' # Note: quotes required# Import module before starting transcript (PS 5.1 requirement)
Import-Module dbatools
Start-Transcript
Get-DbaDatabase -SqlInstance sql01
Stop-TranscriptIssue: "Could not connect to SqlInstance"
# Test connectivity
Test-DbaConnection -SqlInstance sql01
# Check if SQL Browser service is running for named instances
Get-DbaService -ComputerName sql01 -Type BrowserIssue: "Access denied" errors
# Ensure you have proper SQL permissions
Get-DbaLogin -SqlInstance sql01 -Login $env:USERNAME
# For Windows authentication issues, verify domain connectivity
Test-ComputerSecureChannelIssue: Module won't import
# Check execution policy
Get-ExecutionPolicy
# Force reimport if needed
Remove-Module dbatools -Force -ErrorAction SilentlyContinue
Import-Module dbatools -ForceFor more troubleshooting help, visit our troubleshooting guide or ask in Slack.
Get Involved:
- β Star this repository
- π Report issues
- π‘ Request features
- π€ Contribute code
Community Channels:
Stats:
- π¦ 7+ million downloads on PowerShell Gallery
- π₯ 250+ contributors
- π― 700+ commands
- π 10+ years of active development
We'd love to have you join us! Check out our Contributing Guide and the dbatools-dev Slack channel.
dbatools is licensed under the MIT License.
Thank you to all our contributors and the SQL Server community for making this project possible.
