4e discussion avec 53s

  • Auteur de la discussion ZZZ
  • Date de début
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
dans ce code :

Code:
@echo off

call:winAlert Info , C:\Users\LenovoX250\Desktop\favicon.ico , this is my personal title. , this is my personal paragraph.
pause
goto :eof

:winAlert

set icon=%1
set iconPath=%2
set title=%3
set paragraph=%4

echo [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms"); $objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon; $objNotifyIcon.Icon = [System.Drawing.SystemIcons]::Information; $objNotifyIcon.BalloonTipIcon = "%icon%"; $objNotifyIcon.Icon = "%iconPath%"; $objNotifyIcon.BalloonTipText = "%title%"; $objNotifyIcon.BalloonTipTitle = "%paragraph%"; $objNotifyIcon.Visible = $True; $objNotifyIcon.ShowBalloonTip(10000); > alert.ps1

powershell.exe -ExecutionPolicy Bypass -File "C:\Users\LenovoX250\Desktop\alert.ps1"

exit /b

pourquoi le "$objNotifyIcon.BalloonTipTitle" prends la valeur de "is" et "$objNotifyIcon.BalloonTipText" prends la valeur de "this", et comment le résoudre?
 
53secondes
Fofobot 53secondes.com
Messages
422
Fofocoins
150
Le problème ici est que les paramètres passés au script PowerShell sont des chaînes de caractères contenant des espaces. Lorsqu'une chaîne est passée en tant qu'argument, elle doit être placée entre guillemets pour être considérée comme une seule entrée. Sans guillemets, chaque élément séparé par un espace est considéré comme un argument séparé.

Dans ce cas, les valeurs de "this is my personal title" et "this is my personal paragraph" contiennent des espaces, mais elles ne sont pas entourées de guillemets dans la ligne de commande où la fonction "winAlert" est appelée. Cela signifie que le script PowerShell interprète ces valeurs comme deux arguments distincts et les assigne aux paramètres de manière incorrecte.

Pour résoudre ce problème, il suffit d'entourer les valeurs des paramètres avec des guillemets. Voici un exemple corrigé :

Code:
@echo off

call:winAlert "Info" , "C:\Users\LenovoX250\Desktop\favicon.ico" , "this is my personal title." , "this is my personal paragraph."
pause
goto :eof

:winAlert

set icon=%1
set iconPath=%2
set title=%3
set paragraph=%4

echo [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms"); $objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon; $objNotifyIcon.Icon = [System.Drawing.SystemIcons]::Information; $objNotifyIcon.BalloonTipIcon = "%icon%"; $objNotifyIcon.Icon = "%iconPath%"; $objNotifyIcon.BalloonTipText = "%paragraph%"; $objNotifyIcon.BalloonTipTitle = "%title%"; $objNotifyIcon.Visible = $True; $objNotifyIcon.ShowBalloonTip(10000); > alert.ps1

powershell.exe -ExecutionPolicy Bypass -File "C:\Users\LenovoX250\Desktop\alert.ps1"

exit /b

Maintenant, les guillemets entourent les valeurs des paramètres et les espaces dans les valeurs ne seront plus interprétés comme des séparateurs d'arguments.
 
L
L'anonyme 99%
Anonyme
Ptn vous êtes des génies si vous comprenez ce truc incompréhensible ;-;
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Le problème ici est que les paramètres passés au script PowerShell sont des chaînes de caractères contenant des espaces. Lorsqu'une chaîne est passée en tant qu'argument, elle doit être placée entre guillemets pour être considérée comme une seule entrée. Sans guillemets, chaque élément séparé par un espace est considéré comme un argument séparé.

Dans ce cas, les valeurs de "this is my personal title" et "this is my personal paragraph" contiennent des espaces, mais elles ne sont pas entourées de guillemets dans la ligne de commande où la fonction "winAlert" est appelée. Cela signifie que le script PowerShell interprète ces valeurs comme deux arguments distincts et les assigne aux paramètres de manière incorrecte.

Pour résoudre ce problème, il suffit d'entourer les valeurs des paramètres avec des guillemets. Voici un exemple corrigé :

Code:
@echo off

call:winAlert "Info" , "C:\Users\LenovoX250\Desktop\favicon.ico" , "this is my personal title." , "this is my personal paragraph."
pause
goto :eof

:winAlert

set icon=%1
set iconPath=%2
set title=%3
set paragraph=%4

echo [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms"); $objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon; $objNotifyIcon.Icon = [System.Drawing.SystemIcons]::Information; $objNotifyIcon.BalloonTipIcon = "%icon%"; $objNotifyIcon.Icon = "%iconPath%"; $objNotifyIcon.BalloonTipText = "%paragraph%"; $objNotifyIcon.BalloonTipTitle = "%title%"; $objNotifyIcon.Visible = $True; $objNotifyIcon.ShowBalloonTip(10000); > alert.ps1

powershell.exe -ExecutionPolicy Bypass -File "C:\Users\LenovoX250\Desktop\alert.ps1"

exit /b

Maintenant, les guillemets entourent les valeurs des paramètres et les espaces dans les valeurs ne seront plus interprétés comme des séparateurs d'arguments.
cela me renvoie

Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 243
+ ... Icons]::Information; $objNotifyIcon.BalloonTipIcon = ""Info""; $objNo ...
+ ~~~~~~
Jeton inattendu « Info"" » dans l’expression ou l’instruction.
Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 275
+ ... NotifyIcon.Icon = ""C:\Users\LenovoX250\Desktop\favicon.ico""; $objNo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jeton inattendu « C:\Users\LenovoX250\Desktop\favicon.ico"" » dans l’expression ou l’instruction.
Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 352
+ ... Desktop\favicon.ico""; $objNotifyIcon.BalloonTipText = ""this is my p ...
+ ~~~~
Jeton inattendu « this » dans l’expression ou l’instruction.
Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 421
+ ... ersonal paragraph.""; $objNotifyIcon.BalloonTipTitle = ""this is my p ...
+ ~~~~
Jeton inattendu « this » dans l’expression ou l’instruction.
+ CategoryInfo : ParserError: :)) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
 
53secondes
Fofobot 53secondes.com
Messages
422
Fofocoins
150
cela me renvoie

Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 243
+ ... Icons]::Information; $objNotifyIcon.BalloonTipIcon = ""Info""; $objNo ...
+ ~~~~~~
Jeton inattendu « Info"" » dans l’expression ou l’instruction.
Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 275
+ ... NotifyIcon.Icon = ""C:\Users\LenovoX250\Desktop\favicon.ico""; $objNo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jeton inattendu « C:\Users\LenovoX250\Desktop\favicon.ico"" » dans l’expression ou l’instruction.
Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 352
+ ... Desktop\favicon.ico""; $objNotifyIcon.BalloonTipText = ""this is my p ...
+ ~~~~
Jeton inattendu « this » dans l’expression ou l’instruction.
Au caractère C:\Users\LenovoX250\Desktop\alert.ps1:1 : 421
+ ... ersonal paragraph.""; $objNotifyIcon.BalloonTipTitle = ""this is my p ...
+ ~~~~
Jeton inattendu « this » dans l’expression ou l’instruction.
+ CategoryInfo : ParserError: :)) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
Le script PowerShell peut rencontrer des problèmes si les guillemets sont insérés dans les valeurs des paramètres. Pour éviter cela, vous pouvez remplacer les guillemets doubles par des guillemets simples et échapper les apostrophes dans la chaîne de caractères en utilisant un double apostrophes. Voici une version mise à jour du script :

Code:
@echo off

call:winAlert 'Info' , 'C:\Users\LenovoX250\Desktop\favicon.ico' , 'this is my personal title.' , 'this is my personal paragraph.'
pause
goto :eof

:winAlert

set icon='%1'
set iconPath='%2'
set title='%3'
set paragraph='%4'

echo [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); $objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon; $objNotifyIcon.Icon = [System.Drawing.SystemIcons]::Information; $objNotifyIcon.BalloonTipIcon = '%icon%'; $objNotifyIcon.Icon = '%iconPath%'; $objNotifyIcon.BalloonTipText = '%paragraph%'; $objNotifyIcon.BalloonTipTitle = '%title%'; $objNotifyIcon.Visible = $True; $objNotifyIcon.ShowBalloonTip(10000); > alert.ps1

powershell.exe -ExecutionPolicy Bypass -File 'C:\Users\LenovoX250\Desktop\alert.ps1'

exit /b

Ici, chaque paramètre est entouré de guillemets simples, tandis que les guillemets doubles sont remplacés par des guillemets simples à l'intérieur de chaque paramètre. Les apostrophes sont échappées en utilisant un double apostrophes. Cela permet au script PowerShell de traiter correctement les chaînes de caractères et de résoudre les problèmes d'interprétation de la chaîne de caractères.
 
L
L'anonyme 99%
Anonyme
et doué en informatique
 
L
L'anonyme 99%
Anonyme
Nan mais moi tu me mets un truc comme ça plutôt mourir ;-; j'y comprend rien :'O
Après quand je disais incompréhensible c'était pas méchant, juste que j'y pige rien c tout !
 
L
L'anonyme 99%
Anonyme
C'est ma passion, je suis un matheux profile scientifique et informatique, à contrario, je suis nul en français, phylo et histoire.
eh bé... ça relève quand même du génie pour moi ;-;
 
L
L'anonyme 99%
Anonyme
Avec de la volonté ça passe en vrai.
Avec le temps, le code devient comme ta langue maternelle, tu le parle couramment et sans réfléchir!
Dire que moi j'ai du mal à accéder aux paramètres que je veux dans mon tel 😭😅
 

🚫 Alerte AdBlock !

Vous avez activé le mode Ninja, et il cache toutes les pubs ! 😆 Un petit coup de pouce pour notre site serait super apprécié si vous pouvez le désactiver. 🙏

🦸‍♂️ J'ai Désactivé AdBlock !