Sacar tipo index de una imagen .wim

miércoles, 29 de mayo de 2013 Sin comentarios

 

Hola.

Hacía tiempo que no me liaba con esto, pero como tampoco es que esta información sea fácil de encontrar por internet, os detallo el comando necesario para ver cual es la versión de sistema operativo que comprende el index X de una imagen .wim.

dism /get-wiminfo /WimFile:G:\w2012wims\install.wim /index:Número

image

Voy a ver si me lio con el script para que todo vaya del tirón en un despliegue con vhds. Espero subirlo por aquí pronto.

Categories: deployment Tags:

Hyper-v: Top free programs

viernes, 5 de abril de 2013 Sin comentarios

Hola.

Os dejo un enlace de un compañero MVP donde relaciona las
principales herramientas que solemos usar con Hyper-V. Veréis que siempre se
descubre algo ;).

http://social.technet.microsoft.com/wiki/contents/articles/2325.hyper-v-top-free-programs.aspx

Categories: Sin categoría Tags:

Script: inventario donde se relaciona usuario con equipo.

miércoles, 27 de marzo de 2013 Sin comentarios

 

Un problema común y fácilmente solucionable en todas los dominios, es el de asociar equipos con usuario.

Para tener un inventario y registro de usuarios que han pasado por cada uno de los equipos, hice un script bastante simple, el cual deja en una carpeta oculta en la red un registro con cierta información, como es: Usuario,dominio, nombre de equipo, fecha e ip. en un archivo de texto separado por comas.

$Date = Get-Date -format MM-dd-yyyy
$Time =     "{0:h:mm:ss tt zzz}" -f (get-date) #finalmente no se guarda para que funcione la búsqueda de duplicados.

$computer=get-content env:computername
$user= [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$Netip = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -computername localhost

add-content \\servidor\share$\Repositorio\infoequipos.txt -value ($user + "," + $computer + "," + $date + "," + $netip.ipaddress)

Saludos.

Categories: powershell Tags:

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:

Los 8 imprescindibles de Windows 8.

martes, 12 de marzo de 2013 Sin comentarios

 

Hola.

Seguro que si tenéis múltiples conexiones con la blogosfera, ya conocéis los que os vengo a decir Sonrisa.

 

El amigo @samuelltr a través de @estipro, se ha currado una serie de 8 webcast sobre Windows 8, en la que participarán 8 IT pros que a pesar de la “juventud” del sistema operativo, cuenta con mucho conocimiento sobre el mismo.

Aquí tenéis toda la información y registro:

http://technet.microsoft.com/es-es/dn186239.aspx

Yo por mi parte, me encargaré del webcast sobre “recovery” que se realizará el 16 de Abril a las 18:00 gmt +1.

 

¡Saludos!.

Categories: Sin categoría Tags:

Quitar aplicaciones de la interface Metro de una imagen / plantilla

jueves, 7 de marzo de 2013 Sin comentarios

 

Hola.

El comando para quitar aplicaciones que no queremos, en lo que va a ser nuestra imagen/plantilla corporativa, es el ya conocido dism.exe con las variables /image /remove-provisionedappxpackage y a continuación el parámetro correspondiente.

http://support.microsoft.com/kb/2769827

Saludos.

Categories: Sin categoría Tags:

Demo de Dynamic Access Control 2 de 2.

jueves, 15 de noviembre de 2012 Sin comentarios

 

Hola.

Lo prometido es deuda y en esta entrada os voy a recopilar los pasos de la demo de Dynamic Access Control.

El propósito de la demo es permitir acceso solo a usuarios del grupo administradores a documentos que contengan una cadena de números que coincide con el formato de una tarjeta de crédito (Ejemplo: 0000-0000-0000-0000) almacenados en una carpeta compartida, aunque podríamos generalizarlo de forma fácil a todas las carpetas del dominio, por ejemplo.

Para que veáis la potencia de DAC, esta demo se podría extender a por ejemplo, permitir acceso a estos documentos, solo a usuarios los cuales, tengan en el campo departamento en el AD, el texto “Financieros”.

Vamos allá. La demo continua tras la creación de un Share:

http://blogs.itpro.es/mhernandez/2012/11/08/compartir-carpeta-avanzada-con-server-manager-demo-dynamic-access-control-1/

Como requisito previo necesitamos:

Activación File Server Resource manager

image

image

Comprobar que tenemos acceso a Active Directory Administrative Center

image

image

No es imprescindible para esta demo, pero si la política que vamos a crear queremos que se aplique a todas las share, solo tenemos que marcar que Dynamic Access control se aplique en esta share.

image

 

Entramos en materia. Para hacerlo fácil, he recopilado algún script de powershell por la red, que he modificado debidamente para adaptarlo a mis pretensiones. Estos comandos lanzarán la creación de políticas y configuración en general que iremos revisando desde las consolas gráficas.

 

#file server resource manager
Set-ADResourceProperty PII_MS -Enabled $true
New-FsrmClassificationRule -Name ‘Tarjeta_credito’ -Namespace ‘c:\share’ -ClassificationMechanism ‘Content Classifier’ -Property PII_MS -PropertyValue 5000 –ContentRegularExpression ‘\b(?:\d[ -]*?){13,20}\b’ -ReevaluateProperty Overwrite
$schedule = New-FsrmScheduledTask -Time ’00:00′ –Weekly @(‘Sunday’,’Monday’,’Tuesday’,’Wednesday’,’Thursday’,’Friday’,’Saturday’)
Set-FsrmClassification -Schedule $schedule –Continuous

A ver…. en el comando anterior, creo una política a aplicar en principio sobre la carpeta c:\share que da valor 5000 (luego veremos qué es esto) a cualquier documento que contenga un texto “ \b(?:\d[ -]*?){13,20}\b’ de entre 13 y 20 caracteres, separado por guiones y esto se ha de aplicar 24 horas por día, 7 días por semana.

El resulta es la creación de una clasificación 5000 = High.

image

“High” según lo que vemos en Classification Rules, serán documentos que tengan la cadena que hemos visto antes ‘\b(?:\d[ -]*?){13,20}\b’.

image

image

 

Según el siguiente comando crearemos una regla y una política (politíca no es más que la agrupación de una o más reglas) que veréis en AD Administravie Center.

#Active directory administrative center
$condition = ‘(@RESOURCE.PII_MS >= 3000)’
$acl = ‘O:SYG:SYD:(A;;FA;;;OW)(A;;FA;;;BA)(A;;FA;;;SY)’
New-ADCentralAccessRule -Name ‘Regla PII’ -ResourceCondition $condition -CurrentAcl $acl

New-ADCentralAccessPolicy -Name ‘Politica de acceso restringido a inf’
Add-ADCentralAccessPolicyMember -Identity ‘Politica de acceso restringido a inf‘ -Members ‘Regla PII’

El fundamento de esto en resumen es: Vamos a tener una capa sobre los permisos efectivos de siempre, o sea, los que configuramos en la pestaña de seguridad de cualquier carpeta. Esta capa, tendrá unos permisos que sustituirán a los anteriores si las condiciones se cumplen.

image

image

image

Y lo que hemos hecho y visto en estas tres capturas anteriores, es que documentos con calificación HIGH, en realidad, con calificación mayor de 3000, tienen unos permisos que solo ofrecen acceso de lectura al grupo Administradores y lo importante es que no ofrecen permisos de lectura al grupo Domain Users. (aquí es donde podéis llegar a ofrecer solo acceso a usuarios con el texto “Financieros” en el campo departamento del AD, por ejemplo.

Tras ello, debemos crear dos GPOS, una aplicada a Domain controllers y otra a todos los equipos y servidores del dominio. En estas políticas lo importante es esto: Kerberos client support for claims, compound authentication and Kerberos armoring – Enabled y también propagar las política de DAC que hemos llamado ‘Politica de acceso restringido a inf‘.

Cómo esto es una entrada que requiere un grado medio alto de conocimiento en administración de Windows Server, os cuelgo las pantallas y sé que sabéis llegar solitos a las rutas Guiño.

image

image

image

En mi caso, voy a provocar el forzado de políticas en el equipo que opero y a un equipo remoto que se llama nodo1 desde donde el usuario tratará de abrir el documento.

Gpupdate /force
invoke-command -computername nodo1 -scriptblock { Gpupdate /force }

Aplicamos la política de DAC a la carpeta c:\share

image

 

Ahora vemos como un documento almacenado en Share y con un texto cualquiera, obtiene calificación NONE (se podría dar calificación HIGH manualmente incluso y con esto, a este documento no podrían acceder los usuarios).

image

Ahora vemos que tras añadir un texto que cumple con la cadena que buscamos, el documento adquiere calificación HIGH y en consecuencia, valoración 5.000 que es mayor de 3.000 (ya sé que es una obviedad pero ya sabéis por qué lo digo Sonrisa).

Al tiempo, comprobamos que un usuario administrador puede abrir perfectamente el documento.

image

 

Ahora iniciamos sesión en otro equipo con el usuario “usuario”.

image

Vemos que este usuario no tiene permitido la apertura del documento.

image

 

Esto es viejo, pero si explotamos la opción “Enable access-based enumeration”, el usuario que no tiene permiso, no ve el documento.

image

image

Veis, funciona. Curiosamente solo no me funcionó en el webcast, cosas del directo.

Categories: dac, Wserver2012 Tags:

Network policy server, 802.1x, y validación según certificado emitido de equipo o usuario.

miércoles, 14 de noviembre de 2012 Sin comentarios

 

Hola.

Basándonos en la configuración de NPS creada en las entradas enumeradas a continuación, vamos a realizar los cambios oportunos para validar desde un servidor NPS con certificado de servidor, equipos o usuarios que dispongan de un certificado emitido por una CA de confianza.

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo.html

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo_28.html

No hace falta decir que a este entrada, le complementa como requisito previo, perfectamente la existencia de una CA corporativo y Autoenrollmen de equipo o usuario.

http://technet.microsoft.com/en-us/library/cc730811.aspx

Los cambios que conseguirán esta clase de validación son:

Configurar la parte servidor para que la conectividad sea EAP (PEAP) y “por debajo” Smart card or other certificate (así le llama Microsoft), lo que realmente estamos provocando es tráfico TLS bajo EAP.

Para llegar a esa configuración solo tenéis que seguir los pasos que subrayo en la captura:

image

Indiferentemente a esto, también podéis añadir en la condiciones la pertenencia de este equipo o usuario a un grupo concreto del AD.

 

Parte cliente:

Pues lo mismo, pero en la configuración de la red inalámbrica.

Aquí veis como tenemos doble factor, por un lado debemos marcar cual es la CA que asegura el certificado de la comunicación EAP y luego, la CA que asegura el certificado individual del equipo o usuario.

image

Previamente a esto, en el equipo debemos contar con un certificado explícito del equipo o usuario, emitido por la CA. El certificado de usuario puede estar albergado en una Smart Card.

Además de esto, en la configuración de la red inalámbrica, es donde distingues si quieres enviar el certificado de equipo o usuario.

image_thumb6[1]

Categories: Sin categoría Tags:

Network Policy Server, Wireless, 802.1x y validación de cuentas de equipo.

miércoles, 14 de noviembre de 2012 Sin comentarios

 

Hola.

Aunque este no es demasiado demandado, realmente es sorprendente una red wireless con validación de equipo o usuario dependiente de ciertos condicionantes establecidos en el servidor NPS de Windows Server.

Ya hace un tiempo, os mostré como montar la validación por usuario:

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo.html

http://undercpd.blogspot.com.es/2012/02/integrar-wifi-con-directorio-activo_28.html

Hoy os enseño lo que tenéis que hacer para que la validación sea por equipo. Realmente son un par de cambios, pero es verdad que la red está llena de consultas de gente que no ha sabido establecer esa comprobación.

Los pasos serían:

Aseguraros que en la especificación de la red wifi en el equipo local o difundida por gpo, el modo de autentificación sea por equipo

image

 

En la parte del servidor, quitar la pertenencia a grupos de usuario y añadir como condicionante la pertenencia a un grupo del Directorio Activo.

image

Por supuesto, podemos añadir condicionantes como validación de salud, tener activdo el firewall, etc.

Saludos.

Categories: nps, Wserver2012 Tags:

Compartir carpeta avanzada con Server Manager (Demo Dynamic Access Control #1)

jueves, 8 de noviembre de 2012 Sin comentarios

 

Hola.

Vale, aunque en esta entrada, ya utilizaremos nuevas opciones en la forma de publicar y control de carpetas compartidas, esta no es una entrada especialmente técnica ni compleja. Podríamos decir que esta es la entrada nº 1 de las demo sobre Dynamic Access Control que realicé en el webcast sobre almacenamiento.

Como dije, mi intención es ir publicando las diferentes demos.

Previo

El rol relacionado con estas funcionalidades es File And Storage Services.

Paso a paso

1. Iniciar el asistente de creación de share y elegir la modalidad SMB Share Advanced.

 

image

 

image

 

image

 

image

 

image

He aquí el kit de la cuestión, debéis marcar

image

 

image

 

image

 

Saludos.

Categories: Dynamic Access Control, Wserver2012 Tags: