Windows PowerShell: Creación de bases de datos con PowerShell

Puede usar algunos códigos de Windows PowerShell para configurar sus bases de datos a fin de almacenar exactamente lo que necesita.

Don Jones

Bases de datos son el rey indiscutible de almacenamiento de datos. Por lo tanto ¿por qué no aprovechar las bases de datos como SQL Server para almacenar la información administrativa que podría hacer su vida más fácil? Puede almacenar nombres de servidor, las versiones de Windows, los niveles de servicio pack, último admin para iniciar sesión, ese tipo de cosas.

Es todo muy fácil con Windows PowerShell, porque se puede utilizar para acceder de forma nativa las capacidades de base de datos subyacente de Microsoft.NET Framework. Ahora esto se va a ver menos como una secuencia de comandos de Windows PowerShell y mucho más como un programa de C#. El código que debe, sin embargo, es bastante fácil de plantilla. Puede tomar lo que te voy a mostrar que aquí y con pocos ajustes menores adaptarlo a casi cualquier situación.

Secuencias de comandos de SQL

Supongamos que tiene una base de datos de SQL Server 2008 llamado SYSINFO. La base de datos tiene una tabla denominada servidores. Esta tabla tiene cinco columnas: nombre del servidor, nombre de usuario, LastLogon, razón y SPVersion. Esto puede ser en su mayoría las columnas de texto simple de tipo varchar.

Sin embargo, LastLogon que una columna de fecha y hora. Para utilizar SQL Server ahora definir función como valor predeterminado. De este modo, siempre que se agrega una nueva fila, contendrá la fecha y hora actuales, sin necesidad de especificarlo manualmente. Convertir la columna de la razón en un VARCHAR (Max), por lo que puede contener gran cantidad de texto, si es necesario.

Crear un script de inicio de sesión en un objeto de directiva de grupo (GPO), vincular el GPO a la unidad organizativa (OU) donde viven los servidores. Cada vez que alguien inicie sesión en un servidor, la secuencia de comandos se ejecutará. Utilice una secuencia de comandos de Windows PowerShell, algo que puede hacer en cualquier equipo donde está instalado Windows PowerShell 2.0. Debe asegurarse de que tiene las plantillas GPO de Windows Server 2008 R2 (el Windows 7 Remote Server Administration Toolkit o RSAT) para tener la opción de secuencia de comandos de inicio de sesión en Windows PowerShell al editar el GPO.

Aquí está la secuencia de comandos que necesitará. Tenga en cuenta que estoy usando ↵ para indicar dónde debe pulse Enter. Sólo pulse Enter cuando venga a ese símbolo si desea que funcione correctamente (se puede replicar el símbolo en HTML utilizando el & crarr; entidad):

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

Esas dos líneas alguien pedirá por la razón que están inicio de sesión en el servidor, que es algo que es bastante importante para realizar un seguimiento. La función de reemplazar sustituirá cualquier comillas con dos comillas simples, asegurando que la instrucción SQL que construimos más adelante funcionará correctamente. Esto no está diseñado para protegerse de los ataques de inyección SQL deliberados. ¿Después de todo, estamos hablando de los administradores, derecho?

Esta línea recupera información del SO:

$os = Get-WmiInfo Win32_OperatingSystem↵

Aquí los datos más importantes están el nombre del servidor y su actual versión del service pack. También puede la propiedad BuildNumber, que indica la versión de Windows con la que se está tratando.

Esta línea de carga de la parte del.NET Framework que se encarga de trabajar con bases de datos:

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

Estas líneas de crean una nueva conexión de base de datos:

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

Si no está utilizando SQL Server 2008, la cadena de conexión puede ser un poco diferente (visite ConnectionStrings.com para buscar ejemplos de cadena de conexión para una amplia variedad de bases de datos):

$Conn.Open () ↵

Ahora la conexión es abierto y listo para usar.

Estas dos líneas crean un comando SQL, que es lo que usaré para enviar mi consulta a SQL Server. He puesto su propiedad de conexión a "abierto", para que Windows PowerShell tiene una forma de enviar el comando:

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

Esto no hace todo el trabajo. Crea una consulta de "Insertar" de SQL para insertar una nueva fila en la tabla de base de datos. Tenga en cuenta que estoy usando el operador formato – f para insertar cuatro piezas de información en la consulta. La información se inserta en los marcadores de posición {x}, en el mismo orden que se proporciona en la lista separada por comas que sigue al operador:

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

Ahora voy a ejecutar la consulta y cerrar la conexión de base de datos:

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

Asegúrese de cerrar la conexión o que un administrador de base de datos le golpeando en la parte posterior de la cabeza. Como verá en ConnectionStrings.com, se accede a un gran número de bases de datos.

Si utiliza algo además de SQL Server, tendrá que cambiar la parte "sqlclient" de los nombres de objeto a "oledb" en su lugar. Además, no ha recomendado usar bases de datos basada en archivos como acceso. Por un lado, para obtener el controlador, deberás instalar el acceso en los servidores, lo que serían una idea horrible. Por otra parte, el rendimiento de las bases de datos no es el nivel que lo necesario para que funcione bien.

Si no dispone de una instancia de SQL Server que puede alojar la base de datos, obtener una copia de la edición Express había instalado algún lugar. Será suficiente para el nivel inferior de esta técnica es probable que generará el tráfico.

Obviamente puede modificar esta técnica para hacer bastante. Puede agregar columnas a la base de datos y tener la secuencia de comandos recopilar información adicional. Una cosa que debe hacer es ser calificada en el propio lenguaje SQL. No es necesario ser un gurú, pero desea poder escribir consultas básicas.

Si necesita una cartilla sobre el lenguaje SQL (que en este nivel funciona casi idéntica en todas las plataformas principales de la base de datos), revisa esto serie de video creé que proporciona un tutorial completo sobre el lenguaje SQL estándar. También cubre las principales diferencias entre plataformas como SQL Server, Oracle, MySQL, etc..

Aquí está la secuencia de comandos completa:

$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**es un popular autor de Windows PowerShell, entrenador y orador. Su libro más reciente es "Aprender Windows PowerShell en un mes de almuerzos" (Manning, 2011); visite MoreLunches.com de información y contenido libre compañero. Él también está disponible para las clases de formación in situ (visite ConcentratedTech.com/training para obtener más información).

Contenido relacionado