Windows PowerShell. Gestione di database con PowerShell

È possibile utilizzare il codice di Windows PowerShell per configurare i database in modo da archiviare esattamente il necessario.

Don Jones

I database sono il re indiscusso della memorizzazione dei dati. Così perché non sfruttare tali basi di dati come SQL Server per memorizzare alcune informazioni amministrative che potrebbero rendere la vita più facile? È possibile memorizzare i nomi dei server, versioni di Windows, livelli di servizio pack, ultima admin per l'accesso, questo genere di cose.

È tutto abbastanza facile con Windows PowerShell, perché è possibile utilizzarlo per accedere in modo nativo le funzionalità di database sottostante di Microsoft.NET Framework. Ora, questo sta a guardare meno simile a uno script di Windows PowerShell e molto più un programma c#. Il codice che è necessario, tuttavia, è abbastanza facile da modello. Si può prendere che cosa vi mostrerò che qui e con appena un paio di modifiche minore adattarlo a quasi qualsiasi situazione.

Script per SQL

Supponiamo di che avere un database di SQL Server 2008, denominato SYSINFO. Il database ha una tabella denominata Server. Tale tabella ha cinque colonne: nomeserver, UserName, LastLogon, ragione e SPVersion. Questo può essere per lo più colonne di testo semplice di tipo varchar.

Tuttavia, fare LastLogon una colonna datetime. Impostare e utilizzare SQL Server ora funzione come valore predefinito. In questo modo, ogni volta che si aggiunge una nuova riga, conterrà la data corrente e l'ora, senza bisogno di specificarlo manualmente. Rendere la colonna ragione un varchar (max), quindi può contenere un sacco di testo, se necessario.

Creare uno script di accesso in un oggetto Criteri di gruppo (GPO), che collega il GPO all'unità organizzativa (OU) dove vivono i server. Ogni volta che qualcuno accede a un server, lo script verrà eseguito. Utilizzare uno script di Windows PowerShell, qualcosa si può fare su qualsiasi computer in cui è installato Windows PowerShell 2.0. Sarà necessario accertarsi di che disporre i modelli GPO da Windows Server 2008 R2 (o Windows 7 Remote Server Administration Toolkit o RSAT) al fine di avere l'opzione di script di accesso basata su Windows PowerShell quando si modifica l'oggetto Criteri di gruppo.

Ecco lo script che avrete bisogno. Si noti che sto utilizzando ↵ per indicare dove si dovrebbe premere INVIO. Solo premere invio quando venite a quel simbolo, se si desidera che questo per funzionare correttamente (si può replicare il simbolo in HTML usando il & crarr; entità):

$reason = Read-Host 'Reason are you logging on'↵
$reason.replace("'","''")↵

Quei due linee indurre qualcuno per la ragione che stai accesso a server — che è qualcosa che è abbastanza importante per tenere traccia. La funzione Replace sostituirà qualsiasi virgolette singole con due virgolette singole, assicurando che l'istruzione SQL che costruiamo più tardi funzionerà correttamente. Questo non è progettato per salvaguardarsi da attacchi SQL injection di deliberata. Dopo tutto, stiamo parlando di amministratori fidati, giusti?

Questa linea sarà recuperare informazioni OS:

$os = Get-WmiInfo Win32_OperatingSystem↵

Qui i dati importanti sono il nome del server e la sua attuale versione di service pack. È inoltre possibile che la proprietà BuildNumber, che ti dice la versione di Windows con cui hai a che fare.

Questa riga carica la parte della.NET Framework che è responsabile per l'utilizzo di database:

[assembly.reflection]::loadwithpartialname ("System. Data") ↵

Queste linee di creare una nuova connessione di database:

$conn = New-Object System.Data.SqlClient.SqlConnection↵
$conn.ConnectionString = "Data Source=SQLSERVER;Initial Catalog=SYSINFO;Integrated Security=SSPI;"↵

Se non si utilizza SQL Server 2008, la stringa di connessione potrebbe essere un po' differente (visita ConnectionStrings.com per cercare esempi di stringa di connessione per una vasta gamma di basi di dati):

$Conn.Open () ↵

Ora la connessione è aperta e pronti all'uso.

Queste due linee creano un comando SQL, che è quello che io uso per inviare la mia domanda a SQL Server. Ho impostato la proprietà di connessione su "aperto", affinché Windows PowerShell è un modo per inviare il comando:

$cmd = New-Object System.Data.SqlClient.SqlCommand↵
$cmd.connection = $conn↵

Questo fa tutto il lavoro duro. Crea una query SQL di "Inserire" per inserire una nuova riga nella tabella del database. Si noti che sto utilizzando l'operatore di formattazione – f inserire quattro pezzi di informazioni la query. L'informazione viene inserito i segnaposto {x}, nello stesso ordine che viene fornito in un elenco delimitato da virgole che segue l'operatore:

$cmd.commandtext = "INSERT INTO servers (servername,username,spversion,reason) VALUES('{0}','{1}','{2}','{3}')" -f
$os.__SERVER,$env.username,$os.servicepackmajorversion,$reason↵

Ora eseguire la query e chiudere la connessione al database:

$cmd.executenonquery()↵
$conn.close()↵

Assicurarsi che si chiude la connessione o avrete un amministratore di database si schioccando nella parte posteriore della testa. Come si vedrà su ConnectionStrings.com, è possibile accedere a un gran numero di database.

Se stai usando qualcosa oltre a SQL Server, è necessario modificare la parte "sqlclient" i nomi di oggetto in "oledb" invece. Inoltre, non si consiglia di utilizzare i database basato su file, come l'accesso. Per uno, per ottenere i driver, dovrete installare accesso sul vostro server, che sarebbe un'idea terribile. Per un altro, le prestazioni di questi database non sono fino al livello che si avrete bisogno per poter funzionare bene.

Se non si dispone di un'istanza di SQL Server che può ospitare il database, ottenere una copia dell'edizione Express installato da qualche parte. Che sarà sufficiente per il basso livello di traffico che questa tecnica genererà probabilmente.

È ovviamente possibile modificare questa tecnica per fare un po. È possibile aggiungere colonne al database e avere il tuo script raccogliere informazioni aggiuntive. Una cosa che devi fare è diventare abile nel linguaggio SQL stesso. Non è necessario essere un guru, ma ti consigliamo di essere in grado di scrivere query di base.

Se avete bisogno di un primer sul linguaggio SQL (che a questo livello quasi esattamente come funziona su tutte le piattaforme principali database), check out questo serie di video ho creato che fornisce un tutorial completo del linguaggio SQL standard di settore. Esso copre anche le differenze principali tra piattaforme come SQL Server, Oracle, MySQL e così via.

Ecco l'intero script:

$reason = Read-Host 'Reason are you logging on'↵
$reason.replace("'","''")↵
$os = Get-WmiInfo Win32_OperatingSystem↵
[assembly.reflection]::loadwithpartialname('System.Data')↵
$conn = New-Object System.Data.SqlClient.SqlConnection↵
$conn.ConnectionString = "Data Source=SQLSERVER;Initial Catalog=SYSINFO;Integrated Security=SSPI;"↵
$conn.open()↵
$cmd = New-Object System.Data.SqlClient.SqlCommand↵
$cmd.connection = $conn↵
$cmd.commandtext = "INSERT INTO servers (servername,username,spversion,reason) VALUES('{0}','{1}','{2}','{3}')" -f $os.__SERVER,$env.username,$os.servicepackmajorversion,$reason↵
$cmd.executenonquery()↵
$conn.close()↵

Don Jones

**Don Jones**è un popolare Windows PowerShell autore, trainer e speaker. Il suo libro più recente è "Imparare Windows PowerShell in un mese di pranzi" (Manning, 2011); Visita MoreLunches.com per informazioni e contenuti di accompagnamento gratuito. Egli è anche disponibile per corsi di formazione in loco (visita ConcentratedTech.com/training per ulteriori informazioni).

Contenuto correlato