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?
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?
Antworten:
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.