{"id":1114,"date":"2019-04-13T23:13:56","date_gmt":"2019-04-14T02:13:56","guid":{"rendered":"http:\/\/thesqltimes.com\/blog\/?p=1114"},"modified":"2020-04-12T12:35:14","modified_gmt":"2020-04-12T15:35:14","slug":"wmi-com-sql-server-um-exemplo-pratico-que-gerou-ate-correcao-na-documentacao-oficial-do-sql","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2019\/04\/13\/wmi-com-sql-server-um-exemplo-pratico-que-gerou-ate-correcao-na-documentacao-oficial-do-sql\/","title":{"rendered":"WMI com SQL SERVER: Um exemplo pr\u00e1tico que gerou at\u00e9 corre\u00e7\u00e3o na documenta\u00e7\u00e3o oficial do SQL"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Muito \u00fatil!\" data-post-id=\"1114\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><\/div><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de Leitura:<\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span><p><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb292433fd47.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1119\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb292433fd47.png\" alt=\"\" width=\"864\" height=\"388\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb292433fd47.png 864w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb292433fd47-300x135.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb292433fd47-768x345.png 768w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><\/a><\/p>\n<p>Este foi um email que recebi na \u00faltima sexta (12\/04\/2019).<\/p>\n<p>Ele confirma que uma corre\u00e7\u00e3o que eu postei na documenta\u00e7\u00e3o oficial do SQL Server foi validada e aprovada!<\/p>\n<p>A corre\u00e7\u00e3o j\u00e1 foi aplicada na <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/wmi-provider-configuration\/working-with-the-wmi-provider-for-configuration-management?view=sql-server-2017\">p\u00e1gina sobre o uso do WMI com o SQL Server.<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Sobre as contribui\u00e7\u00f5es<\/h2>\n<p>Como a Microsoft est\u00e1 se aproximando mais e mais da comunidade!!! Al\u00e9m de abrir o c\u00f3digo-fonte de tecnologias como powershell,\u00a0 a Microsoft tamb\u00e9m permite que <a href=\"https:\/\/docs.microsoft.com\/pt-br\/sql\/sql-server\/sql-server-docs-contribute?view=sql-server-2017\">qualquer um possa sugerir melhorias nas documenta\u00e7\u00f5es<\/a> do produto. E o mais legal \u00e9 que tudo isso \u00e9 feito usando o <a href=\"https:\/\/github.com\/MicrosoftDocs\/sql-docs\">reposit\u00f3rio oficial da documenta\u00e7\u00e3o no GitHub<\/a> e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Markdown\">markdown<\/a>!!!<\/p>\n<p>Eu lembro que h\u00e1 algum tempo eu enviei a seguinte mensagem num grupo de estudos de SQL Server recomendando o aprendizado de markdown, refor\u00e7ando que seria o futuro da documenta\u00e7\u00e3o! E algum tempo depois, a m\u00e3e Microsoft, nos aparece com a fonte da documenta\u00e7\u00e3o do SQL escrita em markdown!!!!<\/p>\n<p>Eu realmente sugiro que, se voc\u00ea ainda n\u00e3o o fez, aprenda Git e markdown, porque estas tecnologias v\u00e3o muito al\u00e9m de desenvolvimento de software!!!<\/p>\n<p>A primeira vez que tive contato com markdown, foi na equipe do Command Center, da Stefanini, local que atuo at\u00e9 hoje! E sim, usamos markdown extensivamente para gerar documenta\u00e7\u00e3o dos nossos scripts!<\/p>\n<h2>Sobre a corre\u00e7\u00e3o<\/h2>\n<p>A corre\u00e7\u00e3o que eu postei pode ser visualizada no <a href=\"https:\/\/github.com\/MicrosoftDocs\/sql-docs\/issues\/1817\">GitHub oficial da documenta\u00e7\u00e3o do SQL Server, registrada na Issue 1817<\/a><\/p>\n<p>Na verdade foi uma corre\u00e7\u00e3o e inclus\u00e3o de exemplos!<\/p>\n<p>A corre\u00e7\u00e3o foi referente ao namespace do provider do WMI do SQL Server!\u00a0 Anteriormente, a documenta\u00e7\u00e3o mencionava um formato incorreto, o que poderia confundir os leitores. O trecho anterior, com as informa\u00e7\u00f5es incorretas \u00e9 esse:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb286b998d60.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1115 size-full\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb286b998d60.png\" alt=\"\" width=\"849\" height=\"294\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb286b998d60.png 849w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb286b998d60-300x104.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb286b998d60-768x266.png 768w\" sizes=\"auto, (max-width: 849px) 100vw, 849px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>E ficou assim:<\/p>\n<p id=\"YZxZJpo\"><a href=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb28721e3ac5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1116 size-large\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb28721e3ac5-1024x597.png\" alt=\"\" width=\"1024\" height=\"597\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb28721e3ac5-1024x597.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb28721e3ac5-300x175.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb28721e3ac5-768x448.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb28721e3ac5.png 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Al\u00e9m da corre\u00e7\u00e3o no formato do namespace, eu ainda suger\u00ed a inclus\u00e3o de alguns exemplos em powershell para que o leitor tenha formas de descobrir os v\u00e1rios namespaces que possam estar instalados.<\/p>\n<p>&nbsp;<\/p>\n<h2>Sobre o WMI<\/h2>\n<p>Se voc\u00ea n\u00e3o conhece o WMI, pode estar se perguntando qual a real necessidade disso tudo!! A quest\u00e3o \u00e9 que o WMI \u00e9 uma poderosa fonte de informa\u00e7\u00f5es e automa\u00e7\u00e3o no SQL Server!<\/p>\n<p>Por exemplo, j\u00e1 se perguntou como voc\u00ea pode mudar o IP do SQL ou mesmo habilitar o TCP\/IP sem o uso de interface gr\u00e1fica? Voc\u00ea faz isso com powershell e WMI . Aqui est\u00e1 um script de exemplo:<\/p>\n<pre class=\"lang:ps decode:true\" title=\"Habilitando protocolo TCP\/IP e definindo a porta do SQL usando powershell e WMI\">$ErrorActionPreference = \"Stop\";\n\n$nomeInstancia = 'SQL16'\n\n#namespace onde est\u00e3o as classes do wmi para gerenciar o sql server\n#(foi isso que submeti para corre\u00e7\u00e3o!)\n#Pega o nome mais recente, pode ter v\u00e1rios namespaces, dependendo das vers\u00f5es instaladas!!!\n$nsLastName = @(gwmi -ns 'root\\Microsoft\\SqlServer' __NAMESPACE | ? {$_.name -match 'ComputerManagement' } | sort Name)[-1].Name\n\nif(!$nsLastName){\n    throw \"NAMESPACE_COMPUTERMANAGEMENT_NAOINSTALADO: Tem certeza que o sql server ou as clients tools foi instalado corretamente???\"\n}\n    \n#Guardando o nome do namespace em uma vari\u00e1vel, j\u00e1 que vamos usar mais de uma vez!!!\n$sqlns = \"root\\Microsoft\\SqlServer\\$nsLastName\"\n\n\n#Vamos habilitar o protocolo TCP\/IP!\n$ProtoFilter = \"InstanceName = '$nomeInstancia' and ProtocolName = 'Tcp'\"\n$ProtoTcp = Get-WmiObject -ns $sqlns -Class ServerNetworkProtocol -Filter $ProtoFilter \n$res = $ProtoTcp.SetEnable();\n\n#Se deu algum problema pra habilitar, erro!\nif($res.ReturnValue){\n    throw \"ERRO_HABILITAR_TCP: Codigo do erro = $($res.ReturnValue)\"\n}\n\n\n#Agora, vamos colocar a porta em que o SQL ir\u00e1 rodar (aqui estou setando no Ip = IpAll, igual geralmente fazemos no configuration manager)\n#Nesse exemplo, to setando a porta 1433\n$IpFilter = \"IpAddressName = 'IpAll' and PropertyName = 'TcpPort' and InstanceName = 'SQL16'\"\n$TcpIpAll = Get-WmiObject -ns $sqlns -Class ServerNetworkProtocolProperty -Filter $IpFilter\n$res = $TcpIpAll.SetStringValue(\"1433\")\n\n#Se deu algum problema pra habilitar, erro!\nif($res.ReturnValue){\n    throw \"ERRO_DEFINICAO_PORTA: Codigo do erro = $($res.ReturnValue)\"\n}\n\n#Desabilita ip dinamico!!\n$IpFilter = \"IpAddressName = 'IpAll' and PropertyName = 'TcpDynamicPorts' and InstanceName = 'SQL16'\"\n$DynamicTcpIpAll = Get-WmiObject -ns $sqlns -Class ServerNetworkProtocolProperty -Filter $IpFilter\n$res = $DynamicTcpIpAll.SetStringValue(\"\")\n\n\nif($res.ReturnValue){\n    throw \"ERRO_DEFINICAO_PORTA: Codigo do erro = $($res.ReturnValue)\"\n}\n\nwrite-host \"Pronto, tudo certo, agore reinicei o SQL Server\"\nwrite-host \"Comando para voc\u00ea reiniciar \u00e9 (rode como admin): Restart-Service 'mssql`$$nomeInstancia' -force \"<\/pre>\n<p>&nbsp;<\/p>\n<p>Executei o script em um ambiente de teste, onde\u00a0 uma inst\u00e2ncia SQL16 n\u00e3o estava com o TCP habilitado!!!\u00a0 Salvei o mesmo script acima em um arquivo T:\\changesqltcp.ps1 e olha o teste:<\/p>\n<p id=\"tGRygrv\"><img loading=\"lazy\" decoding=\"async\" width=\"1162\" height=\"332\" class=\"alignnone size-full wp-image-1117 \" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb290528bb30.png\" alt=\"\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb290528bb30.png 1162w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb290528bb30-300x86.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb290528bb30-768x219.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/04\/img_5cb290528bb30-1024x293.png 1024w\" sizes=\"auto, (max-width: 1162px) 100vw, 1162px\" \/><\/p>\n<p>Recentemente, precisei fazer essas altera\u00e7\u00f5es usando um Windows Server Core (que n\u00e3o tem muita interface gr\u00e1fica, e a maioria das a\u00e7\u00f5es s\u00e3o na linha de comando). Instalei o SQL Server usando <a href=\"https:\/\/chocolatey.org\/packages\/sql-server-express\">chocolatey<\/a>, e depois, usando o powershell e WMI, consegui habilitar os protocolos! Foi nesse dia que identifiquei a necessidade desta corre\u00e7\u00e3o!<\/p>\n<p>&nbsp;<\/p>\n<h2>Coincid\u00eancia!<\/h2>\n<p>Por pura coincid\u00eancia,\u00a0 nos pr\u00f3ximos dias estarei lan\u00e7ando um curso que te conta muita coisa sobre o WMI com SQL!!! \u00c9 o &#8220;<strong>Fundamentos de Windows para DBA SQL Server &#8211; M\u00f3dulo 01<\/strong>&#8220;. O curso ser\u00e1 lan\u00e7ado na plataforma de cursos <a href=\"https:\/\/cursos.fabriciolima.net\/\">https:\/\/cursos.fabriciolima.net\/<\/a>!!<\/p>\n<p>Neste curso, irei falar, atrav\u00e9s de muita demonstra\u00e7\u00e3o, conceitos e casos reais, sobre os b\u00e1sico de Windows que todo DBA precisa saber pra come\u00e7ar a mexer com SQL Server! Este curso foi feito para aqueles que est\u00e3o come\u00e7ando a administrar SQL Server e para aqueles que j\u00e1 administram h\u00e1 algum tempo! Tenho certeza que ir\u00e3o aprender coisas novas e \u00fateis para o seu dia-a-dia!!!<\/p>\n<p>Ent\u00e3o, aproveito e deixo aqui a sugest\u00e3o para voc\u00ea entrar na lista de espera e ir aproveitando o curso de seguran\u00e7a do <a href=\"https:\/\/www.dirceuresende.com\/\">Dirceu<\/a> que acabou de sair do forno! E tamb\u00e9m tem as incr\u00edveis 25 dicas de performance do <a href=\"https:\/\/blogfabiano.com\/\">Fabiano<\/a>!<\/p>\n<p>&nbsp;<\/p>\n<p>E a\u00ed, voc\u00ea j\u00e1 conhecida o WMI pra realizar a\u00e7\u00f5es no SQL Server? Conta pra gente nos coment\u00e1rios suas experi\u00eancias com automa\u00e7\u00f5es no SQL Server!!!<\/p>\n<p>At\u00e9 mais (e, em breve, um novo post na s\u00e9rie de CPU)!!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este foi um email que recebi na \u00faltima sexta (12\/04\/2019). Ele confirma que uma corre\u00e7\u00e3o que eu postei na documenta\u00e7\u00e3o oficial do SQL Server foi validada e aprovada! A corre\u00e7\u00e3o j\u00e1 foi aplicada na p\u00e1gina sobre o uso do WMI com o SQL Server. &nbsp; Sobre as contribui\u00e7\u00f5es Como a Microsoft est\u00e1 se aproximando mais&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2019\/04\/13\/wmi-com-sql-server-um-exemplo-pratico-que-gerou-ate-correcao-na-documentacao-oficial-do-sql\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">WMI com SQL SERVER: Um exemplo pr\u00e1tico que gerou at\u00e9 corre\u00e7\u00e3o na documenta\u00e7\u00e3o oficial do SQL<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1119,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[8,9,10,11,95,7,93],"tags":[243,47,96,73,240,242,241],"series":[],"class_list":["post-1114","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administracao","category-arquitetura","category-carreira","category-desenvolvimento","category-powershell-windows","category-sql-server","category-windows","tag-dnamicports","tag-microsoft","tag-powershell","tag-sql-server","tag-sqldocs","tag-tcpip","tag-wmi"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/comments?post=1114"}],"version-history":[{"count":8,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1114\/revisions"}],"predecessor-version":[{"id":1412,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1114\/revisions\/1412"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media\/1119"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=1114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=1114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=1114"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=1114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}