Ya hemos visto como funciona el Server Manager, y hemos grabado varios videos en cuanto a su funcionalidad: Administrando nuestros Servers 2008 con Windows Server 2012 Server Manager {ScreenCast}. Hoy veremos como podemos modificarlo con la ayuda de PowerShell. Usualmente el Dashboard del Server Manager se ve así:
Hoy me gustaría compartir con ustedes dos scripts que fueron publicados hace un tiempo, porque cuando se trata de la automatización del Administrador de servidores, no se puede hacer dos cosas:
-
Añadir servidores a la lista de servidores gestionados
-
Crear grupos que contienen una lista personalizada de servidores
Si vemos las opciones que se despliegan cuando hacemos un clic en Manage veremos las siguientes opciones:
Pero en primer lugar, echemos un vistazo detrás del Administrador de servidores. Esta consola almacena la información en un archivo XML que se guarda por usuario en este lugar:
$ENV:APPDATA\Microsoft\Windows\ServerManager\ServerList.xml
Además, es útil saber que cada vez que se cierra una instancia en ejecución del Administrador de servidores, podemos sobrescribir los cambios de secuencias de comandos. Queremos tener cuidado de que antes de hacer cambios en el archivo XML, cerramos el proceso Administrador de servidores. También tenemos que hacer todos los cambios con elevación de permisos.
Por mas que sea un simple archivo XML, no hay que simplificarlo, ya que si nos equivocamos la consola dejara de funcionar. Si vemos en detalle la estructura del archivo XML, se ve que esto no es tan simple. El siguiente ejemplo es de un sistema recién instalado con un grupo adicional:
ServerManager.xml
***
<?xml version="1.0" encoding="utf-8"?>
<ServerList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" localhostName="MyCloudComp001" xmlns="urn:serverpool-schema">
<ServerInfo name="MyCloudComp001" status="1" lastUpdateTime="2013-08-08T09:01:26.7659233+00:00" locale="en-US" /><ServerGroupInfo id="3" name="MyGroup" />
<ServerGroupMembership server="MyCloudComp001" serverGroupId="3" />
</ServerList>
***
Como se puede ver desde las líneas iniciales, la estructura XML se utiliza un espacio de nombres adicional que se denomina: urn:serverpool-schema. Cuando se desea agregar nuevos elementos a esta estructura, hay que hacerlo de forma manual. Para hacerlo podemos utilizar la secuencia de comandos del script Add-ServerToManagedServerList.ps1. Aquí están las líneas mas importantes:
$NewServer = $ServerList.CreateElement("ServerInfo")
$NewServer.SetAttribute("name",$ComputerName.ToString()) | Out-Null
$NewServer.SetAttribute("xmlns","urn:serverpool-schema") | Out-Null
$ServerList.ServerList.AppendChild($NewServer) | Out-Null
Así estableciendo el atributo justo en la notación de la derecha hace el truco para nosotros. Ahora tenemos el servidor que acaba de agregar en el Administrador de servidores.
Lo mismo ocurre cuando se trata de agregar el servidor a un grupo existente.
$NewServerInGroup = $ServerList.CreateElement("ServerGroupMembership")
$NewServerInGroup.SetAttribute("server",$ComputerName.ToString()) | Out-Null
$NewServerInGroup.SetAttribute("serverGroupId",$PSItem.Id) | Out-Null
$NewServerInGroup.SetAttribute("xmlns","urn:serverpool-schema") | Out-Null
$ServerList.ServerList.AppendChild($NewServerInGroup) | Out-Null
Debido a que este es un grupo existente, tenemos que asegurarnos de que el ID del grupo se agrega a los atributos de la entrada. Así que esta es la forma de agregar un nuevo servidor a la lista de servidores administrados. Sencillo, ¿no? Un nuevo grupo de servidores se muestra aquí:
También puede añadir algunos grupos personalizados con el script New-ServerManagerGroup.ps1. Se crea un número aleatorio y lo utiliza como el ID de grupo necesario.
$Global:ServerGroupID = Get-Random -Maximum 1000
$NewServerGroup = $ServerList.CreateElement("ServerGroupInfo")
$NewServerGroup.SetAttribute("id",$Global:ServerGroupID) | Out-Null
$NewServerGroup.SetAttribute("name",$Name) | Out-Null
$NewServerGroup.SetAttribute("xmlns","urn:serverpool-schema") | Out-Null
$ServerList.ServerList.AppendChild($NewServerGroup) | Out-Null
Aquí podemos ver interruptores adicionales, como -Backup (para guardar el ServerManager.xml anterior) y –StartServerManager (para el lanzamiento del Administrador de servidores después de sus adiciones). Tengamos en cuenta que los scripts proporcionados comprobemos siempre que no este un proceso servermanager.exe y en caso de ser necesario finalizarlo.
Los siguientes scripts se cargan en el Script Center Repository:
Espero les sea de interes y utilidad. Saludos. Roberto Di Lello.