Initial Commit
This commit is contained in:
83
adphotosync.ps1
Normal file
83
adphotosync.ps1
Normal file
@@ -0,0 +1,83 @@
|
||||
[CmdletBinding(SupportsShouldProcess = $true)]Param()
|
||||
function Test-Null($InputObject) { return !([bool]$InputObject) }
|
||||
Function ResizeImage() {
|
||||
param([String]$ImagePath, [Int]$Quality = 90, [Int]$targetSize, [String]$OutputLocation)
|
||||
Add-Type -AssemblyName "System.Drawing"
|
||||
$img = [System.Drawing.Image]::FromFile($ImagePath)
|
||||
$CanvasWidth = $targetSize
|
||||
$CanvasHeight = $targetSize
|
||||
#Encoder parameter for image quality
|
||||
$ImageEncoder = [System.Drawing.Imaging.Encoder]::Quality
|
||||
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
|
||||
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($ImageEncoder, $Quality)
|
||||
# get codec
|
||||
$Codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where { $_.MimeType -eq 'image/jpeg' }
|
||||
#compute the final ratio to use
|
||||
$ratioX = $CanvasWidth / $img.Width;
|
||||
$ratioY = $CanvasHeight / $img.Height;
|
||||
$ratio = $ratioY
|
||||
if ($ratioX -le $ratioY) {
|
||||
$ratio = $ratioX
|
||||
}
|
||||
$newWidth = [int] ($img.Width * $ratio)
|
||||
$newHeight = [int] ($img.Height * $ratio)
|
||||
$bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
|
||||
$graph = [System.Drawing.Graphics]::FromImage($bmpResized)
|
||||
$graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
|
||||
$graph.Clear([System.Drawing.Color]::White)
|
||||
$graph.DrawImage($img, 0, 0, $newWidth, $newHeight)
|
||||
#save to file
|
||||
$bmpResized.Save($OutputLocation, $Codec, $($encoderParams))
|
||||
$bmpResized.Dispose()
|
||||
$img.Dispose()
|
||||
}
|
||||
|
||||
#get sid and photo for current user
|
||||
$user = ([ADSISearcher]"(&(objectCategory=User)(SAMAccountName=$env:username))").FindOne().Properties
|
||||
$user_photo = $user.thumbnailphoto
|
||||
$user_sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
|
||||
Write-Host "Updating account picture for $($user.displayname)..."
|
||||
#continue if an image was returned
|
||||
If ((Test-Null $user_photo) -eq $false) {
|
||||
Write-Host "Success. Photo exists in Active Directory."
|
||||
#set up image sizes and base path
|
||||
$image_sizes = @(32, 40, 48, 96, 192, 200, 240, 448, 1080)
|
||||
$image_mask = "Image{0}.jpg"
|
||||
$image_base = "C:\ProgramData\AccountPictures"
|
||||
#set up registry
|
||||
$reg_base = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{0}"
|
||||
$reg_key = [string]::format($reg_base, $user_sid)
|
||||
$reg_value_mask = "Image{0}"
|
||||
If ((Test-Path -Path $reg_key) -eq $false) { New-Item -Path $reg_key }
|
||||
#save images, set reg keys
|
||||
ForEach ($size in $image_sizes) {
|
||||
#create hidden directory, if it doesn't exist
|
||||
$progdatadir = $image_base + "\" + $user_sid
|
||||
If ((Test-Path -Path $progdatadir) -eq $false) { $(mkdir $progdatadir).Attributes = "Hidden" }
|
||||
#save photo to disk, overwrite existing files
|
||||
$file_name = ([string]::format($image_mask, $size))
|
||||
$pathtmp = $dir + "\_" + $file_name
|
||||
$path = $dir + "\" + $file_name
|
||||
Write-Host " saving: $file_name"
|
||||
$user_photo | Set-Content -Path $pathtmp -Encoding Byte -Force
|
||||
ResizeImage $pathtmp $size $size $path
|
||||
Remove-Item $pathtmp
|
||||
#save the path in registry, overwrite existing entries
|
||||
$name = [string]::format($reg_value_mask, $size)
|
||||
$value = New-ItemProperty -Path $reg_key -Name $name -Value $path -Force
|
||||
}
|
||||
Write-Host ("Copying to Public Account Pictures")
|
||||
try {
|
||||
$PublicAccPicsDir = "C:\Users\Public\AccountPictures\" + "$user_sid"
|
||||
If ((Test-Path -Path $PublicAccPicsDir) -eq $false) {
|
||||
(mkdir $PublicAccPicsDir).Attributes = "Hidden"
|
||||
} else {
|
||||
rm "$PublicAccPicsDir\*.*"
|
||||
}
|
||||
Copy-Item $progdatadir\*.* "$PublicAccPicsDir\"
|
||||
} catch {
|
||||
Write-Host "Couldn't copy to Public Account Pictures!"
|
||||
}
|
||||
Write-Host "Done!"
|
||||
}
|
||||
else { Write-Error "No photo found in Active Directory for $env:username" }
|
Reference in New Issue
Block a user