martes, 16 de agosto de 2011

Exchange 2010 | ¿Quién está fuera de la oficina?

Con Outlook puedes averiguar si alguien de tu organización está fuera de la oficina, pero no puedes saber quienes son todos ellos.

Para obtener un fichero de texto "fuera_oficina.txt" con la lista con todos estos usuarios podemos ejecutar el siguiente script de Powershell desde un host que tenga instalada la consola de administración de Exchange o desde un servidor Exchange.

--- comienzo del script ---

# guarda fecha actual
$fecha_actual = Get-Date

# guarda los samaccounts de todos los buzones
$buzones = Get-Mailbox | %{$_.SamAccountName}

# crea una lista para guardar los samaccounts de todos los buzones fuera de oficina
$buzon_fuera_oficina = New-Object System.Collections.ArrayList

# procesa cada buzón (samaccountname)
foreach ($buzon in $buzones)
{
# extrae la configuración de "fuera de la oficina"
$fuera_oficina = Get-MailboxAutoReplyConfiguration $buzon
# si "fuera de la oficina" está activado y la fecha de activación es hasta hoy
if (($fuera_oficina.AutoReplyState -eq "scheduled") -and ($fuera_oficina.StartTime -le $fecha_actual))
{
# agrega a la lista el samaccount actual
$buzon_fuera_oficina.add($buzon)
}
}

# crea un fichero txt con la lista de samaccounts ordenada
$buzon_fuera_oficina | sort | out-file ./fuera_oficina.txt

--- fin del script ---


lunes, 8 de agosto de 2011

Actualizaciones pendientes | Windows Update

Una forma rápida y sencilla de averiguar qué servidores de un Directorio Activo tiene pendientes las actualizaciones de Windows Update es conocer los que tienen corriendo el proceso wuauclt.

Si además puedes enviarte un email semanal con esa información, garantizas que los servidores estén actualizados bajo tu supervisión con una frecuencia razonable.

Esto se puede hacer con un script PowerShell como el siguiente:

---- comienzo del script ---
# Busca el proceso wuauclt.exe para ver si hay actualizaciones pendientes
# en servidores Windows encontrados en Directorio Activo
# y reporta resultados por email
# 2011 - ramiro.encinas

$emailFrom = "from@dominio.es" # origen email
$emailTo = "to@dominio.es" # destino email
$subject = "Servidores con Windows Update activo" # asunto
$smtpServer = "smtp.dominio.es" # servidor SMTP destino

# Búsqueda de servidores Windows en Directorio Activo:

$strOperatingSystem = "Windows*Server*" # patrón a buscar para SO
$objDomain = New-Object System.DirectoryServices.DirectoryEntry # acceso servicio directorio
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher # buscador
$objSearcher.SearchRoot = $objDomain # búsqueda desde el raíz del directorio
$objSearcher.Filter = ("OperatingSystem=$strOperatingSystem") # filtro LDAP
$colProplist = "name" # propiedad name del SO

foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)} # carga de la propiedad name

$colResults = $objSearcher.FindAll() # búsqueda

$r = "`n" # texto del informe
$enviar = "no" # switch de envío

foreach ($objResult in $colResults) # Extracción de procesos por servidor encontrado
{
$objComputer = $objResult.Properties; # propiedades del servidor
$Server = $objComputer.name # nombre del servidor
$ErrorActionPreference = "SilentlyContinue" # no visualiza excepciones (servidores sin conexión)
Write-Host "Procesando $Server..." # mensaje
$encontrado = Get-Process -Name wuauclt -ComputerName $Server # búsqueda del proceso wuauclt
if ($encontrado) # si existe el proceso wuauclt
{
$r = $r + $Server + "`n"
$enviar = "si" # si uno al menos, envía email activando el switch
}
}

#envío email si procede
if ($enviar -eq "si")
{
$body = $r
$smtp = new-object Net.Mail.SmtpClient($smtpServer) # objeto smtp
$smtp.Send($emailFrom, $emailTo, $subject, $body) # envío del mensaje
}
--- fin del script ---

El script también está disponible desde aquí.

Los únicos parámetros que tienes que cambiar son los de las 4 líneas que hay al comienzo:

$emailFrom = "from@dominio.es" # origen email
$emailTo = "to@dominio.es" # destino email
$subject = "Servidores con Windows Update activo" # asunto
$smtpServer = "smtp.dominio.es" # servidor SMTP destino

Después puedes crear una tarea programada en un servidor que siempre esté encendido para ejecutar el script semanalmente y a esperar...