Pregunta Ingresa la imagen del usuario en el dominio


¿Cómo puedo cambiar la "imagen de usuario" para cada usuario indivudal que se muestra durante el inicio de sesión para las máquinas con Windows Vista, 7, 2008, 2008R2 en un dominio?


7
2017-07-29 20:47


origen


¿Cambiar la imagen del usuario a un valor predeterminado para todos los usuarios o cambiarla por usuario? No voy a enviar una respuesta (pero al menos), porque he investigado esto varias veces y he encontrado numerosas respuestas para establecer un valor predeterminado, pero ninguna para establecerlo por usuario. - aNullValue
Estoy interesado en establecer esto en una base por usuario. - Nate
Aquí hay una manera en que puedes hacer esto. ivan.dretvich.com/2011/02/gal-photos-in-exchange-2010 - pk.
Encontró un artículo que describe cómo cargar imágenes en Active Directory y cómo hacer que se muestren en las computadoras de los usuarios finales. blog.jocha.se/tech/ad-user-pictures-in-windows-10


Respuestas:


Para los sistemas operativos que mencionas, hay una función no publicada en shell32.dll eso es sólo el boleto. Microsoft no lo admitirá, pero no he tenido ningún problema en varios entornos. El punto de entrada es # 262..

Podría importarlo para su uso en PowerShell como a continuación:

# Set user tile
$code = @"
[DllImport("shell32.dll", EntryPoint = "#262", CharSet = CharSet.Unicode, PreserveSig = false)]
 public static extern void SetUserTile(string username, int whatever, string picpath);

public static void ChangeUserPicture(string username, string picpath) {
    SetUserTile(username, 0, picpath);
}
"@


Add-Type -MemberDefinition $code -NameSpace Shell32 -Name ChangeUserTile

Lo que significaría que podría llamarlo en el mismo script simplemente como:

[Shell32.ChangeUserTile]::ChangeUserPicture(<username>,<pathtoimage>)

He usado lo siguiente como un script de inicio de sesión que también toma la imagen de AD también:

# Set User Photo Script
# Reads user's photo from AD and sets as users local display picture

# Find User
$search = [System.DirectoryServices.DirectorySearcher][System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().GetDirectoryEntry()
$search.Filter = "(sAMAccountName=$env:username)"
$user = $search.FindOne().GetDirectoryEntry()

# Save image to %appdata%
$user.thumbnailphoto | Set-Content $env:appdata\usertilecache.jpg -Encoding byte

# Set user tile
$code = @"
[DllImport("shell32.dll", EntryPoint = "#262", CharSet = CharSet.Unicode, PreserveSig = false)]
 public static extern void SetUserTile(string username, int whatever, string picpath);

public static void ChangeUserPicture(string username, string picpath) {
    SetUserTile(username, 0, picpath);
}
"@

Add-Type -MemberDefinition $code -NameSpace Shell32 -Name ChangeUserTile
[Shell32.ChangeUserTile]::ChangeUserPicture(($env:userdomain + "\" + $env:username),($env:appdata + "\usertilecache.jpg"))

# Tidy up
Remove-Item ($env:appdata + "\usertilecache.jpg")

Debo señalar que desde entonces he cambiado a usar una aplicación .NET compilada que hace lo mismo, pero con mucho mejor rendimiento: crítico en el momento de inicio de sesión.

También me dio la opción de llamar en el momento de la puesta en marcha y establecer la imagen para los usuarios que aún no habían iniciado sesión en una máquina, lo que fue una pequeña adición para los nuevos usuarios que pudieron ver su cara en su PC asignada en lugar de la flor de naranja por defecto!

También podría valer la pena señalar que para Windows 8 en adelante tuvimos que rediseñar completamente, ahora hay un nuevo mecanismo de MS.


3
2017-09-12 16:43



¿Podrías elaborar sobre el método de Windows 8 que usas? - Signal15