Share via


Windows PowerShell: Criando bancos de dados com o PowerShell

Você pode usar um pouco de código do Windows PowerShell para configurar seus bancos de dados para armazenar exatamente aquilo que você precisa.

Don Jones

Bancos de dados são o rei de armazenamento de dados. Então por que não aproveitar desses bancos de dados como SQL Server para armazenar algumas informações administrativas que poderiam tornar sua vida mais fácil? Você poderia armazenar nomes de servidor, versões do Windows, níveis de service pack, último admin para fazer logon, esse tipo de coisa.

É tudo muito fácil com o Windows PowerShell, porque você pode usá-lo para acessar nativamente os recursos de banco de dados subjacente do Microsoft.NET Framework. Agora isso vai olhar menos como um script do Windows PowerShell e muito mais como um programa c#. O código que você precisa, no entanto, é bastante fácil de modelo. Você pode tomar o que vou mostrar que você aqui e com apenas alguns pequenos ajustes adaptá-lo para quase qualquer situação.

Scripts para SQL

Vamos supor que você tem um banco de dados do SQL Server 2008 chamado SYSINFO. O banco de dados tem uma tabela chamada servidores. Essa tabela tem cinco colunas: nome do servidor, nome de usuário, LastLogon, razão e SPVersion. Isso pode ser principalmente colunas de texto simples do tipo varchar.

No entanto, fazer LastLogon uma coluna datetime. Defini-lo para usar o SQL Server agora função como seu valor padrão. Dessa forma, sempre que você adiciona uma nova linha, ele irá conter a data e hora atuais, sem a necessidade de você especificá-lo manualmente. Verifique a coluna razão um varchar (max), para que ele pode conter lotes de texto, se necessário.

Crie um script de logon em um objeto de diretiva de grupo (GPO), vinculando o GPO para a unidade organizacional (UO), onde vivem seus servidores. Cada vez que alguém fizer logon um servidor, o script será executado. Use um script do Windows PowerShell, algo que você pode fazer em qualquer computador onde está instalado o Windows PowerShell 2.0. Você precisará garantir que você tem os modelos de GPO do Windows Server 2008 R2 (ou o Windows 7 Remote Server Administration Toolkit ou RSAT) para ter a opção de script de início de sessão com base Windows PowerShell ao editar o GPO.

Aqui é o script que você vai precisar. Observe que estou usando ↵ para indicar onde você deve bater Enter. Apenas tecle Enter quando você vir a esse símbolo se você quer isso funcione corretamente (você pode replicar o símbolo em HTML usando o & crarr; entidade):

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

Essas duas linhas alguém pedem a razão que estão fazendo logon no servidor — isso é algo que é bastante importante para controlar. A função Replace substituirá qualquer aspas simples com duas aspas simples, garantindo que a instrução SQL que podemos construir mais tarde irá funcionar corretamente. Isso não é projetado para se proteger contra ataques de injeção de SQL deliberadas. Afinal, estamos falando de administradores confiáveis, certos?

Esta linha irá recuperar informações do sistema operacional:

os $ = Get-WmiInfo Win32_OperatingSystem↵

O dado importante aqui é o nome do servidor e sua atual versão do service pack. Você também pode a propriedade BuildNumber, que informa a versão do Windows com a qual você está lidando.

Esta linha carrega a parte da.NET Framework que é responsável por trabalhar com bancos de dados:

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

Estas linhas de criam uma nova conexão de banco de dados:

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

Se você não estiver usando o SQL Server 2008, a seqüência de conexão pode ser um pouco diferente (visite ConnectionStrings.com para consultar exemplos de Cadeia de caracteres de conexão para uma grande variedade de bancos de dados):

$Conn.Open () ↵

Agora, a conexão é aberto e pronto para usar.

Estas duas linhas criam um comando SQL, que é o que vou usar para enviar minha consulta de SQL Server. Eu tenho defina sua propriedade de conexão "aberta", para que o Windows PowerShell tem uma maneira de realmente envie o comando:

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

Isto faz todo o trabalho duro. Ele cria uma consulta SQL de "Inserir" para inserir uma nova linha na tabela de banco de dados. Observe que estou usando o operador de formatação – f para inserir quatro peças de informação na consulta. A informação é inserida em espaços reservados {x}, na mesma ordem em que ela é fornecida na lista separada por vírgulas que segue o operador:

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

Agora vou executar a consulta e fechar a conexão de banco de dados:

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

Certifique-se de fechar a conexão ou você vai ter um administrador de banco de dados smacking você na parte de trás da cabeça. Como você verá em ConnectionStrings.com, você pode acessar um grande número de bancos de dados.

Se você estiver usando algo além do SQL Server, você terá que alterar a parte "sqlclient" os nomes de objeto a "oledb" em vez disso. Além disso, não é recomendado usar bancos de dados baseado em arquivo como acesso. Por um lado, para obter o driver, você terá que instalar o Access em seus servidores, o que seriam uma idéia terrível. Por outro lado, o desempenho desses bancos de dados não está ao nível que você vai precisar para isto funcionar bem.

Se você não tiver uma instância do SQL Server que pode hospedar seu banco de dados, obter uma cópia da edição Express instalado em algum lugar. Que será suficiente para o nível mais baixo de tráfego que provavelmente irá gerar essa técnica.

Obviamente você pode modificar essa técnica para fazer um pouco. Você pode adicionar colunas para o banco de dados e ter seu script coletar informações adicionais. Uma coisa que você precisará fazer é tornar-se hábil na linguagem SQL propriamente dito. Você não precisa ser um guru, mas você vai querer ser capaz de escrever consultas básicas.

Se você precisa de uma cartilha sobre a linguagem SQL (que, a este nível, funciona de forma quase idêntica em cada plataforma de banco de dados principal), confira esta série de vídeos eu criei que fornece um tutorial completo sobre a linguagem SQL padrão da indústria. Ele também aborda as diferenças principais entre plataformas como o SQL Server, Oracle, MySQL e assim por diante.

Aqui está todo o 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**é um autor, instrutor e palestrante do Windows PowerShell popular. Seu livro mais recente é "Aprender Windows PowerShell em um mês de almoços" (Manning, 2011); visite MoreLunches.com para informação e conteúdo livre companheiro. Ele também está disponível para classes de treinamento no local (visite ConcentratedTech.com/training para obter mais informações).

Conteúdo relacionado