Get-SQLBuildVersion uma forma diferente para se manter atualizado

Fala pessoal, hoje tem novidade, irei compartilhar um script Powershell que vai ajudar no seu dia a dia, no passado eu já havia feito um post sobre como checar a build do seu SQL Server e como saber se você está atualizado, para relembrar veja esse link:

https://blogdojamal.wordpress.com/2017/06/07/sql-server-build-numbers/

Frequentemente precisamos estar checando os blogs e feeds para saber das novas atualizações do SQL Server, como service packs e cumulative updates, atualmente eu utilizo os dois sites abaixo para me manter atualizado e checar as novas atualizações:

https://buildnumbers.wordpress.com/sqlserver/

https://sqlserverbuilds.blogspot.com/

O script que irei apresentar hoje irá automatizar essa checagem de build Online e irá comparar com a versão que seu SQL Server está operando e te enviar um e-mail com mais detalhes.

Para isso eu criei uma função chamada Get-SQLBuildVersion no Powershell e seu código está público no Github, essa função irá capturar a build da instância do seu SQL Server utilizando SMO, e irá buscar informações sobre essa build no blog https://buildnumbers.wordpress.com/sqlserver/, essa requisição irá retornar uma tabela atualizada sobre as atualizações da sua instância.

Código no Github:

https://github.com/Jamal27/SQLServer_Scripts/blob/master/Get-SQLBuildVersion.ps1

Vamos conhecer um pouco mais sobre este comando utilizando a função Get-Help:

Get-Help Get-SQLBuildVersion -Detailed

Screenshot_367

Utilizando a função Get-Help com o parâmetro -detailed conseguimos obter informações básicas sobre a function Get-SQLBuildVersion, assim como a descrição dos parâmetros, você pode utilizar o parâmetro -full para informação completa da função.

Get-Help Get-SQLBuildVersion -Examples

Screenshot_368

Com o parâmetro -examples conseguimos ver exemplos básicos de utilização da função Get-SQLBuildVersion.

Agora vamos utilizar a função para validar a versão da instância chamada SQLSERVER2016 que está em execução na máquina DESKTOP-A7S2JPV.

Get-SQLBuildVersion -SqlInstance “DESKTOP-A7S2JPV\SQLSERVER2016”

Screenshot_365

Podemos ver o retorno no console, onde apresenta na primeira parte a tabela com as builds e qual o nível de atualização para cada uma. Na segunda parte temos a build da instância passada como parâmetro, onde podemos ver claramente que está desatualizada, pois está operando na versão RTM e o SQL Server 2016 já possuí o service pack 2 mais alguns cumulatives updates, cujo o último é o KB4458612.

A tabela utilizada para retornar à consulta é a imagem abaixo:

Screenshot_360

 

Mas agora eu quero que esse resultado seja enviado por e-mail semanalmente, onde irei validar a versão das minhas instâncias de SQL Server, então adicionei alguns parâmetros e tratamentos para facilitar esse envio de e-mail:

#Import your email credential, you can export using this command: Get-Credential | Export-Clixml C:\Temp\credemail.xml, put yours credentials on the pop-up and save it.

$cred = Import-Clixml C:\Temp\credemail.xml

#Call function with your parameters
Get-SQLBuildVersion -SqlInstance “DESKTOP-A7S2JPV\SQLSERVER2016″,”DESKTOP-A7S2JPV\SQLSERVER2014” -SmtpServer “smtp.gmail.com” -EmailFrom “reginaldo.silva27@gmail.com” -EmailTo “reginaldo.silva27@gmail.com” –CredentialEmail $cred

  • -SqlInstance: Lista de instâncias que deseja verificar, pode ser mais de uma separada por vírgula
  • -SmtpServer: Servidor de SMTP que deseja utilizar para enviar os e-mails
  • -EmailFrom: Conta que irá enviar o e-mail
  • -EmailTo: Conta que receberá o e-mail
  • CredentialEmail: Credencial para autenticação com seu servidor de SMTP, como visto no exemplo, pode exportar as credencias utilizando o comando Get-Credential | Export-Clixml C:\Temp\credemail.xml, informe suas credencias para conexão, elas serão salvas em um arquivo e sua senha criptografada.

Como resultado da execução acima você irá receber 2 e-mails, um para cada instância informada no parâmetro SqlInstance, abaixo exemplos dos e-mails que irá receber.

Se sua versão estiver atualizada:

Screenshot_369

Mantenha a calma e tome uma cerveja, estamos atualizados!! É uma ótima notícia para receber em uma segunda-feira não acha?

Se sua versão estiver desatualizada:

Screenshot_370

Houston, temos um problema com a versão do seu SQL Server… conforme podemos ver na imagem acima, a instância SQLSERVER2016 está operando na versão RTM, mas já tem novas atualizações, onde a mais recente é a atualização 13.0.5201.1, recebendo esse e-mail você já pode conectar pelo link dentro do e-mail(Link em azul) e avaliar quais as mudanças daquela build, assim planejar um upgrade do seu ambiente que pode estar vulnerável operando com bugs e vulnerabilidades já corrigidas.

Para testar na sua máquina, utilize o Powershell ISE, abra o script Get-SQLBuildVersion.ps1 e execute para carregar a função, na mesma ou em outra sessão execute o comando abaixo trocando o parâmetro SqlInstance para o nome da sua instância:

Get-SQLBuildVersion -SqlInstance “DESKTOP-A7S2JPV\SQLSERVER2016”

Screenshot_377.png

Reginaldo, como agendar um Job no SQL Server para receber e-mail semanal ou mensal?

O SQL Server já possuí a opção de executar um comando Powershell dentro de um step, porém ele irá utilizar a versão do módulo SQLPS instalado, normalmente pode ser uma versão mais desatualizada do que a versão do Powershell instalado no servidor. Então irei recomendar a execução do step com o tipo CmdExec e chamando o powershell.exe, assim estará utilizando a versão mais recente do Powershell instalado na máquina, para isso vamos criar 2 objetos no SQL Server, uma credencial e um proxy, vamos lá.

Baixe os 2 scripts .ps1 do Github e salve em um local da sua máquina, para o exemplo eu salvei em C:\Temp\:

https://github.com/Jamal27/SQLServer_Scripts/blob/master/CallSQLVersion.ps1

https://github.com/Jamal27/SQLServer_Scripts/blob/master/Get-SQLBuildVersion.ps1

Abra o script CallSQLVersion.ps1 e edite ele com os parâmetros corretos de e-mails, credenciais e instâncias. Esse script é encarregado de carregar a função e suas dependências em memória e executa-la.

Screenshot_378

Depois vamos no SQL Server criar uma credencial no caminho: Security -> Credential. Informe um login local ou de domínio que tenha acesso nos arquivos baixados.

Screenshot_371

Agora vamos em SQL Server Agent -> Proxies, crie um novo proxy com as configurações abaixo, onde no campo “Credential name” será a credencial que criamos no passo anterior, selecione a opção “Operating system (CmdExec)”.

Screenshot_372

Em SQL Server Agent -> Jobs, crie um novo job.

Screenshot_373

Na aba Steps, adicione um novo step, em “Type” selecione “Operating System (CmdExec)”, em “Run as” selecione o proxy criado no passo anterior, em comando adicione o código abaixo de acordo com o caminho que você salvou os arquivos:

powershell.exe -command “C:\temp\CallSQLVersion.ps1”

Screenshot_374

Na aba Schedules, crie um novo schedule, selecione a periodicidade que desejar executar o Job.

Screenshot_375

Pronto! Semanalmente irá receber e-mails dos servidores definidos no CallSQLVersion.ps1, essa é a primeira release da função Get-SQLBuildVersion, fique à vontade para aplicar as suas customizações e caso tenha sugestões, críticas ou problemas deixe seu comentário ou me envie um e-mail.

Um ótimo artigo para lhe servir como referência quanto a execução de Powershell dentro de SQL Server Jobs: https://dbatools.io/agent/

Se você identificar problemas ou tiver dificuldades ao implantar entre em contato comigo, eu posso auxiliar em alguns erros comuns dentro do Powershell.

Alguns problemas conhecidos:

Versões do Powershell menores que 3.0 esse script não irá funcionar, para validar sua versão utilize o comando abaixo e verifique a linha “PSVersion”:

$PSVersionTable

Screenshot_380

Para contornar esse problema da versão do Powershell você pode escolher uma máquina com Powershell mais atualizado e centralizar a chamada apenas por ela, passando no parâmetro SqlInstance todas as suas instâncias.

Permissão para execução de scripts:

Screenshot_379

Possíveis soluções, execute um dos comandos abaixo:

Set-ExecutionPolicy -Scope Process Unrestricted -Force -Confirm

ou

Set-ExecutionPolicy Unrestricted

 

Reginaldo, devo sempre aplicar os cumulative updates em dia?

Cumulative update, aplicar ou não, eis a questão!

http://luticm.blogspot.com/2015/07/cumulative-update-aplicar-ou-nao-eis.html

Para o SQL Server 2017 e versões que virão após ele, não haverá mais service packs, então a questão não será se deve aplicar ou não, mas sim quando irá aplicar!

No More Service Packs for SQL Server

https://www.mssqltips.com/sqlservertip/5545/no-more-service-packs-for-sql-server/

Ótima leitura para você!

É isso ai pessoal, espero que gostem e apreciem com moderação. Abraços!

Reginaldo Silva

Anúncios

2 comentários sobre “Get-SQLBuildVersion uma forma diferente para se manter atualizado

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s