@echo off rem Created for Windows 10 AME, tested on version 20H2 rem Author: Logan Darklock (no spam please) rem Co-author: lucid cls echo :: Windows 10 AME User Icon Changer echo. echo Working... echo. setlocal set SCRIPT=%0 set IMAGE=%1 set SID=%2 if "%IMAGE%" == "" ( cls echo :: Windows 10 AME User Icon Changer echo. echo To change the user icon, drag-and-drop echo an image file onto the script icon. goto pause ) rem Verify image extension, per lucid's request set NAME=%IMAGE:"=% rem Convert to lowercase set NAME=%NAME:A=a% set NAME=%NAME:B=b% set NAME=%NAME:C=c% set NAME=%NAME:D=d% set NAME=%NAME:E=e% set NAME=%NAME:F=f% set NAME=%NAME:G=g% set NAME=%NAME:H=h% set NAME=%NAME:I=i% set NAME=%NAME:J=j% set NAME=%NAME:K=k% set NAME=%NAME:L=l% set NAME=%NAME:M=m% set NAME=%NAME:N=n% set NAME=%NAME:O=o% set NAME=%NAME:P=p% set NAME=%NAME:Q=q% set NAME=%NAME:R=r% set NAME=%NAME:S=s% set NAME=%NAME:T=t% set NAME=%NAME:U=u% set NAME=%NAME:V=v% set NAME=%NAME:W=w% set NAME=%NAME:X=x% set NAME=%NAME:Y=y% set NAME=%NAME:Z=z% if "%NAME:~-4%" == ".jpg" (goto validextension) if "%NAME:~-5%" == ".jpeg" (goto validextension) if "%NAME:~-4%" == ".png" (goto validextension) if "%NAME:~-4%" == ".gif" (goto validextension) if "%NAME:~-4%" == ".bmp" (goto validextension) cls echo :: Windows 10 AME User Icon Changer echo. echo Invalid image format! echo. echo Supported image formats: .jpg, .jpeg, .png, .gif, .bmp goto pause :validextension if "%SID%" == "" ( rem When this script is elevated to admin permissions we keep track of the rem SID of the user whose icon is being changed. This is passed as a third rem argument so we can target registry changes and resized pictures to the rem correct folder. for /f "skip=1" %%w in ('"wmic path win32_useraccount where name='%USERNAME%' get sid"') do ( set SID=%%w goto sidend ) ) :sidend timeout /t 1 /nobreak > NUL openfiles > NUL 2>&1 if not %errorlevel% == 0 ( cls echo :: Windows 10 AME User Icon Changer echo. echo Elevating to administrator... powershell "Start-Process """%SCRIPT:"=`"""%""" -ArgumentList """%IMAGE:"=`"""% %SID:"=`"""%""" -Verb RunAs" goto end ) rem On recent Windows 10 versions, resolutions called for are: rem 32x32, 40x40, 48x48, 64x64, 96x96, 192x192, 208x208, 240x240, 424x424, rem 448x448, 1080x1080 rem This is ridiculous and I don't know why it can't be resized dynamically by rem Windows, but sure set FOLDER=%PUBLIC%\AccountPictures\%SID% md "%FOLDER%" >nul 2>&1 takeown /r /d Y /f "%FOLDER%" >nul icacls "%FOLDER%" /reset /t >nul del /q /f "%FOLDER%\*" > nul rem Set word wrap to 80 columns and this will become readable. I'm so sorry... powershell "Add-Type -AssemblyName System.Drawing; $img = [System.Drawing.Image]::FromFile((Get-Item """%IMAGE:"=`"""%""")); $a = New-Object System.Drawing.Bitmap(32, 32); $graph = [System.Drawing.Graphics]::FromImage($a); $graph.DrawImage($img, 0, 0, 32, 32); $a.Save("""%FOLDER:"=`"""%\32x32.png"""); $b = New-Object System.Drawing.Bitmap(40, 40); $graph = [System.Drawing.Graphics]::FromImage($b); $graph.DrawImage($img, 0, 0, 40, 40); $b.Save("""%FOLDER:"=`"""%\40x40.png"""); $c = New-Object System.Drawing.Bitmap(48, 48); $graph = [System.Drawing.Graphics]::FromImage($c); $graph.DrawImage($img, 0, 0, 48, 48); $c.Save("""%FOLDER:"=`"""%\48x48.png"""); $d = New-Object System.Drawing.Bitmap(64, 64); $graph = [System.Drawing.Graphics]::FromImage($d); $graph.DrawImage($img, 0, 0, 64, 64); $d.Save("""%FOLDER:"=`"""%\64x64.png"""); $e = New-Object System.Drawing.Bitmap(96, 96); $graph = [System.Drawing.Graphics]::FromImage($e); $graph.DrawImage($img, 0, 0, 96, 96); $e.Save("""%FOLDER:"=`"""%\96x96.png"""); $f = New-Object System.Drawing.Bitmap(192, 192); $graph = [System.Drawing.Graphics]::FromImage($f); $graph.DrawImage($img, 0, 0, 192, 192); $f.Save("""%FOLDER:"=`"""%\192x192.png"""); $g = New-Object System.Drawing.Bitmap(208, 208); $graph = [System.Drawing.Graphics]::FromImage($g); $graph.DrawImage($img, 0, 0, 208, 208); $g.Save("""%FOLDER:"=`"""%\208x208.png"""); $h = New-Object System.Drawing.Bitmap(240, 240); $graph = [System.Drawing.Graphics]::FromImage($h); $graph.DrawImage($img, 0, 0, 240, 240); $h.Save("""%FOLDER:"=`"""%\240x240.png"""); $i = New-Object System.Drawing.Bitmap(424, 424); $graph = [System.Drawing.Graphics]::FromImage($i); $graph.DrawImage($img, 0, 0, 424, 424); $i.Save("""%FOLDER:"=`"""%\424x424.png"""); $j = New-Object System.Drawing.Bitmap(448, 448); $graph = [System.Drawing.Graphics]::FromImage($j); $graph.DrawImage($img, 0, 0, 448, 448); $j.Save("""%FOLDER:"=`"""%\448x448.png"""); $k = New-Object System.Drawing.Bitmap(1080, 1080); $graph = [System.Drawing.Graphics]::FromImage($k); $graph.DrawImage($img, 0, 0, 1080, 1080); $k.Save("""%FOLDER:"=`"""%\1080x1080.png"""); " set KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\%SID% reg add "%KEY%" /v Image32 /t REG_SZ /d "%FOLDER%\32x32.png" /f >nul reg add "%KEY%" /v Image40 /t REG_SZ /d "%FOLDER%\40x40.png" /f >nul reg add "%KEY%" /v Image48 /t REG_SZ /d "%FOLDER%\48x48.png" /f >nul reg add "%KEY%" /v Image64 /t REG_SZ /d "%FOLDER%\64x64.png" /f >nul reg add "%KEY%" /v Image96 /t REG_SZ /d "%FOLDER%\96x96.png" /f >nul reg add "%KEY%" /v Image192 /t REG_SZ /d "%FOLDER%\192x192.png" /f >nul reg add "%KEY%" /v Image208 /t REG_SZ /d "%FOLDER%\208x208.png" /f >nul reg add "%KEY%" /v Image240 /t REG_SZ /d "%FOLDER%\240x240.png" /f >nul reg add "%KEY%" /v Image424 /t REG_SZ /d "%FOLDER%\424x424.png" /f >nul reg add "%KEY%" /v Image448 /t REG_SZ /d "%FOLDER%\448x448.png" /f >nul reg add "%KEY%" /v Image1080 /t REG_SZ /d "%FOLDER%\1080x1080.png" /f >nul gpupdate /force >nul cls echo :: Windows 10 AME User Icon Changer echo. echo User icon successfully changed! You may have to reboot echo for it to fully take effect. :pause echo. pause :end