Archivo

Archivo para la categoría ‘Exchange’

Script que permite limpiar o subir fotografía a AD.

martes, 26 de marzo de 2013 Sin comentarios

 

Hola.

Os cuelgo a continuación un Script que he terminado y que permite al usuario subir o limpiar su foto del directorio activo, para que luego se alimente, ya sabéis, Exchange, Lync, etc.

Diréis, ¿Por qué no lo haces en C# y lo compilas?, pues porque lo he ido haciendo en mis ratos libres y como muchas otras cosas, nació para algo diferente. Pero me gusta porque el usuario lo puede lanzar con unas simples instrucciones (botón derecho, ejecutar con poweshell) y al contrario de algunas aplicaciones, no tiene por qué, tener derechos de administrador local para instalarse nada. Sonrisa

Como es común en estas cosas, solo tenéis que localizar y adaptar esta línea de aquí:

$root = [ADSI]’GC://dc=dominio,dc=local’ #Inyecta el dominio con el que trabajar

Se que es mejorable,  lo se Guiño.

También tiene varias funciones que os pueden servir de utilidad.

#——————————————————
#Script encargado de guardar o limpiar fotografía en AD del campo Thumbnailphoto

#Autor: Miguel Hernández

#——————————————————

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#——————————————————————————-
#Funciones
#——————————————————————————-

#Toma usuario y lo devuelve con valor $X0
function tomausuario
{

    $objForm0 = New-Object System.Windows.Forms.Form
    $objForm0.Text = "Fotografía en Directorio Activo"
    $objForm0.Size = New-Object System.Drawing.Size(300,120)
    $objForm0.StartPosition = "CenterScreen"

    $objForm0.KeyPreview = $True
    $objForm0.Add_KeyDown({if ($_.KeyCode -eq "Enter")
        {$x0=$objTextBox0.Text;$objForm0.Close()}})    #toma el valor X0
    $objForm0.Add_KeyDown({if ($_.KeyCode -eq "Escape")
        {$objForm0.Close()}})

    $objLabel0 = New-Object System.Windows.Forms.Label
    $objLabel0.Location = New-Object System.Drawing.Size(10,10)
    $objLabel0.Size = New-Object System.Drawing.Size(280,20)
    $objLabel0.Text = "Usuario:"
    $objForm0.Controls.Add($objLabel0)

    $objTextBox0 = New-Object System.Windows.Forms.TextBox
    $objTextBox0.Location = New-Object System.Drawing.Size(10,30)
    $objTextBox0.Size = New-Object System.Drawing.Size(260,20)
    $objForm0.Controls.Add($objTextBox0)

    $OKButton0 = New-Object System.Windows.Forms.Button
    $OKButton0.Location = New-Object System.Drawing.Size(110,60)
    $OKButton0.Size = New-Object System.Drawing.Size(75,23)
    $OKButton0.Text = "OK"
    $OKButton0.Add_Click({$x=$objTextBox0.Text;$objForm0.Close()})
    $objForm0.Controls.Add($OKButton0)

    $objForm.Topmost = $True

    $objForm0.Add_Shown({$objForm0.Activate()})
    [void] $objForm0.ShowDialog()

return $x0

}

#———————————————————-
#Función resultado
#———————————————————-

#Abre form con el valor $valor escrito.

function resultado
{

    $objForm0 = New-Object System.Windows.Forms.Form
    $objForm0.Text = "Resultado"
    $objForm0.Size = New-Object System.Drawing.Size(400,90)
    $objForm0.StartPosition = "CenterScreen"

    $objLabel0 = New-Object System.Windows.Forms.Label
    $objLabel0.Location = New-Object System.Drawing.Size(10,20)
    $objLabel0.Size = New-Object System.Drawing.Size(380,20)
    $objLabel0.Text = $valor
    $objForm0.Controls.Add($objLabel0)

       $objForm.Topmost = $True

    $objForm0.Add_Shown({$objForm0.Activate()})
    [void] $objForm0.ShowDialog()
}

#————————————————————-
#Función donde se abre ventana donde elegir fotografía
#————————————————————-

function Select-FileDialog
    {
        param([string]$Title,[string]$Directory,[string]$Filter="All Files (*.*)|*.*")
        [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
        $objForm = New-Object System.Windows.Forms.OpenFileDialog
        $objForm.InitialDirectory = $Directory
        $objForm.Filter = $Filter
        $objForm.Title = $Title
        $objForm.ShowHelp = $true
        $Show = $objForm.ShowDialog()

        If ($Show -eq "OK")
        {
            Return $objForm.FileName
        }
        Else
        {
            $valor = "Operación cancelada por el usuario."
            resultado $valor
        }
    }

#——————————————————
#Empieza el script
#——————————————————

#Ventana Form donde se pregunta la acción a realizar

$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Fotografía en Directorio Activo"
$objForm.Size = New-Object System.Drawing.Size(300,200)
$objForm.StartPosition = "CenterScreen"

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter")
    {$x=$objTextBox.Text;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")
    {$objForm.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,130)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
$objForm.Controls.Add($OKButton)

$objLabel0 = New-Object System.Windows.Forms.Label
$objLabel0.Location = New-Object System.Drawing.Size(10,10)
$objLabel0.Size = New-Object System.Drawing.Size(280,20)
$objLabel0.Text = "1. Limpiar fotografía actual"
$objForm.Controls.Add($objLabel0)

$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Size(10,30)
$objLabel1.Size = New-Object System.Drawing.Size(280,20)
$objLabel1.Text = "2. Cambiar fotografía"
$objForm.Controls.Add($objLabel1)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,130)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancelar"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,70)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "Seleccionar acción:"
$objForm.Controls.Add($objLabel)

$objTextBox = New-Object System.Windows.Forms.TextBox
$objTextBox.Location = New-Object System.Drawing.Size(10,90)
$objTextBox.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBox)

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

#Devuelve el valor $X con 1 o 2 = 1: Limpiar fotografía / 2: Cambiar fotografía

$SAMName = tomausuario  #Pregunta el usuario

    $root = [ADSI]’GC://dc=dominio,dc=local’  #Inyecta el dominio con el que trabajar
    $searcher = new-object System.DirectoryServices.DirectorySearcher($root)
    $searcher.filter = "(&(objectClass=user)(sAMAccountName=$SAMName))"
    $user = $searcher.findall()
    $userdn = $user[0].path
    $userdn = $userdn.trim("GC")
    $userdn = "LDAP" + $userdn
     
      
IF ($x -EQ "1") {

    try
    {
        $user = [ADSI]($userdn)
        $user.Properties["thumbnailPhoto"].Clear()
        $user.CommitChanges()
        $valor = "La fotografía ha sido borrada del servidor"
        resultado $valor
    }
    catch
    {
        $valor = "La fotografía no ha podido ser borrada del servidor"
        resultado $valor
    }
       
}

IF ($x -EQ "2") {
  
    try
    {
        $photo = Select-FileDialog -Title "Selecciona una fotografía (ext.jpg o .png)" -Directory "%userprofile%" -Filter "JPG Images (*.jpg)|*.jpg|PNG Images (*.png)|*.png"
        [byte[]]$file = Get-Content $photo -Encoding Byte
        $user = [ADSI]($userdn)
       
        # Limpiar foto anterior
        $user.Properties["thumbnailPhoto"].Clear()

        # Guardar fotografía
        $user.Properties["thumbnailPhoto"].Add($file)
        $user.CommitChanges()
        $valor = "La fotografía ha sido guardada del servidor"
        resultado $valor
    }
    catch
    {
        $valor = "La fotografía no ha sido guardada en el servidor"
        resultado $valor
    }      
}

Categories: Directorio Activo, Exchange, lync, powershell Tags:

>Desactivar "Reply All"

miércoles, 30 de septiembre de 2009 1 comentario

>Hola.

No es el final de todos nuestros males, pero diría que en gran parte si lo es.

El equipo de Exchange ha colgado un post de imprescindible lectura para todos nosotros, nos explican como desactivar la opción de «Responder a todos» de Outlook por gpo.

http://msexchangeteam.com/archive/2009/09/29/452689.aspx Parte 1.
http://msexchangeteam.com/archive/2009/09/30/452724.aspx Parte2

«Reply-All Storms» nunca mejor dicho.

Categories: Directorio Activo, Exchange, Outlook Tags:

>Cambiar almacenamiento en Cluster 2003

lunes, 3 de agosto de 2009 Sin comentarios

>Más sencillo que ampliar la garantía de una cabina es la sustitución de la misma y debido al alarmante aumento en las ventas de las mismas, incentivado en gran parte por el auge de la virtualización, nos vamos a ver cada vez más enfrascados en líos de estos:

http://msmvps.com/blogs/clusterhelp/archive/2005/08/05/61741.aspx

Categories: Cluster, Exchange Tags:

>How to migrate the BlackBerry Enterprise Server from Microsoft Exchange Server 2000 or 2003 to Microsoft Exchange Server 2007

martes, 26 de mayo de 2009 Sin comentarios
Categories: Blackberry, Exchange Tags:

>Buzones de recursos en Exchange 2003, Exchange 2000 y Exchange 2007

lunes, 2 de febrero de 2009 Sin comentarios

>Hola.

En Exchange se nos permite crear los llamados buzones de recursos, enfocados principalmente para reserva de salas, proyectores, etc.

En Exchange 2000 y 2003, la configuración de todo esto es mas bien básica, se trata de un usuario con autorespuesta ante la invitación de citas, aceptando la reunión si está libre y rechazándola si está ocupado el día y a la hora indicados.

Unas guías de configuración las tenéis aquí:
http://www.msexchange.org/tutorials/MF019.html

Guía de implementación y administración del Agente de aceptación automática
http://technet.microsoft.com/es-es/library/aa997184(EXCHG.65).aspx

A partir de Exchange 2007 y Outlook 2007, esto se ha concretado y exchange 2007 nos permite crear un buzón del tipo «Recurso» a un usuario exitente y que se aconseja que tenga el nombre de la sala, dando Exchange automáticamente, todas las configuraciones que antes teníamos que realizar a mano para conseguir esa gestión atuómata de la agenda.

Managing Resource Mailboxes
http://technet.microsoft.com/en-us/library/bb124374.aspx

How to Create a Room Mailbox
http://technet.microsoft.com/en-us/library/bb124952.aspx

How to Create an Equipment Mailbox
http://technet.microsoft.com/en-us/library/bb124925.aspx

How to Configure Resource Mailbox Properties
http://technet.microsoft.com/en-us/library/aa996915.aspx

Saludos.

Categories: Exchange, Exchange 2007 Tags:

>Aumentar B.D. Exchange 2003 sp2

jueves, 8 de enero de 2009 Sin comentarios

>Hola.

Nos hemos dado cuenta que mi entrada sobre como aumentar la b.d. de Exchange 2003, con fecha de septiembre de 2007, se quedó antigua con la llegada del sp2, así que ya está actualizada.

http://undercpd.blogspot.com/2007/09/aumentar-base-de-datos-de-exchange.html

Categories: Exchange Tags:

>Cambios en soporte y licenciamiento de productos virtualizados

miércoles, 20 de agosto de 2008 Sin comentarios

>Hola.

Nuevo e importante artículo anunciado por Microsoft desde la web del equipo de producto de Exchange que no tengo tiempo de comentar, os dejo con el link:

«1.Microsoft now supports Exchange Server 2007 SP1 running Hyper-V or hypervisors validated under the Microsoft Server Virtualization Validation Program (SVVP).

2.Microsoft is waiving its 90-day license reassignment policy to enable customers who virtualize Exchange to move their licenses between servers within a data farm as often as necessary.»

http://msexchangeteam.com/archive/2008/08/19/449621.aspx

Categories: Exchange, Virtualización Tags:

>Desastre en controlador de dominio con Exchange 2003

viernes, 18 de julio de 2008 1 comentario

>Hola.

Me ha llegado hoy una incidencia sobre un desastre de un controlador de dominio, que además era el servidor de correo de la organización. Ante un desastre así, lo mejor es echar mano de la documentación y pensar ¿a quien le ha podido pasar ya?, en internet he recopilado información que puede ser de ayuda para solucionar este estropicio, pero creo es en estos casos donde está sobrádamente justificada la cuota de 250€ +/- por tener soporte en Microsoft.

Cómo quitar por completo huérfano controlador de dominio http://support.microsoft.com/kb/555846/es
Una vez limpio el Ad de los restos que quedaron del controlador de dominio que ya no estará y asumidos los roles por otro controlador de dominio, se trata de instalar un windows 2003 nuevecito y promocionarlo como controlador de dominio y catálogo globa, hecho esto, la guía siguiente nos ayudará a instalar Exchange 2003 en una organización donde ya había uno anteriormente.
Por ejemplo, si no se tiene copia de seguridad, en las páginas 207, 208 explican como:
Cómo reparar un servidor miembro

Si se tiene copia de seguridad la guía explica como:

Copiar y restaurar en el caso de ser un servidor miembro

Copia y restaurar en el caso de ser un servidor controlador de dominio

En el caso de tener que recuperar una copia de seguridad de Exchange realizada con Ntbackup, el organigrama siguiente os va a venir muy bien:

Categories: desastres, Directorio Activo, Exchange Tags:

>Test Exchange Connectivity

lunes, 19 de mayo de 2008 Sin comentarios

>

Un par de programadores del equipo de Exchange, ha ideado una web donde podeis probar los protocolos de conexión remota a vuestro exchange, aquí os dejo el link:
Se aconseja la utilización de un usuario y contraseña de prueba.
Categories: Exchange Tags:

>Mobile 6.1

lunes, 7 de abril de 2008 Sin comentarios

>Hola de nuevo.

Gracias a la última entrada de Joshua Saens (Microsoft MVP – Exchange), me he enterado que ya está liberado windows Mobile 6.1, sabia que estaba al caer.

Joshua os explica todas las virtudes:

http://www.saenzguijarro.com/post/2008/04/Ya-esta-disponible-Microsoft-Windows-Mobile-61.aspx

Categories: Exchange, Windows Mobile Tags: