在域上登录用户图片

Nat*_*ate 7 windows login active-directory

如何更改整个域中 Windows Vista、7、2008、2008R2 计算机在登录期间显示的每个个人用户的“用户图片”?

小智 3

对于你提到的操作系统,shell32.dll中有一个未发布的函数,这只是票证。微软不支持使用它,但我在几个环境中没有遇到任何问题。入口点是#262

您可以导入它以在 PowerShell 中使用,如下所示:

# 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
Run Code Online (Sandbox Code Playgroud)

这意味着您可以在同一脚本中调用它,如下所示:

[Shell32.ChangeUserTile]::ChangeUserPicture(<username>,<pathtoimage>)
Run Code Online (Sandbox Code Playgroud)

我使用以下内容作为登录脚本,该脚本也从 AD 中获取图像:

# 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")
Run Code Online (Sandbox Code Playgroud)

我应该指出,我已经转而使用已编译的 .NET 应用程序,它具有相同的功能,但具有更好的性能 - 在登录时至关重要。

它还让我可以选择在启动时调用并为尚未登录计算机的用户设置图像,这对于新用户来说是一个很好的小补充,因为他们可以在指定的 PC 上看到自己的脸,而不是在电脑上看到自己的脸。默认橙花!

还值得指出的是,从 Windows 8 开始,我们必须完全重新设计 - 现在微软有了一个全新的机制。