在Active Directory中批量更改配置文件的缩略图

时间:2018-07-02 12:23:55

标签: powershell active-directory

$l = import-csv -path "C:\art1\user.csv"

Foreach ($name in $l)
    {
        $photo = [byte[]](Get-Content "C:\Art\rem\$name.jpg" -Encoding byte) 
        Set-ADUser $name -Replace @{thumbnailPhoto=$photo}
    }

我试图将大量缩略图导入活动目录配置文件。但是上面的代码不断抛出错误。

任何人都可以帮忙,让我知道我要去哪里了吗?

  

获取内容:找不到路径'C:\ Art \ rem \ @ {xxx.abc = yyy.abc} .jpg',因为它不存在。
  在X:\ NewUser \ ProfilePic.ps1:5 char:31
  + ... $ photo = [byte []](获取内容“ C:\ Art \ rem \ $ name.jpg”-编码字节)
  + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo:ObjectNotFound:(C:\ Art \ rem \ @ {xxx.abc = yyy.abc} .jpg:String)[获取内容],ItemNotFoundException
  + FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

2 个答案:

答案 0 :(得分:4)

说明:

@{xxx.abc=yyy.abc}表示错误与您的数据结构有关。由于您使用Import-Csv,因此PowerShell将文件的第一行(即xxx.abc)解释为标题。

您需要确保对所拥有的数据格式使用正确的命令。如果希望它为.csv,则第一行应为标头名称(以fullname为例)。在这种情况下,您可以使用$($name.fullname)访问数据。

解决方案:

更合适,更快捷的解决方案是仅使用Get-Content而不是Import-Csv

答案 1 :(得分:1)

我现在将在环境中为您提供方法。

# Set the network path of the user pictures.
$NetworkPath = "\\FileServer\UserPictures"

# Get all the filesnames without the extension, every picture inside this folder should be named after the username of the user.
$UsersNames = Get-ChildItem -Path "$NetworkPath"| % {$_.BaseName}

# For each file name (username) go and convert into digital (byte encoding) the file then store it in a temporary value ($Photo).
# Then update the users jpegPhoto attribute on Active Directory with the $photo
foreach ($User in $UsersNames){
    $Photo = [Byte[]](Get-Content "$NetworkPath\$User.jpg" -Encoding Byte)
    Set-ADUser $User -Replace @{jpegPhoto=$Photo}
}

对不起,我以前的回答是不坐下来写下正确的答案是一个错误。 谢谢大家的评论。