Je ne comprends pas pourquoi le lot suivant:« appel » ou <str> dans le script batch supprime malheureusement certains caractères d'une
REM echo off
setlocal
set u64=aDI0NDcxOQ==
set p64=SGZzemxwNzc3
call :atob usr "%u64%"
call :atob pwd "%p64%"
schtasks /Run /S aaa.bbb.ccc.ddd /U %usr% /P %pwd% /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
supprime les caractères les 2 dernières « = » de U64 comme vous pouvez le voir avec le résultat suivant:
C:\Users\lambda>REM echo off
C:\Users\lambda>setlocal
C:\Users\lambda>set u64=aDI0NDcxOQ==
C:\Users\lambda>set p64=SGZzemxwNzc3
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: (:) [], MethodInvocationException
C:\Users\lambda>set usr= + FullyQualifiedErrorId : FormatException
C:\Users\lambda>set usr=
C:\Users\lambda>goto :EOF
C:\Users\lambda>call :atob pwd "SGZzemxwNzc3"
C:\Users\lambda>for /F "delims=" %I in ('powershell "[Text.Encoding]::UTF8.GetString([convert]::FromBase64String(\"SGZzemxwNzc3\"))"') do set pwd=%I
C:\Users\lambda>set pwd=Hfszlp777
C:\Users\lambda>goto :EOF
C:\Users\lambda>schtasks /Run /S aaa.bbb.ccc.ddd /U /P Hfszlp777 /TN "My Scheduler Task Name"
Erreur : Syntaxe incorrecte. Valeur attendue pour '/U'.
Entrez "SCHTASKS /RUN /?" pour afficher la syntaxe.
C:\Users\lambda>goto :EOF
Sans les 2 derniers caractères « = », le nombre de caractère de ma valeur Base54 U64 est pas un multiple de 4, donc il ne peut pas être décodé. Nous pouvons voir dans la sortie qu'il fonctionne bien avec p64. usr ne stocke qu'un espace ... Et je veux coller avec un fichier .bat pour l'instant, pas un script .ps1 s'il vous plaît. Merci pour votre aide. J'ai essayé plusieurs combinaisons d'entourage avec "", mais jusqu'ici avec le même résultat.
Ceci n'est pas une question PowerShell. Merci de ne pas utiliser le tag PowerShell. –
Comme nous l'avons déjà mentionné dans le [forum des gars de script] (https://social.technet.microsoft.com/Forums/scriptcenter/en-Us/home?forum=ITCG), votre vie sera plus facile si vous ne le faites pas essayez d'écrire votre script en utilisant le script shell cmd.exe (batch) et utilisez à la place PowerShell. –
malheureusement le code que vous avez proposé dans powershell n'a pas fonctionné. Et j'étais aussi curieux de savoir comment le faire en batch car il fonctionne presque. – julien