Cos’è Powershell?
Prima di parlare delle caratteristiche principali di dbatools facciamo un passo indietro, abbiamo detto che è un modulo di Powershell: di cosa si tratta?
Powershell è un ambiente command-line crossplatform (Windows, Linux e macOs) nato principalmente per automatizzare processi tramite comandi e/o script in un linguaggio proprietario, è gratuito e facilmente installabile nei vari ambienti.
Per fare un facile paragone lo possiamo immagine come una naturale evoluzione del Command Prompt di Windows dal quale si discosta con un set di migliorie ed estensioni:
Robusta command-line history
Auto completamento e prediction attraverso il tasto TAB
Supporto alias sia per i comandi che per i parametri
Pipeline per concatenazione dei comandi
In-console help, similare alle man pages di Unix
Linguaggio di scripting ampiamente migliorato
Integrazione con il framework .Net
Installazione di dbatools
Dbatools ha come requisito minimo Powershell v3, ma il consiglio e di installare la versione più recente (al momento v7.4). Powershell è un prodotto Microsoft supportato ufficialmente e gratuito, solitamente le installazioni standard di Windows installano di default la versione 5.
Il modulo è facilmente installabile tramite il comando:
Install - Module dbatools - Scope CurrentUser
Qualora non fosse disponibile la connessione internet sono presenti in rete comunque vari tutorial per l’installazione offline.
Come si utilizza dbatools
Riprendendo il comando precedente viene concatenato il comando Select-Object per indicare a Powershell di restituire solamente la proprietà “Name” in modo da ottenere una lista più facilmente consultabile.
Moduli di dbatools
- Backup and Restore – Database: comandi per l’esecuzione e controllo dell’attività di backup.
- Connections: comandi per la connessione e test della connettività alle istanze.
- Databases: comandi per il recupero informazioni e configurazioni di tutti i database a bordo di un’istanza (lista dei database, stato, spazio occupato e datafiles, compatibilità, ecc).
- DBCC: comandi per l’automazione e recupero informazioni in ambito comandi DBCC e controlli di integrità dei database.
- Export: set di comandi per l’esportazione (script SQL inclusi) degli oggetti dell’istanza (databse, ruoli, logins, configurazioni, ecc).
- Login and User Management: comandi per automatizzare la creazione rimozione e modifica di logins, ruoli, user, ecc.
- SQL Agent: domandi per automatizzare la gestione della configurazione e job presenti per il SQL Agent.
- Comandi Get-*: per il recupero di informazioni.
- Comandi New-*: per la creazione di una nuova entità non presente (login, database, ecc ).
- Comandi Set-*: per la modifica di un valore o configurazione esistente.
- Comandi Remove-*: per la rimozione/cancellazione di un’entità.
- Comandi Move-*: per la migrazione di entità.
- Comandi Test-*: per la verifica di funzionalità.
Esempi pratici
Test - DbaConnection - SqlInstance server1.mydomain.LOCAL ,server2.mydomain.LOCAL ,server3.mydomain.LOCAL
Utilizzando il comando Test-DbaConnection è possibile testare la raggiungibilità dell’istanza, è possibile fornire la lista da controllare valorizzando la lista nel parametro -SqlInstance come elenco separato da virgole:
WHERE - OBJECT ConnestSuccess - eq $FALSE
Export - DbaUser - SqlInstance myIstance - DATABASE mydb - FilePath C: \temp\mydbUser.sql
RESTORE - DbaDatabase - SqlInstance myIstance - Path \\myBackupPath\mydb.bak - WithReplace
Get - DbaDbUser - SqlInstance myIstance - DATABASE mydb - ExcludeSystemUser | Remove - DbaDbUser - FORCE
Invoke - DbaQuery - SqlInstace myIstance - DATABASE mydb - FILE C: \temp\mydbUser.sql
Get - DbaAgentJob - SqlInstance myInstace1 ,myInstance2 ,myInstance3 | WHERE - OBJECT OwnerLoginName - eq "sa" | SET - DbaAgentJobOwner - LOGIN "myNewAdminUser"
- iniziamo ad estrarre la lista dei job presente nelle istanze myInstace1, myInstance2, myInstance3
- successivamente applichiamo un filtro ai risultati ottenuti con Where-Object dove OwnerLoginName è sa
- in fine con Set-DbaAgentJobOwner andiamo a impostare per tutti i job la nuova login myNewAdminUser.