{"id":159,"date":"2018-02-23T17:00:06","date_gmt":"2018-02-23T20:00:06","guid":{"rendered":"http:\/\/www.data4it.com\/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:\/\/www.data4it.com\/marianokovo\/sql-server-automatizando-tareas-con-powershell-dbatools\/","title":{"rendered":"SQL Server &#8211; Automatizando Tareas con Powershell \u2013 dbatools"},"content":{"rendered":"<p>Visitas: 2126<\/p><p><a href=\"http:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-163\" src=\"http:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/powershell-300x120.png\" alt=\"\" width=\"183\" height=\"73\" srcset=\"https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/powershell-300x120.png 300w, https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/powershell.png 355w\" sizes=\"auto, (max-width: 183px) 85vw, 183px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-164\" src=\"http:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools-300x102.png\" alt=\"\" width=\"227\" height=\"78\" srcset=\"https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools-300x102.png 300w, https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/dbtools.png 385w\" sizes=\"auto, (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 \u00abRemote Signed\u00bb, 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=\"http:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned.jpg\"><br \/>\n<\/a><a href=\"http:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-167 size-medium\" src=\"http:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned-300x105.jpg\" alt=\"\" width=\"300\" height=\"105\" srcset=\"https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned-300x105.jpg 300w, https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned-768x270.jpg 768w, https:\/\/www.data4it.com\/marianokovo\/wp-content\/uploads\/2018\/02\/RemoteSigned.jpg 859w\" sizes=\"auto, (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 \u00abInstall-Module dbatools\u00bb<\/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: 2126 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:\/\/www.data4it.com\/marianokovo\/sql-server-automatizando-tareas-con-powershell-dbatools\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abSQL Server &#8211; Automatizando Tareas con Powershell \u2013 dbatools\u00bb<\/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":[],"class_list":["post-159","post","type-post","status-publish","format-standard","hentry","category-dbatools","category-powershell","category-sqlserver"],"_links":{"self":[{"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/posts\/159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/comments?post=159"}],"version-history":[{"count":5,"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":171,"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/posts\/159\/revisions\/171"}],"wp:attachment":[{"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/media?parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/categories?post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.data4it.com\/marianokovo\/wp-json\/wp\/v2\/tags?post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}