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