Bonjour,
Je cherche à lancer une tâche sur une machine distante et j'ai le nom du user encodé en Base64, j'ai donc fait le script suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
REM echo off
setlocal
set "u64=aDI0NDcxOQ=="
call :atob usr %u64%
schtasks /Run /S aaa.bbb.ccc.ddd /U %usr% /P toto /TN "My Scheduler Task Name"
goto :EOF
:atob <var_to_set> <str>
for /f "delims=" %%I in (
	'powershell "[Text.Encoding]::UTF8.GetString([convert]::FromBase64String(\"%~2\"))"'
) do set "%~1=%%I"
goto :EOF
Le problème vient des 2 derniers caractères de u64. En effet les 2 signes '=' sont supprimés lorsque la commande powershell FromBase64String est appelée... J'ai compris que pour décoder du base64, il faut que la longueur de la string soit un multiple de 4, ce qui est pourtant bien le cas avec aDI0NDcxOQ==
Voici l'output que je reçois :
C:\Users\lambda>REM echo off
C:\Users\lambda>setlocal
C:\Users\lambda>set "u64=aDI0NDcxOQ=="
C:\Users\lambda>call :atob usr aDI0NDcxOQ==
C:\Users\lambda>for /F "delims=" %I in ('powershell"[Text.Encoding]::UTF8.GetString([convert]::FromBase64String(\"aDI0NDcxOQ\"))"') do set "usr=%I"
C:\Users\lambda>set "usr=Exception calling "FromBase64String" with "1" argument(s): "Longueur non "
C:\Users\lambda>set "usr=valide pour un tableau de caractères Base 64 ou une chaîne.""
C:\Users\lambda>set "usr=At line:1 char:1"
C:\Users\lambda>set "usr=+ [Text.Encoding]::UTF8.GetString([convert]::FromBase64String("aDI0NDcxOQ"))"
C:\Users\lambda>set "usr=+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
C:\Users\lambda>set "usr= + CategoryInfo : NotSpecified: ( [], Me
thodInvocationException"
C:\Users\lambda>set "usr= + FullyQualifiedErrorId : FormatException"
C:\Users\lambda>set "usr= "
C:\Users\lambda>goto :EOF
C:\Users\lambda>schtasks /Run /S aaa.bbb.ccc.ddd /U /P toto /TN "My Scheduler Task Name"
Erreur*: Syntaxe incorrecte. Valeur attendue pour '/U'.
Entrez "SCHTASKS /RUN /?" pour afficher la syntaxe.
C:\Users\lambda>goto :EOF
Tiens c'est bizarre, je vois d'ailleurs que ma balise ne met pas en gras les 2 caractères '=', ils sont exclus également, je ne sais pas s'il y a un rapport...