Powershell - simple quote, double quotes et protection
Pour me soutenir, vous pouvez vous abonner à la chaîne, partager et liker les vidéos, désactiver votre bloqueur de pub, acheter mes plans 3D ou encore faire un don ou vous abonnez sur Ko-Fi. Merci!
Bonjour,
Un article pour faire le point sur les valeurs chaines en simple quote ’, double quote ” et les protections.
Le code PowerShell de démonstration
# Récupérer le 1er service$service = Get-Service | select-object -first 1# ou$service = (Get-Service)[0]
# Récupérer son nom. J'utilise cette syntaxe volontairement pour la démonstration.$name = $service.name
# Testons les syntaxes suivantes :"Le nom du service est $name"'Le nom du service est $name'# On remarque que la simple quote n'interprète pas les variables# Le traitement en simple quote est plus rapide,# Powershell n'ayant pas à se soucier de l'interprétation de variable.
# La variable $name était-elle indispensable ?"Le nom du service est $service.name"'Le nom du service est $service.name'# La simple quote reste fidèle à elle-même# Le principe objet.propriété ne fonctionne pas avec les "" quotes,# dans ce cas il affiche le typename_de_l'objet.name.
# Il est nécessaire d'utiliser la syntaxe $() pour que cela fonctionne (sauf en simple quote).# $() est une sous-expression, le contenu est évalué et le résultat envoyé :"Le nom du service est $($service.name)"'Le nom du service est $($service.name)'# Personnellement j'utilise plutôt l'opérateur de format -f qui est d'ailleurs préconisé.'Le nom du service est {0}' -f $service.name# Pour protéger un caractère, il faut utiliser dans ce contexte `,# dans d'autres contexte (opérateurs…), c'est \ :"Le nom du service est `$name"
# Comment faire passer une commande non Powershell avec des caractères# ayant un sens au yeux de Powershell comme (){} $# Testons la commande suivante qui définit le délai pendant lequel le menu de choix d'OS# est disponible lors d'un multiboot (la valeur est déjà de 30 secondes par défaut) :bcdedit /set {bootmgr} timeout 30
# Pour résoudre le problème# Soit protéger chaque caractère génant :bcdedit /set `{bootmgr`} timeout 30# ou utiliser --% (stop-parsing token) qui indique à Powershell de considérer# tous les caractères suivant comme de simples caractères :bcdedit --% /set {bootmgr} timeout 30# Mais il peut y avoir un problème, par exemple :$time = 30bcdedit --% /set {bootmgr} timeout $time# La variable n'est plus interprêtée, préférez les protections dans ce contexte :bcdedit /set `{bootmgr`} timeout $time
# Pourquoi ces deux syntaxes fonctionnent ?Get-service spoolerGet-service 'spooler'Réponse : À cause du parser ! Le parser est responsable de présenter les informations envoyées par la console ou par le script de manière exécutable pour Powershell. Il y a deux modes, ce qui explique pourquoi une chaine dans un argument ne nécessite pas de quote (sauf s’il y a un espace) contrairement à une chaine dans une variable : - Mode argument - Mode expression
Video : Powershell - simple quote, double quotes et protection
Liens en relation
-
Powershell - Envoyer simplement des objets dans des variables différentes
Powershell - Astuce - Envoyer simplement des objets dans des variables différentes -
Powershell - Tester la connectivité réseau et l'accessibilité aux ports
Tester la connectivité réseau et l'accessibilité aux ports avec Powershell -
Powershell - Afficher les connections réseau (équivalent de netstat)
Afficher les connections réseau (ports en écoute, connections actives...) -
Powershell - Tester la résolution de nom (équivalent de nslookup)
Commandes Powershell permettant de tester la résolution de nom (équivalent de nslookup) -
Powershell - Afficher et gérer la configuration DNS des interfaces réseau
Commandes Powershell permettant d'afficher et de gérer la configuration DNS des interfaces réseau -
Powershell - Gérer la configuration IP des interfaces réseau
Commandes Powershell permettant d'afficher et de modifier la configuration IP des interfaces réseau
Suivez-moi sur
Soutenez-moi
Magasin en ligne
Contenu récent
Powershell - Envoyer simplement des objets dans des variables différentes
Affiche publicitaire vintage de Portsmouth
Affiche vintage Andalucia - hueforge
Affiche de voyage Paris - hueforge
Affiche Tron legacy - Hueforge