Benutzerbild auf Domain anmelden

7

Wie kann ich das "Benutzerbild" für jeden einzelnen Benutzer ändern, das während der Anmeldung für Windows Vista, 7, 2008, 2008R2-Computer in einer Domäne angezeigt wird?

Nate
quelle
Ändern Sie das Benutzerbild für alle Benutzer auf einen Standardwert oder ändern Sie es auf Benutzerbasis? Ich werde (zumindest noch) keine Antwort senden, da ich dies wiederholt recherchiert und zahlreiche Antworten zum Festlegen eines Standards gefunden habe, aber keine zum Festlegen auf Benutzerbasis.
aNullValue
Ich bin daran interessiert, dies auf Benutzerbasis einzustellen.
Nate
Hier ist eine Möglichkeit, wie Sie dies tun können - ivan.dretvich.com/2011/02/gal-photos-in-exchange-2010
pk.
Es wurde ein Artikel gefunden, in dem beschrieben wird, wie Bilder in Active Directory hochgeladen und auf den Endbenutzercomputern angezeigt werden. blog.jocha.se/tech/ad-user-pictures-in-windows-10

Antworten:

3

Für die OSs Sie erwähnen, gibt es eine nicht veröffentlichte Funktion in shell32.dll , die genau das Richtige ist. Die Verwendung wird von Microsoft nicht unterstützt, aber ich hatte in mehreren Umgebungen keine Probleme. Der Einstiegspunkt ist # 262 .

Sie können es zur Verwendung in PowerShell wie folgt importieren:

# 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

Was bedeuten würde, dass Sie es im selben Skript so einfach aufrufen könnten wie:

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

Ich habe Folgendes als Anmeldeskript verwendet, das auch das Image aus AD herausholt:

# 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")

Ich sollte darauf hinweisen, dass ich seitdem auf die Verwendung einer kompilierten .NET-App umgestellt habe, die dasselbe tut, aber eine viel bessere Leistung aufweist - kritisch zum Zeitpunkt der Anmeldung.

Es gab mir auch die Möglichkeit, beim Start anzurufen und das Image für Benutzer festzulegen, die sich noch nicht an einem Computer angemeldet hatten. Dies war eine nette kleine Ergänzung für neue Benutzer, die ihr Gesicht auf ihrem zugewiesenen PC anstatt auf dem sehen konnten Standard orange Blume!

Es könnte auch erwähnenswert sein, dass wir ab Windows 8 komplett überarbeiten mussten - es gibt jetzt einen brandneuen Mechanismus von MS.

Alifen
quelle
1
Könnten Sie die von Ihnen verwendete Windows 8-Methode näher erläutern?
Signal15