{"id":448,"date":"2017-09-12T13:23:19","date_gmt":"2017-09-12T12:23:19","guid":{"rendered":"https:\/\/sqldoubleg.live-website.com\/?p=448"},"modified":"2022-12-25T10:13:04","modified_gmt":"2022-12-25T10:13:04","slug":"t-sql-tuesday-94-lets-get-all-posh-creating-virtual-machines-with-ps","status":"publish","type":"post","link":"https:\/\/www.sqldoubleg.com\/es\/2017\/09\/12\/t-sql-tuesday-94-lets-get-all-posh-creating-virtual-machines-with-ps\/","title":{"rendered":"T-SQL Tuesday #94 \u2013 Vamos a ponernos Posh! Creando m\u00e1quinas virtuales con PS"},"content":{"rendered":"<p>En esta entrada quiero compartir con vosotros como podemos user powershell para automatizar la creacion de maquinas virtuales en Hyper-V por simpleza y consistencia&nbsp;<a href=\"https:\/\/sqldbawithabeard.com\/2017\/09\/05\/tsql2sday-94-lets-get-all-posh\" target=\"blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/sqldoubleg.live-website.com\/wp-content\/uploads\/2016\/07\/tsql2sday150x150.jpg\" alt=\"tsql2sday150x150\" width=\"154\" height=\"154\" style=\"float:left;margin-right:7px\" \/><\/a>&nbsp;Esta publicaci\u00f3n forma parte del <a href=\"http:\/\/sqlblog.com\/blogs\/adam_machanic\/archive\/2017\/01\/03\/t-sql-tuesday-rules-of-engagement.aspx\" target=\"_blank\" rel=\"noopener\">T-SQL Tuesday<\/a>, que es una fiesta de blog mensual el segundo martes de cada mes. Todos son bienvenidos y tienen la oportunidad de escribir sobre SQL Server. <a href=\"https:\/\/sqldbawithabeard.com\/2017\/09\/05\/tsql2sday-94-lets-get-all-posh\" target=\"_blank\" rel=\"noopener\"><\/a><br \/>\nEl anfitri\u00f3n de este mes es Rob Sewell (<a href=\"https:\/\/sqldbawithabeard.com\/\" target=\"_blank\" rel=\"noopener\">B<\/a>|<a href=\"https:\/\/twitter.com\/sqldbawithbeard\" target=\"_blank\" rel=\"noopener\">T<\/a>) y el tema es <strong><em>\u00a1Vamos a ponernos Posh!<\/em><\/strong> , y no se trata de usar sombreros de fantas\u00eda e ir a una pista de caballos, sino de Powershell como ya habr\u00edas imaginado. As\u00ed que aqu\u00ed est\u00e1 mi peque\u00f1a aportaci\u00f3n.<\/p>\n<p>&nbsp;<br \/>\n<strong>Antecedentes<\/strong><\/p>\n<p>Recientemente en el trabajo, hemos redise\u00f1ado nuestra infraestructura para proporcionar una mejor disponibilidad y recuperaci\u00f3n de desastres (HA \/ DR) y eso involucra muchos servidores nuevos para redundancia que deben estar lo m\u00e1s cerca posible si no son iguales a los servidores a los que proporcionan failover.<\/p>\n<p>La mayor\u00eda de estos servidores ser\u00e1n m\u00e1quinas virtuales que se ejecutan en diferentes hosts de Windows 2016 Hyper-V y, por pura simplicidad, queremos minimizar el uso de la interfaz de usuario y las configuraciones manuales, as\u00ed que me remangu\u00e9 la camisa y me puse Posh.<\/p>\n<p>Un buen n\u00famero de los pasos para crear una configuraci\u00f3n de las nuevas m\u00e1quinas virtuales se puede programar, lo que proporcionar\u00e1 resultados m\u00e1s consistentes y nos facilitar\u00e1 la vida en caso de que necesitemos crear todo de nuevo. Por ejemplo, para crear un nuevo entorno como DEV, TEST, PRELIVE, QA o m\u00e1s.<\/p>\n<p>&nbsp;<br \/>\n<strong>M\u00e1quinas virtuales y powershell<\/strong><\/p>\n<p>Hay muchos comandos para crear o manipular m\u00e1quinas virtuales y todav\u00eda estoy ara\u00f1ando la superficie, pero aunque no me dedico a tiempo completo a PS, debo admitir que cada vez que quiero hacer algo, me resulta relativamente f\u00e1cil encontrar o bien un comando de PowerShell o un script para poder hacerlo, as\u00ed que me gusta bastante.<\/p>\n<p>Por ejemplo, crear una m\u00e1quina virtual es tan simple como un comando<\/p>\n<blockquote><p><strong>New-VM<\/strong><\/p><\/blockquote>\n<p>Y eso es solo el comienzo, podemos agregar los distintos componente de hardware virtual igual que har\u00edamos en la interfaz de usuario, unidades de disco, adaptadores de red, etc. Y luego configurar la memoria, CPU y NUMA, etc.<\/p>\n<p>Esta es la secuencia de comandos que estoy ejecutando m\u00e1s o menos para crear mis m\u00e1quinas virtuales, esto en particular ser\u00e1 un servidor de Hyper-V en s\u00ed mismo, por lo que hay un par de configuraciones interesantes que las comentar\u00e9 m\u00e1s adelante.<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n##########################################################\r\n#\r\n# Script to create virtual machines \r\n# The VM created can be used as a Virtual Host (nested virtualization in Win 2016)\r\n#\r\n##########################################################\r\n\r\n##########################################################\r\n# Environment variables\r\n##########################################################\r\n$environment = &quot;d&quot;; # p = production, d = dev, t = test, q = qa\r\n$envprefix = '';\r\n\r\nswitch ($environment){\r\n    &quot;p&quot; {$envprefix = ''}\r\n    &quot;d&quot; {$envprefix = &quot;DEV&quot;}\r\n    &quot;t&quot; {$envprefix = &quot;TEST&quot;}\r\n    &quot;q&quot; {$envprefix = &quot;QA&quot;}\r\n};\r\n\r\n$HyperVHost = &quot;HYPERV-&quot; + $envprefix;\r\n$HyperVSwitchName = &quot;Network Adapter Name&quot;;\r\n\r\n##########################################################\r\n# variables to create the new VM\r\n##########################################################\r\n$VmNodeNumber = &quot;1&quot;\r\n$VmName = &quot;HYPERV-&quot; + $envprefix + $VmNodeNumber;\r\n$VmMemory = 24GB;\r\n$VmCpuCount = 8;\r\n$VmCpuCountPerNuma = 4;\r\n$VmNumaPerSocket = 2;\r\n$VmMemoryPerNuma = 12GB;\r\n\r\n##########################################################\r\n# variables to create C drive for the new VM\r\n##########################################################\r\n$VirtualMachine_VM_path = &quot;D:\\&quot;; # VM name will be added automatically\r\n$VirtualMachine_C_path = &quot;D:\\$VmName\\Virtual Hard Disks\\&quot;;\r\n$VirtualMachine_C_name = $VmName + &quot;_C.vhdx&quot;;\r\n$VirtualMachine_C_fullpath = $VirtualMachine_C_path + $VirtualMachine_C_name;\r\n$VirtualMachine_C_size = 128GB;\r\n\r\n##########################################################\r\n# variables to create D drive for the new HyperVisor\r\n##########################################################\r\n$VirtualMachine_D_path = &quot;D:\\$VmName\\Virtual Hard Disks\\&quot;;\r\n$VirtualMachine_D_name = $VmName + &quot;_D.vhdx&quot;;\r\n$VirtualMachine_D_fullpath = $VirtualMachine_D_path + $VirtualMachine_D_name;\r\n$VirtualMachine_D_size = 896GB;\r\n\r\n##########################################################\r\n# path for the ISO file to install OS\r\n##########################################################\r\n$OsIsoFilePath = &quot;D:\\ISO\\Windows Server 2016\\en_windows_server_2016_x64_dvd_2342342.iso&quot;\r\n\r\n\r\n##########################################################\r\n#\r\n#\r\n# Start the process\r\n#\r\n# \r\n##########################################################\r\n\r\n##########################################################\r\n# Open an remote session with the host\r\n##########################################################\r\nEnter-PSSession -computername $HyperVHost;\r\n\r\n\r\n##########################################################\r\n# Test the path where we want to create the new VHDX\r\n##########################################################\r\nif ( (Test-Path $VirtualMachine_C_path) -eq $false ) {\r\n    mkdir $VirtualMachine_C_path;\r\n}\r\nelseif ( (Test-Path $VirtualMachine_C_fullpath) -eq $true){\r\n    return &quot;The VHDX file already exists&quot;;\r\n    exit;\r\n}\r\n\r\n##########################################################\r\n# Create New VM with C drive\r\n##########################################################\r\nNew-VM -ComputerName $HyperVHost -Name $VmName -Generation 2 -MemoryStartupBytes $VmMemory -Path $VirtualMachine_VM_path -NewVHDPath $VirtualMachine_C_fullpath -NewVHDSizeBytes $VirtualMachine_C_size;\r\n\r\n\r\n##########################################################        \r\n# Create New D drive\r\n##########################################################\r\nif ( (Test-Path $VirtualMachine_D_path) -eq $false ) {\r\n    mkdir $VirtualMachine_D_path;\r\n}\r\nelseif ( (Test-Path $VirtualMachine_D_fullpath) -eq $true){\r\n    return &quot;The VHDX file already exists&quot;;\r\n    exit;\r\n}\r\n\r\nNew-VHD -Path $VirtualMachine_D_fullpath -ComputerName $HyperVHost -Dynamic -SizeBytes $VirtualMachine_D_size;\r\n\r\nAdd-VMHardDiskDrive -ComputerName $HyperVHost -VMName $VmName -ControllerType SCSI -Path $VirtualMachine_D_fullpath;\r\n\r\n\r\n##########################################################        \r\n# Configure Vm processors and NUMA\r\n##########################################################\r\n\r\nSet-VMProcessor -ComputerName $HyperVHost -VMName $VmName -Count $VmCpuCount -MaximumCountPerNumaNode $VmCpuCountPerNuma -MaximumCountPerNumaSocket $VmNumaPerSocket;\r\n\r\nSet-VMMemory -ComputerName $HyperVHost -VMName $VmName -MaximumAmountPerNumaNodeBytes $VmMemoryPerNuma;\r\n\r\n\r\n##########################################################        \r\n# Add ISO file to install OS\r\n##########################################################\r\n\r\nAdd-VMDvdDrive -ComputerName $HyperVHost -VMName $VmName -Path $OsIsoFilePath;\r\n\r\n##########################################################        \r\n# Allow nested virtual hosts\r\n##########################################################\r\n\r\nSet-VMProcessor -VMName $VmName -ExposeVirtualizationExtensions $true;\r\n\r\n##########################################################        \r\n# Add Network adapter\r\n##########################################################\r\n\r\nConnect-VMNetworkAdapter -ComputerName $HyperVHost -VMName $VmName -SwitchName $HyperVSwitchName;\r\nSet-VMNetworkAdapter -VMName $VmName -MacAddressSpoofing On; #Important for nested VMs to have access to the domain!!!!\r\n\r\n##########################################################        \r\n# Start the VM if we want to\r\n##########################################################\r\n\r\n#Start-VM -ComputerName $HyperVHost -Name $VmName;\r\n\r\n##########################################################        \r\n#\r\n#\r\n# at this point the machine is ready to get Windows installed\r\n#\r\n#\r\n##########################################################\r\n\r\nexit;\r\n\r\n<\/pre>\n<p>&nbsp;<br \/>\nHay un par de configuraciones que son espec\u00edficas para los Anfitriones Virtuales anidados, una es para permitir que el procesador se virtualice y la otra para permitir que la red funcione correctamente en la Vm.<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n##########################################################        \r\n# Allow nested virtual hosts\r\n##########################################################\r\n\r\nSet-VMProcessor -VMName $VmName -ExposeVirtualizationExtensions $true;\r\n\r\n##########################################################        \r\n# Add Network adapter\r\n##########################################################\r\n\r\nConnect-VMNetworkAdapter -ComputerName $HyperVHost -VMName $VmName -SwitchName $HyperVSwitchName;\r\nSet-VMNetworkAdapter -VMName $VmName -MacAddressSpoofing On; #Important for nested VMs to have access to the domain!!!!\r\n\r\n#\r\n<\/pre>\n<p>&nbsp;<br \/>\n<strong>Conclusion<\/strong><\/p>\n<p>Conclusi\u00f3n<\/p>\n<p>Como dije, no soy un experto en el uso de PowerShell ni en la administraci\u00f3n de servidores Windows Server, pero parece que hay comandos para todas nuestras necesidades, lo cual es sorprendente, no solo por lo f\u00e1cil que podemos hacer las cosas, sino por lo f\u00e1cil que podemos repetir el proceso en caso de necesitarlo.<\/p>\n<p>Todav\u00eda tengo que descubrir c\u00f3mo hacer un par de cosas m\u00e1s, como modificar la configuraci\u00f3n de red de la nueva VM o agregar la m\u00e1quina virtual a un dominio, etc. \u00a1pero seguro que en breve lo consigo!<\/p>\n<p>\u00a1Gracias por leer y a <a href=\"https:\/\/twitter.com\/sqldbawithbeard\" target=\"_blank\" rel=\"noopener\">@sqldbawithbeard<\/a> por organizar el evento de este mes y felicitaciones por su reciente MVP!<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>En esta entrada quiero compartir con vosotros como podemos user powershell para automatizar la creacion de maquinas virtuales en Hyper-V por simpleza y consistencia&nbsp;&nbsp;Esta publicaci\u00f3n forma parte del T-SQL Tuesday, que es&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,43],"tags":[62,60],"_links":{"self":[{"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/posts\/448"}],"collection":[{"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/comments?post=448"}],"version-history":[{"count":0,"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/posts\/448\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/media?parent=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqldoubleg.com\/es\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}