viernes, 12 de marzo de 2010

Despiste 9: Cambiar de usuario en los servicios de vCenter

Este quizá sea uno de los despistes más clásicos, típicos y que dan más coraje de sufrir, sobre todo cuando es la tercera o cuarta vez que le ocurre a uno. A ver, os pongo en situación: uno se pone a hacer el despliegue de una nueva plataforma de vSphere (migración o no) con toda la ilusión del mundo, instala su servidor de base de datos, prepara la base de datos, monta el que va a ser el servidor de vCenter, configura su DSN, instala el software correspondiente (vCenter, Update Manager, Guied Consolidation, etc...), se instala su vSphere client, añade sus hosts y hace las primeras configuraciones de prueba y... Voilá!! todo perfecto, una maravilla, una pasada... (aquí van todos los calificativos que se os ocurran).

En este punto uno reflexiona y dice: "vale, lo he instalado todo con un usuario que es administrador del dominio y esto al de seguridad (o sea YO) no le va a gustar nada, así que vamos a securizarlo un poco" . Activamos el cortafuegos, autorizamos los puertos correspondientes (80, 443, 389,636, 902,903, 8084, 9084 y 9087), revisamos las cuentas de servicios y nos encontramos con la desagradable "sorpresa" (no es tan sorpresa porque el programa de instalación ya nos lo advirtió) de que la cuenta de servicio asociada a los servicios VMware VirtualCenter Server y VMware VirtualCenter Management Webservices tiene asociada la cuenta de administrador con la que hice la instalación (mal royo). Como administradores preocupados por la seguridad vamos y cambiamos la cuenta de servicio por una cuenta sin privilegios que tenemos en el dominio para este tipo de cositas. Vamos a iniciar los servicios de nuevo y... yastá, yalaliaopardadiosmiodemivida!!!! el servicio de VMware VirtualCenter Server no arranca dando un simpático mensajito de error del tipo:

Failed to init tableDef: Column VER_ID does not exist in table VPX_VERSION. Database version may be incompatible.
El problema está en que la cuenta que está autorizada en el servidor SQL Server es la de la instalación original, con lo cual tendremos que toquetear la base de datos. El procedimiento no es original mío, lo he sacado de las communities de vmware, así que podeis ver el post original aquí (en Inglés).

Para los que no queráis traducir, básicamente los pasos a seguir son los siguientes:


  1. Abrir el SQL Server Management Studio
  2. Buscamos la base de datos de VMware. Si hemos seguido al dedillo el manual de instalación esta será VCDB
  3. Navegamos por el árbol de la base de datos hasta VCDB->Seguridad->Esquemas->db_owner
  4. Abrimos las propiedades del esquema y le cambiamos el valor del parámetro Propietario del esquema del valor original <vcuser>(el de la instalación inicial) a dbo
  5. Eliminamos el usuario <vcuser> de la base de datos. Eso lo podemos encontrar en VCDB->Seguridad->Usuarios. Cuidado de no eliminar el login del servidor con el que se mapea ese usuario.
  6. Abrimos una nueva ventana de consulta SQL
  7. Lanzamos la siguiente consulta, cambiando <vclogin> por el nombre del nuevo usuario de la cuenta de servicio que le hemos asociado a los servicios de VMware:
    1. EXEC sp_changedbowner @loginame = ‘<vclogin>’, @map = ‘true’ 
  8. Iniciamos los servicios afectados en el servidor de vCenter
  9. FIN
Espero que este POST os ahorre los dos días de dolores de cabeza que me ha llevado a mi solucionar el "problemita"

jueves, 21 de enero de 2010

Despiste 8: Obtener el listado de certificados de una máquina remota

En esta ocasión os dejo un script para obtener el listado de los certificados digitales instalados en el almacén de equipo de una máquina remota. No hay una forma simple de hacer esto con powershell, así que rompiendome bastante la cabeza y navegando por un montón de foros he ido cazando piezas de otros scripts y trozos de código en otros lenguajes para crear este pequeño (aunque creo que útil) script.

El script toma como parámetros el nombre de máquina a la que conectarse (-computerName) y el almacén al que conectarse (-store). Las opciones válidas para el almacén son:

  • "Root": para el almacén de certificados raíz de confianza
  • "My": para el almacén del certificados personal
  • "CA": para el almacén de certificados de entidades emisoras de certificados intermedias
  • "TRUST": para el almacén de certificados de confianza empresarial
Es necesario lanzar el script con privilegios de administrador sobre la máquina remota.

Me gustaría también comentaros que el script está en fase alpha y es inestable, por lo que no os puedo asegurar al 100% que funcione en todas las ocasiones, aunque a mí me ha funcionado.

Aquí os dejo el link para que podáis descargar el script: Get-RemoteCerts.ps1

Ver también: social technet

martes, 12 de enero de 2010

Despiste 7: Aumentar el periodo de evaluación de Windows Server 2008

Seguramente no soy el único que monta servidores Windows 2008 para hacer su pruebas antes de pasar a mayores. El problema de tener estos servidores es que si queremos cumplir con la legalidad debemos instalarle su correspondiente licencia, pero lo cierto y verdad es que a nadie le hace mucha gracia tener que duplicar los costes de licencia simplemente por tener una plataforma para hacer el bestia.

Como sabreis, el periodo evaluación de los Windows Server 2008 (cualquier versión) es de 60 días, pero si ejecutamos el comando slmgr.vbs -rearm, podremos resetear este periodo de evaluación hasta en tres ocasiones más, contando con un periodo de evaluación total de 240 días.

Despiste 6: Cambiar el canal de licencia de un Windows XP

Bueno, después de algún tiempo si escribir nada, ya va siendo hora de ponerse a "currar" un poquito :).
Este quizás sea uno de los problemas clásicos a los que la mayoría de los administradores Windows nos hemos enfrentado en alguna ocasión, la reactivación de la licencia de un windows XP después de un clonado o una virtualización.
A ver, os pongo un poco en antecedentes para que podáis tener una perspectiva completa del problema al que me ha tocado enfrentarme en esta ocasión. Como ya os he comentado en alguna ocasión, me toca administrar una plataforma de VMware más o menos grande, en la que además utilizo VMware View. Pues bien, como era de esperar tenía que llegar el momento en el que se empezaran a virtualizar los escritorios de los usuarios. Si la virtualización de estos escritorios se hiciera desde cero, esto no supondría ningún problema, lanzamos el converter, le decimos la máquina que queremos importar, esperamos un "ratito" y ... voilá, PC virtualizado y listo para ser utilizado.
¿Donde está el problema entonces?, pues en que evidentemente no vivimos en un mundo ideal y que la virtualización de escritorio que se pide es la de los PCs de usuarios que ya tienen instalados, configurados y personalizados a su gusto. Si tenemos mala suerte nos podemos encontrar en el siguiente caso: El PC de usuario tiene un WindowsXP preinstalado (OEM) y queremos virtualizarlo. En este punto me gustaría hacer un pequeño inciso y aclarar un poco los canales de licenciamiento de Microsoft.

Microsoft cuenta con tres canales de licenciamiento:
  • OEM, una licencia de coste reducido que se obtiene cuando compramos un ordenador con Windows PreInstalado. Esta licencia está asociada al hardware y no se puede reutilizar en otro hardware diferente.
  • Retail (RTL), es la licencia que adquirimos si compramos el software original para instalaciones limpias o actualizaciones. Existen ciertas restricciones en cuanto al movimiento de licencia si hemos adquirido un software de actualización.
  • Volume License (VLK), es la típica licencia corporativa donde con una única clave de producto podemos licenciar un gran número de equipos.
Pues bien, el problema se presenta cuando hemos instalado Windows XP con un CD de instalación OEM y después de haberle pasado el sysprep y haberlo virtualizado (para los clones pasa lo mismo) intentamos licenciarlo con una clave VLK o RTL. La solución a este problema pasa simplemente por obtener un cd del canal de licenciamiento apropiado y hacer una reparación del sistema desde el CD de instalación, es decir, arrancando desde el CD e iniciando el proceso de instalación, pero en lugar de machacar la instalación antigua, le decimos que la repare. Tened cuidado de no entrar en la consola de reparación que nos ofrece al principio el programa de instalación.

Tened cuidado en el caso de las máquinas virtuales, que la controladora SCSI que configura VMware por defecto no viene soportada por el programa de instalación de Windows XP, así que tendreis que añadir el controlador de forma manual.

Referencias:

martes, 13 de octubre de 2009

OneLiner 3: Detección de errores de conectividad en las vmhba de fibra

Buenas, os paso un OneLiner encargado de recoger la configuración de HBAs de fibra asociadas a los servidores ESX de un cluster determinado e imprimir el estado de las mismas. Si existe cualquier fallo de conexión con la SAN se mostrará la hba y su correspondiente WWNP (Port World Wide Name) en rojo.

 foreach ($esx in $(get-vmhost -Location (get-cluster '<cluster>') | ? {$_.State -eq 'Connected'})) {(get-view (get-vmhoststorage $esx).Id).StorageDeviceInfo.HostBusAdapter | % {if ($_.key -match 'FibreChannel') {if ($_.status -ne 'online') { Write-Host ("Host: {0} - HBA: {1} - WWNP: {2:X}" -f $esx.name,$_.Device,$_.PortWorldWideName) -Foreground Red} else { Write-Host ("Host: {0} - HBA: {1} - WWNP: {2:X}" -f $esx.name,$_.Device,$_.PortWorldWideName) -Foreground Green}}}}

Si en lugar de controlar los ESX que están en un cluster quereis controlar todos los ESX de vuestro datacenter simplemente teneis que eliminar la parte: -Location (get-cluster '<cluster>'). El OneLiner controla el estado de los servidores, de forma que sólo interroga a los ESX que están conectados actualmente al Virtual Center, sin tener en cuenta si el ESX está en modo mantenimiento o en modo desconectado.

viernes, 2 de octubre de 2009

OneLiner 2: Modificar la configuración NTP de los servidores ESX

Esta mañana estaba revisando unos logs cuando de repente... sorpresa!!! la hora de las entradas del log no tenían sentido ninguno. El problema evidente era que la hora del sistema no era la correcta, así que me puse a revisar la configuración del cliente ntp y... voilá! estaban mal. El paso siguiente y evidente era corregir la configuración del cliente ntp, pero claro (y por murphy...), no en un único ESX, ... ¡sino en todo el datacenter!. Solución, script al canto. En este caso tres oneliner:
  • Un OneLiner para consultar la configuración ntp de todos los hosts del datacenter:
Get-VMHost |Sort Name|Select Name, @{N=“NTPServer“;E={$_ |Get-VMHostNtpServer}}, @{N=“ServiceRunning“;E={(Get-VmHostService -VMHost $_ |Where-Object {$_.key-eq “ntpd“}).Running}}
  • Otro OneLiner para eliminar los servidores incorrectos, ya que no se puede hacer sustituciones directamente:
Get-VMHost | Sort Name | Remove-VMHostNtpServer @("servidor1","servidor2",...)
  • Otro para añadir la configuración correcta de servidores:
Get-VMHost | Sort Name | Add-VMHostNtpServer -NtpServer @("servidor1","servidor2",...)
  • Y el último para reiniciar el servicio de ntp, para que el servicio actualice los cambios en la configuración:

Get-VmHostService -VMHost (Get-VMHost | Sort Name) | Where_Object {$_.key -eq "ntpd"} | Restart-VMHostService
 Aprovecho ya también para llamaros la atención sobre este último OneLiner. Si observais, básicamente lo que hace este OneLiner es localizar un servicio, en nuestro caso ntpd y reiniciar el servicio. Si cambiais ntpd por el nombre del servicio que os interese y el cmdlet Restart-VMHostService por Start-VMHostService o Stop-VMHostService, podeis gestionar los servicios de los ESX de vuestro datacenter de forma remota. Por supuesto, esta no es la única forma de hacerlo, simplemente una más :).

jueves, 1 de octubre de 2009

Despiste 5: Dividir un fichero de texto en partes de tamaño fijo

En esta ocasion os dejo un script que toma un fichero de texto y lo divide en partes de tamaño fijo. El script lo podeis descargar desde:

http://dl.getdropbox.com/u/1039818/Blog/Windows/split-file.ps1

Para hacer honor a la verdad, este script no ha sido una creación mía, sino una modificación de un script que he encontrado por la red (escrito por Josh Einstein) que hace lo mismo, pero divide el fichero de texto en el número de partes que se le pasa como parámetro, sin poder definir el tamaño de las partes. Si quereis acceder al original, lo encontrareis en este enlace:

http://stackoverflow.com/questions/1001776/how-can-i-split-a-text-file-using-powershell/1003866#1003866