$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
答案 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}
}
对不起,我以前的回答是不坐下来写下正确的答案是一个错误。 谢谢大家的评论。