{"id":159,"date":"2018-02-23T17:00:06","date_gmt":"2018-02-23T20:00:06","guid":{"rendered":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/?p=159"},"modified":"2018-02-24T22:59:40","modified_gmt":"2018-02-25T01:59:40","slug":"sql-server-automatizando-tareas-con-powershell-dbatools","status":"publish","type":"post","link":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/sql-server-automatizando-tareas-con-powershell-dbatools\/","title":{"rendered":"SQL Server &#8211; Automatizando Tareas con Powershell \u2013 dbatools"},"content":{"rendered":"<p>Visitas: 2201<\/p><p><a href=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-163\" src=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/powershell-300x120.png\" alt=\"\" width=\"183\" height=\"73\" srcset=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/powershell-300x120.png 300w, https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/powershell.png 355w\" sizes=\"(max-width: 183px) 85vw, 183px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-164\" src=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools-300x102.png\" alt=\"\" width=\"227\" height=\"78\" srcset=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools-300x102.png 300w, https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools.png 385w\" sizes=\"(max-width: 227px) 85vw, 227px\" \/><\/a><\/p>\n<p>Desde\u00a0hace un tiempo a esta parte, PowerShell de a poco se ha convertido en un est\u00e1ndar para la automatizaci\u00f3n de tareas en Windows (principalmente, ya que tambi\u00e9n Microsoft lo ha disponibilizado en otros sistemas operativos tambi\u00e9n).<\/p>\n<p>Para los DBAs y los que normalmente trabajan con SQL Server, tambi\u00e9n ha comenzado la adopci\u00f3n de este lenguaje de scripting y shell de l\u00ednea de comandos. Pero, debo reconocer que para m\u00ed y algunos cuantos colegas no hemos llevado la vanguardia en la implementaci\u00f3n PowerShell y a veces nos cuesta abandonar a nuestro querido T-SQL.<\/p>\n<p>Pero lo que me ha motivado a utilizar PowerShell, al menos de mi parte, es para utilizar esta gran herramienta <a href=\"https:\/\/dbatools.io\">dbatools<\/a>, desarrollada completamente por la comunidad y para la comunidad en forma libre y sin costo.<\/p>\n<p>Permite realizar cientos (mas de 300) de tareas en forma automatizada, minimizando errores y aplicando las best-practices creadas por cientos de profesionales de SQL Server.<\/p>\n<p>&nbsp;<\/p>\n<h2><b>Configurar PowerShell<\/b><\/h2>\n<p>Para comenzar antes que nada, debemos tener instaladas las versiones m\u00e1s actualizadas, ya que dependiendo del sistema operativo que tengamos instalados, estos poseen diferentes versiones de PowerShell (Fig.1)<\/p>\n<p>&nbsp;<\/p>\n<table style=\"height: 525px;\" width=\"1327\">\n<tbody>\n<tr>\n<td><b>O.S.<\/b><\/td>\n<td><b>Executable<\/b><\/td>\n<td><b>Execution Policy<\/b><\/td>\n<td><b>PowerShell Version<\/b><\/td>\n<\/tr>\n<tr>\n<td>2008 R2 \u2013 PowerShell type<\/td>\n<td>SQLPS.exe<\/td>\n<td>RemoteSigned<\/td>\n<td>2.0<\/td>\n<\/tr>\n<tr>\n<td>2008 R2 \u2013 CmdExec type<\/td>\n<td>powershell.exe via cmd.exe<\/td>\n<td>System Configured<\/td>\n<td>Latest Installed<\/td>\n<\/tr>\n<tr>\n<td>2012 \u2013 PowerShell type<\/td>\n<td>SQLPS.exe<\/td>\n<td>RemoteSigned<\/td>\n<td>2.0<\/td>\n<\/tr>\n<tr>\n<td>2012 \u2013 CmdExec type<\/td>\n<td>powershell.exe via cmd.exe<\/td>\n<td>System Configured<\/td>\n<td>Latest Installed<\/td>\n<\/tr>\n<tr>\n<td>2014 \u2013 PowerShell type<\/td>\n<td>SQLPS.exe<\/td>\n<td>RemoteSigned<\/td>\n<td>4.0<\/td>\n<\/tr>\n<tr>\n<td>2014 \u2013 CmdExec type<\/td>\n<td>powershell.exe via cmd.exe<\/td>\n<td>System Configured<\/td>\n<td>Latest Installed<\/td>\n<\/tr>\n<tr>\n<td>2016 \u2013 PowerShell type<\/td>\n<td>SQLPS.exe<\/td>\n<td>RemoteSigned<\/td>\n<td>4.0<\/td>\n<\/tr>\n<tr>\n<td>2016 \u2013 CmdExec type<\/td>\n<td>powershell.exe via cmd.exe<\/td>\n<td>System Configured<\/td>\n<td>Latest Installed<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>FIG. 1. Fuente &#8211; Derik Hammer: <a href=\"https:\/\/www.sqlhammer.com\/running-powershell-in-a-sql-agent-job\/\">https:\/\/www.sqlhammer.com\/running-powershell-in-a-sql-agent-job\/<\/a><\/p>\n<p>Para obtener la actualizaci\u00f3n de Powershell podemos ir directamente a la descarga desde Microsoft:<\/p>\n<p>Ref. <a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/scripting\/setup\/installing-windows-powershell?view=powershell-6#upgrading-existing-windows-powershell\">https:\/\/docs.microsoft.com\/en-us\/powershell\/scripting\/setup\/installing-windows-powershell?view=powershell-6#upgrading-existing-windows-powershell<\/a><\/p>\n<h2><b>Configurar el Execution Policy<\/b><\/h2>\n<p>Otro punto importante es la Pol\u00edtica de Ejecuci\u00f3n (Execution Policy), que tambi\u00e9n dependiendo de la versi\u00f3n cambia su configuraci\u00f3n.<\/p>\n<p>Seg\u00fan la teor\u00eda, la Pol\u00edtica de Ejecuci\u00f3n se encuentra por razones de precauci\u00f3n y no seguridad. Es decir que intencionalmente se puede modificar el Scope de aplicaci\u00f3n\u00a0 seg\u00fan la necesidad del script a correr. Y la funci\u00f3n principal es prevenir la ejecuci\u00f3n de c\u00f3digo no seguro, aunque no es una pol\u00edtica activa de Seguridad que proactivamente puede detener una ejecuci\u00f3n.<\/p>\n<p>Ref: <a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.core\/about\/about_execution_policies?view=powershell-6\">https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.core\/about\/about_execution_policies?view=powershell-6<\/a><\/p>\n<p>Y precisamente para ejecutar las funciones de <a href=\"https:\/\/dbatools.io\">dbatools <\/a>minimamente requiere que esta opci\u00f3n se encuentre en &#8220;Remote Signed&#8221;, es decir que se podr\u00e1n ejecutar Scripts que no est\u00e1n alojados en la computadora local deben estar firmados digitalmente para ser ejecutados.<\/p>\n<p>Desde una ventana PowerShell con permisos elevados de Administrador, se puede ver el ExecutionPolicy y cambiarlo:<\/p>\n<p>C\u00f3digo:\u00a0\u00a0Set-ExecutionPolicy RemoteSigned<\/p>\n<p><a href=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned.jpg\"><br \/>\n<\/a><a href=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-167 size-medium\" src=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned-300x105.jpg\" alt=\"\" width=\"300\" height=\"105\" srcset=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned-300x105.jpg 300w, https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned-768x270.jpg 768w, https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned.jpg 859w\" sizes=\"(max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<h2><b>Instalaci\u00f3n de dbatools<\/b><\/h2>\n<p>Luego de actualizar PowerShell y configurar la Execution Policy, tenemos que instalar el modulo de dbatools.<\/p>\n<p>Esto se puede realizar en forma offline, sino se dispone una conexi\u00f3n a internet y se puede realizar siguiendo los pasos muy bien descriptos del sitio de dbatools: <a href=\"https:\/\/dbatools.io\/offline\/\">https:\/\/dbatools.io\/offline\/<\/a><\/p>\n<p>B\u00e1sicamente se descarga el m\u00f3dulo, ya sea desde la Galer\u00eda de PowerShell oficial de Microsoft, o desde el sitio oficial de dbatools, se descomprimen los scripts y luego se ejecuta localmente la instalaci\u00f3n.<\/p>\n<p>Y la otra opci\u00f3n (y m\u00e1s directa) si se dispone de una conexi\u00f3n a internet, es utilizando desde la linea de comandos de PowerShell ejecutando el comando &#8220;Install-Module dbatools&#8221;<\/p>\n<p>Aunque previamente hay que ejecutar unos comandos adicionales para confiar en el repositorio y luego importar los m\u00f3dulos instalados.<\/p>\n<p>El paso a paso se puede ver : <a href=\"https:\/\/dbatools.io\/soup2nutz\/\">https:\/\/dbatools.io\/soup2nutz\/<\/a><\/p>\n<p>Y en el tutorial de YouTube: <a href=\"https:\/\/youtu.be\/p8N2jaxBc08\">installing modules from the powershell gallery<\/a><\/p>\n<p>Con esto completo ya tendremos en nuestro servidor o equipo, las herramientas instaladas y podremos ejecutar todos los comandos para automatizar las tareas como Backups y Restores entre diferentes ambientes, o realizar migraciones completas de todas las bases de datos desde un server a otro, y tantas otras m\u00e1s como la lista a continuaci\u00f3n:<\/p>\n<p><a href=\"https:\/\/dbatools.io\/functions\/\">https:\/\/dbatools.io\/functions\/<\/a><\/p>\n<p>Los invito a probarla y porque no a colaborar en esta gran herramienta abierta para la comunidad.<\/p>\n<p>En el pr\u00f3ximo post, vamos a ver como programar tareas automatizadas de dbatools y PowerShell desde SQL Server Agent.<\/p>\n<p>&nbsp;<\/p>\n<h4>Agradecimientos y Referencias<\/h4>\n<p>Equipo de dbatools : <a href=\"https:\/\/dbatools.io\/\">https:\/\/dbatools.io\/<\/a><\/p>\n<p>Blog de Derik Hammer: <a href=\"https:\/\/www.sqlhammer.com\/running-powershell-in-a-sql-agent-job\/\">https:\/\/www.sqlhammer.com\/running-powershell-in-a-sql-agent-job\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Visitas: 2201 Desde\u00a0hace un tiempo a esta parte, PowerShell de a poco se ha convertido en un est\u00e1ndar para la automatizaci\u00f3n de tareas en Windows (principalmente, ya que tambi\u00e9n Microsoft lo ha disponibilizado en otros sistemas operativos tambi\u00e9n). Para los DBAs y los que normalmente trabajan con SQL Server, tambi\u00e9n ha comenzado la adopci\u00f3n de &hellip; <a href=\"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/sql-server-automatizando-tareas-con-powershell-dbatools\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> &#8220;SQL Server &#8211; Automatizando Tareas con Powershell \u2013 dbatools&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50,49,23],"tags":[],"_links":{"self":[{"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/posts\/159"}],"collection":[{"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/comments?post=159"}],"version-history":[{"count":5,"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":171,"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/posts\/159\/revisions\/171"}],"wp:attachment":[{"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/media?parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/categories?post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/precisionit.com.ar\/blogs\/marianokovo\/wp-json\/wp\/v2\/tags?post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}