No penúltimo post tivemos uma visão geral do PowerShell. Hoje abordaremos o assunto do ponto de vista de um DBA, portanto veremos esta ferramenta em ação no SQL Server.
Neste post você aprenderá a navegar no SQL Server utilizando o PowerShell. Isto é importante, porque você conseguirá chegar a lugares que antes só conseguia acessar via Management Studio! Então, vamos lá:
O PowerShell que vem instalado por padrão no seu Windows possui funções limitadas. Para ampliar sua gama de comandos é necessário carregar novos módulos. Para trabalharmos com o SQL Server é necessário carregar o módulo SQLPS.
- Como carregar o módulo SQLPS?
Primeiro: no local onde o PowerShell será executado, você precisa ter o SQL Server instalado (ou ao menos o client do SQL Server), do contrário terá um erro do tipo:
“The term ‘SQLPS’ is not recognized as the name of a cmdlet…”
No servidor com estes requisitos basta digitar SQLPS no prompt do PowerShell. Se você não fizer isto e digitar um comando específico do SQL Server, terá como retorno uma mensagem de erro como esta:
O termo 'invoke-sqlcmd' não é reconhecido como nome de cmdlet, função, arquivo de script ou programa operável. Verifique a grafia do nome ou, se um caminho tiver sido incluído, veja se o caminho está correto e tente novamente.
Em linha:1 caractere:14
+ invoke-sqlcmd <<<<
+ CategoryInfo : ObjectNotFound: (invoke-sqlcmd:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Veja que ao carregar o módulo SQLPS o PowerShell passa a reconhecer os comandos específicos para SQL Server (e o prompt muda):

- Navegando no SQL Server via PowerShell
Com o módulo carregado podemos utilizar o PowerShell para trabalhar com o SQL Server. As mudanças começam a se mostrar já na “navegação”.
Se você não conhece um pouco sobre o velho MS-DOS, precisa se inteirar sobre alguns comandos básicos para começar a navegar:
- DIR – comando de listagem de pastas, similar ao LS do Linux
- CD <nome da pasta> – comando para acessar uma pasta
- CD.. – comando para sair de uma pasta
Com o módulo SQLPS carregado, ao executar o comando DIR tenho a relação de pelo menos 4 “pastas” * (ou 4 nós):
- SQL
- SQLPolicy
- SQLRegistration
- e DataCollection
* Vou utilizar o termo “pasta” para designar os nós, pois este termo é mais conhecido entre os utilizadores do prompt DOS.
A quantidade de “pastas” exibidas neste nível pode variar de acordo com os itens que o DBA selecionou na instalação do SQL Server. Por exemplo, se você instalar o Integration Services terá acesso a pasta SSIS. Se instalar o Analysis Services terá acesso a pasta SQLAS.
Dentro de cada uma destas “pastas virtuais” você tem acesso a informações específicas do SQL Server, suas instâncias, bases de dados, objetos e etc.
Por exemplo: se quiser informações referentes aos Jobs de sua instância, terá que navegar até o endereço descrito abaixo, na seguinte hierarquia:
SQL \ “MachineName” \ “InstanceName” \ JobServer \ Jobs
Onde MachineName é o nome de seu servidor e InstanceName é a identificação dada a sua instância SQL Server. No meu caso ficou assim:
\SQL\WIN7_64-PC\SQL12\JobServer\Jobs
Aqui, assim como no prompt do DOS, ao digitar o inicio da “pasta” e apertar a tecla TAB o PowerShell completa a sintaxe!
Se dentro de \jobs você digitar o comando DIR, verá a lista de jobs da sua instância.
Os comandos CD e DIR não são comandos nativos do PowerShell, na realidade eles são alias (ou apelidos). Para navegar até os Jobs, utilizando comandos nativos do PowerShell, também poderíamos utilizar este comando:
set-location sqlserver:\sql\win7_64-pc\sql12\jobserver\jobs
Agora que chegamos aos jobs, que tal verificarmos o status da última execução de cada um deles? Simples:
dir | select name, lastRunDate, lastRunOutcome
Assim como o CD foi substituido pelo get-content, podemos substituir o DIR por LS (pra quem veio do mundo Linux) ou utilizar o comando nativo do PowerShell: get-childItem.
Ainda falaremos mais sobre PowerShell e sobre como ele pode facilitar a vida do DBA, mas por hora é importante que você compreenda: entender a forma como a hierarquia dos objetos é organizada, fará toda a diferença quando você começar a escrever seus scripts em PowerShell.
Boa navegação!