Windows PowerShell : Gestion de bases de données avec PowerShell

Vous pouvez utiliser certains codes Windows PowerShell pour configurer vos bases de données pour stocker exactement ce qu’il vous faut.

Don Jones

Bases de données sont le roi incontesté de stockage de données. Alors, pourquoi ne pas exploiter ces bases de données comme SQL Server pour stocker certaines informations administratives qui pouvaient rendre la vie plus facile ? Vous pouvez stocker les noms de serveur, les versions de Windows, les niveaux de service pack, dernier admin pour ouvrir une session, ce genre de chose.

C'est tout assez facile avec Windows PowerShell, parce que vous pouvez l'utiliser pour accéder en mode natif les fonctionnalités de base de données sous-jacente de Microsoft.NET Framework. Cela va maintenant chercher moins comme un script de Windows PowerShell et beaucoup plus comme un programme c#. Le code que vous aurez besoin, cependant, est assez facile de modèle. Vous pouvez faire ce que je vais montrer que vous ici et avec quelques ajustements mineurs adapter à presque n'importe quelle situation.

Scripts pour SQL

Supposons que vous avez une base de données SQL Server 2008 nommé SYSINFO. La base de données possède une table nommée serveurs. Cette table a cinq colonnes : ServerName, nom d'utilisateur, LastLogon, raison et SPVersion. Cela peut être essentiellement des colonnes de texte simple de type varchar.

Cependant, faire LastLogon une colonne datetime. Pour utiliser SQL Server maintenant définir fonction comme valeur par défaut. De cette façon, chaque fois que vous ajoutez une nouvelle ligne, elle contiendra la date et l'heure, sans avoir besoin de vous pour le spécifier manuellement. Rendre la colonne raison un varchar (max), donc il peut contenir beaucoup de texte, si nécessaire.

Créez un script d'ouverture de session dans un objet de stratégie de groupe (GPO), reliant le GPO à l'unité d'organisation (UO) où vivent vos serveurs. Chaque fois que quelqu'un se connecte à un serveur, le script sera exécuté. Utiliser un script de Windows PowerShell, quelque chose que vous pouvez faire sur tout ordinateur sur lequel Windows PowerShell 2.0 est installé. Vous devrez vous assurer que vous avez les modèles GPO de Windows Server 2008 R2 (le Windows 7 Remote Server Administration Toolkit ou RSAT) afin d'avoir l'option de script d'ouverture de session sur Windows PowerShell lorsque vous modifiez le GPO.

Voici le script que vous aurez besoin. Notez que j'utilise ↵ pour indiquer où vous devez appuyez sur ENTREE. Appuyez uniquement lorsque vous viendrez à ce symbole si vous voulez que cela fonctionne correctement (vous pouvez répliquer le symbole en HTML en utilisant la & crarr ; entité) :

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

Ces deux lignes invite à quelqu'un de la raison pour laquelle ils êtes journalisation sur le serveur — c'est quelque chose qui est assez important pour faire le suivi. La fonction remplacer remplacera les guillemets simples avec deux guillemets simples, veiller à ce que l'instruction SQL que plus tard, nous construisons fonctionnera correctement. Ce n'est pas conçu pour prévenir les attaques par injection SQL délibérées. Après tout, nous parlons des administrateurs de confiance, droite ?

Cette ligne permettra de récupérer les informations OS :

os $ = Get-WmiInfo Win32_OperatingSystem↵

Les données importantes ici sont le nom du serveur et sa version pack de service à l'adresse actuelle. Vous pouvez également la propriété BuildNumber, qui vous indique la version de Windows avec qui vous transigez.

Cette ligne de charge de la partie de la.NET Framework qui est chargé de travailler avec des bases de données :

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

Ces lignes de créent une connexion de base de données :

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

Si vous n'êtes pas à l'aide de SQL Server 2008, la chaîne de connexion pourrait être un peu différente (visitez ConnectionStrings.com pour rechercher des exemples de chaîne de connexion pour une grande variété de bases de données) :

$Conn.Open () ↵

La connexion est maintenant ouverte et prête à l'emploi.

Ces deux lignes de créer une commande SQL qui est ce que j'utilise pour envoyer ma requête à SQL Server. J'ai défini sa propriété de connexion « ouvert », de sorte que Windows PowerShell est un moyen d'envoyer la commande :

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

Cela ne fait tout le travail dur. Il crée une requête SQL de « INSERT » pour insérer une nouvelle ligne dans la table de base de données. Notez que j'utilise l'opérateur de formatage – f pour insérer des quatre éléments d'information dans la requête. L'information est insérée dans les espaces réservés {x}, dans le même ordre qu'il est fourni dans la liste séparée par des virgules qui suit l'opérateur :

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

Je vais maintenant exécuter la requête et de fermer la connexion de base de données :

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

Assurez-vous que vous fermez ce lien ou vous aurez un administrateur de base de données vous fessée à l'arrière de la tête. Comme vous le verrez sur ConnectionStrings.com, vous pouvez accéder à un grand nombre de bases de données.

Si vous utilisez quelque chose en dehors de SQL Server, vous devrez changer la partie « sqlclient » les noms d'objet pour « oledb » au lieu de cela. Aussi, il n'a pas recommandé d'utiliser basés sur des fichiers de bases de données comme l'accès. D'une part, pour obtenir le pilote, vous devrez installer accès sur vos serveurs, ce qui seraient une idée terrible. D'autre part, la performance de ces bases de données n'est pas au niveau que vous aurez besoin pour cela fonctionne bien.

Si vous n'avez pas une instance de SQL Server qui permet d'héberger votre base de données, obtenez une copie de l'édition Express installé quelque part. Cela suffit pour le niveau inférieur de la circulation, que cette technique se produira probablement.

Vous pouvez bien évidemment modifier cette technique pour faire un peu. Vous pouvez ajouter des colonnes à la base de données et avoir votre script à collecter des informations supplémentaires. Une chose que vous devrez faire est devenue qualifiée en langage SQL. Pas besoin d'être un gourou, mais vous devrez être en mesure d'écrire des requêtes de base.

Si vous avez besoin d'un apprêt sur le langage SQL (qui, à ce niveau, travaille presque identique sur toutes les plates-formes grande base de données), consultez cette série vidéo j'ai créé qui fournit un didacticiel complet sur le langage SQL standard de l'industrie. Il couvre également les principales différences entre les plates-formes telles que SQL Server, Oracle, MySQL et ainsi de suite.

Voici le script complet :

$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**est un populaire Windows PowerShell auteur, formateur et conférencier. Son livre le plus récent est "Apprendre Windows PowerShell dans un mois de déjeuners" (Manning, 2011) ; visitez MoreLunches.com pour l'info et de contenu libre compagnon. Il est également disponible pour les classes de la formation sur place (visitez ConcentratedTech.com/training pour plus d'informations).

Contenu associé