Comment définir une valeur par défaut avec Read-Host dans PowerShell
-
Aperçu de la commande
Read-Host
dans PowerShell -
Utiliser une instruction conditionnelle pour définir une valeur par défaut avec la commande
Read-Host
dans PowerShell -
Utiliser une fonction pour définir une valeur par défaut avec la commande
Read-Host
dans PowerShell -
Utiliser une boucle Do-While pour définir une valeur par défaut avec la commande
Read-Host
dans PowerShell - Conclusion

PowerShell est un langage de script puissant qui offre diverses façons d’interagir avec les utilisateurs. Une méthode courante consiste à utiliser Read-Host
pour inviter les utilisateurs à fournir une entrée.
Cependant, il existe des scénarios où fournir une valeur par défaut est bénéfique. Dans ce guide, nous explorerons différentes méthodes pour incorporer des valeurs par défaut avec Read-Host
dans PowerShell.
Aperçu de la commande Read-Host
dans PowerShell
Read-Host
est un cmdlet fondamental dans PowerShell qui permet aux scripts d’interagir avec les utilisateurs en les invitant à fournir une entrée. C’est un outil polyvalent pour recueillir des informations lors de l’exécution d’un script. Ce cmdlet est particulièrement utile dans les scénarios où des informations dynamiques ou spécifiques à l’utilisateur sont nécessaires.
Syntaxe :
Read-Host [-Prompt] <String> [-AsSecureString] [-Credential <PSCredential>] [-ErrorAction <ActionPreference>] [-Timeout <Int32>] [-OutVariable <String>] [-OutBuffer <Int32>] [-InputObject <PSObject>] [<CommonParameters>]
Ici, les paramètres clés incluent :
-Prompt
: Spécifie le message qui sera affiché à l’utilisateur.-AsSecureString
: Demande une entrée sous forme de chaîne sécurisée (mot de passe).-Credential
: Invite à fournir un nom d’utilisateur et un mot de passe. Retourne un objetPSCredential
.-ErrorAction
: Définit l’action à entreprendre en cas d’erreur.-Timeout
: Définit une limite de temps pour combien de temps le cmdlet attendra une entrée.-OutVariable
: Stocke le résultat dans une variable.-OutBuffer
: Détermine le nombre d’objets à mettre en tampon avant la sortie.-InputObject
: Permet l’entrée provenant de la pipeline.
Utilisation de base de la commande Read-Host
$userInput = Read-Host "Please enter your name"
Dans cet exemple, l’utilisateur sera invité avec le message "Veuillez entrer votre nom"
. La valeur qu’il saisit sera stockée dans la variable $userInput
.
Entrée de chaîne sécurisée
$securePassword = Read-Host "Please enter your password" -AsSecureString
Cette commande invite l’utilisateur à fournir un mot de passe, et l’entrée est stockée sous forme de chaîne sécurisée dans la variable $securePassword
.
Fonctionnalité de délai d’attente
$userInput = Read-Host "Please enter your choice" -Timeout 10
Cette commande invite l’utilisateur à fournir une entrée et attend un maximum de 10
secondes. Si aucune entrée n’est fournie dans ce délai, la variable $userInput
sera vide.
Vous pouvez incorporer des valeurs par défaut en utilisant des instructions conditionnelles, des fonctions, des boucles ou des blocs try-catch en combinaison avec Read-Host
.
Utiliser une instruction conditionnelle pour définir une valeur par défaut avec la commande Read-Host
dans PowerShell
Créez une variable appelée defaultName
et attribuez-lui la valeur chaîne John Doe
. Cette valeur sera utilisée à la place de l’entrée de l’utilisateur s’il choisit de ne pas en fournir une.
$defaultName = "John Doe"
Définissez une nouvelle variable, userName
, qui produira un message demandant à l’utilisateur de fournir une entrée et utilisera la commande Read-Host
pour réaliser cette action.
$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)
Le code ci-dessous implémente une condition qui vérifie si l’utilisateur a fourni une entrée. Il vérifie si la variable $userName
est nulle ou une chaîne vide.
Si l’utilisateur fournit une entrée (pas de chaîne vide), il met à jour la valeur de $defaultName
avec l’entrée de l’utilisateur.
if (-not $userName) { $userName = $defaultName }
Code complet :
$defaultName = "John Doe"
$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)
if (-not $userName) { $userName = $defaultName }
Write-Host "Hello, $($userName)!"
Sortie :
Dans l’approche suivante, nous relocalisons le processus de réception de l’entrée utilisateur à l’intérieur de la condition qui vérifie si l’utilisateur a saisi une valeur ou non. Cela nous permet de mieux suivre si l’utilisateur a fourni des données ou non.
Sans aucune action de l’utilisateur, nous utilisons la valeur par défaut, John Doe
. Si l’utilisateur offre une entrée, cependant, nous utilisons la valeur sauvegardée dans la variable userName
.
Code :
$defaultName = "John Doe"
if (($userName = Read-Host "Press enter to accept default value $defaultName") -eq '') { $defaultName } else { $userName }
Sortie :
La dernière approche vérifie que l’entrée est donnée par l’utilisateur, et si c’est le cas, elle assigne directement la valeur de l’entrée utilisateur à la variable nommée defaultName.
Code :
$defaultName = "John Doe"
if ($userName = Read-Host "Value [$defaultName]") { $defaultName = $userName }
Sortie :
De cette façon, il n’est pas nécessaire d’utiliser la condition else
.
Utiliser une fonction pour définir une valeur par défaut avec la commande Read-Host
dans PowerShell
Une fonction encapsule un ensemble d’instructions qui peuvent être réutilisées dans différents scripts. Nous allons concevoir une fonction appelée Read-HostWithDefault
qui incorpore des valeurs par défaut.
function Read-HostWithDefault {
param (
[string]$prompt,
[string]$default
)
$userInput = Read-Host "$prompt (default is $default)"
$userInput = if ($userInput -ne "") { $userInput } else { $default }
return $userInput
}
Explication :
function Read-HostWithDefault { ... }
: Cela définit la fonction nomméeRead-HostWithDefault
.param ( [string]$prompt, [string]$default )
: Cela spécifie les paramètres que la fonction attend. Dans ce cas, c’est un message d’invite et une valeur par défaut.$userInput = Read-Host "$prompt (default is $default)"
: Cette ligne invite l’utilisateur à fournir une entrée, affichant à la fois l’invite et la valeur par défaut. L’entrée est stockée dans la variable$userInput
.$userInput = if ($userInput -ne "") { $userInput } else { $default }
: Cette ligne vérifie si$userInput
n’est pas une chaîne vide ($userInput -ne ""
). Si cette condition est vraie (ce qui signifie que l’utilisateur a fourni une entrée),$userInput
conserve sa valeur. Si faux (ce qui signifie que l’utilisateur n’a pas fourni d’entrée),$default
est assigné à$userInput
.return $userInput
: Enfin, la fonction retourne la valeur résultante.
Maintenant, voyons comment utiliser cette fonction dans un scénario pratique :
$defaultName = "John Doe"
$name = Read-HostWithDefault -prompt "Enter your name" -default $defaultName
Write-Host "Hello, $name!"
Explication :
$defaultName = "John Doe"
: Ici, nous définissons une valeur par défaut pour le nom de l’utilisateur.$name = Read-HostWithDefault -prompt "Entrez votre nom" -default $defaultName
: Cette ligne invite l’utilisateur à fournir son nom, affichant le message d’invite fourni et la valeur par défaut. La fonctionRead-HostWithDefault
est appelée avec les paramètres appropriés.Write-Host "Bonjour, $name!"
: Cela génère un message de salutation qui est soit fourni par l’utilisateur soit une valeur par défaut.
Sortie :
Utiliser une boucle Do-While pour définir une valeur par défaut avec la commande Read-Host
dans PowerShell
La boucle do-while
est une structure de contrôle dans PowerShell qui exécute de manière répétée un bloc de code tant qu’une condition spécifiée est vraie. Cela est particulièrement utile lorsque vous souhaitez vous assurer qu’une certaine action est effectuée au moins une fois.
La syntaxe de base d’une boucle do-while
est :
do {
# Code to be executed
} while (condition)
Le bloc de code à l’intérieur de l’instruction do
continuera à s’exécuter tant que la condition spécifiée après le mot clé while
est vraie.
Considérons un exemple où nous souhaitons inviter l’utilisateur à fournir son nom, mais fournir une valeur par défaut de "John Doe"
s’il ne saisit rien :
$defaultName = "John Doe"
do {
$userName = Read-Host "Please enter your name (default is $defaultName)"
$userName = if ($userName) { $userName } else { $defaultName }
} while (-not $userName)
Write-Host "Hello, $userName!"
Explication :
$defaultName = "John Doe"
: Cette ligne définit la valeur par défaut que nous souhaitons utiliser si l’utilisateur ne fournit aucune entrée.do { ... } while (-not $userName)
: Cela initie une boucledo-while
. Le bloc de code à l’intérieur de l’instructiondo
sera exécuté au moins une fois. La condition(-not $userName)
garantit que la boucle continue tant que$userName
n’est pas fourni.$userName = Read-Host "Veuillez entrer votre nom (la valeur par défaut est $defaultName)"
: Cela invite l’utilisateur à fournir son nom, affichant la valeur par défaut dans le message.$userName = if ($userName) { $userName } else { $defaultName }
: Cette ligne utilise une instructionif-else
pour déterminer la valeur de$userName
. Si$userName
a une valeur (c’est-à-dire qu’il n’est pas vide ou nul), il conserve cette valeur. Sinon, il attribue le nom par défaut$defaultName
.-not $userName
: Cette condition vérifie si$userName
est vide ou non fourni. Si c’est vide, la boucle continuera, demandant à nouveau à l’utilisateur.- Une fois que l’utilisateur fournit une entrée, la condition
-not $userName
devient fausse, et la boucle se termine.
Sortie :
Conclusion
Dans ce guide complet, nous avons exploré différentes méthodes pour définir des valeurs par défaut avec la commande Read-Host
dans PowerShell. Chaque approche offre des avantages distincts en fonction des exigences spécifiques de votre script.
- Instructions conditionnelles : Cette méthode permet un contrôle direct de l’entrée utilisateur et offre de la flexibilité pour gérer différents scénarios.
- Fonctions : En encapsulant la logique dans une fonction, vous pouvez créer un code réutilisable qui incorpore facilement des valeurs par défaut.
- Boucles Do-While : Cette approche garantit qu’une certaine action est effectuée au moins une fois, ce qui la rend adaptée aux scénarios où l’entrée de l’utilisateur est cruciale.
En comprenant et en appliquant ces techniques, vous pouvez améliorer l’expérience utilisateur et la résilience de vos scripts PowerShell. N’oubliez pas de choisir la méthode qui correspond le mieux aux exigences spécifiques de votre script.
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn