De base, la commande native en powershell pour demander à l'utilisateur de renseigner une valeur est read-host. Exemple :
$myname = read-host "Please enter your name:"
Lien vers le fichier : cliquez ici
Voici à quoi ressemble la fenêtre d'interrogation
On peut bidouiller un traitement du retour fait par l'utilisateur et, en cas de réponse nulle, mettre une valeur par défaut
Clear-Host
$DefaultValue = [string]
$MonResultat = [string]
$DefaultValue = "Ma valeur par défaut"
$MonResultat = Read-Host "Votre question (par défaut : $DefaultValue)"
if($MonResultat -eq $null){$MonResultat = $DefaultValue}
if($MonResultat -eq ""){$MonResultat = $DefaultValue}
if ($MonResultat.Length -igt 0){
#...
#Votre code si il y a un résultat
#...
}
else{
Write-Host "Vous n'avez rien saisi"
}
Lien vers le fichier : cliquez ici
Dans le cas où l'on demande à l'utilisateur de saisir le nom d'un fichier à traiter, on peut aller plus loin et proposer le premier fichier .txt contenu dans le répertoire en tant que valeur par défaut
Clear-Host
$varCheminRepertoireScript = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition) #On récupère le chemin du répertoire contenant ce script
$currentScriptName = $MyInvocation.MyCommand.Name #Récupération du nom du script en cours
$currentScriptName = $currentScriptName.substring(0,$($currentScriptName.lastindexofany(".")))
$ValeurParDefaut = "ReponseParDefaut.txt" #Nom du fichier par defaut dans lequel on va faire la recherche
$MonFolder = Get-ChildItem -Path $varCheminRepertoireScript -File | Where-Object {$_.Name -match '.txt$'} #On récupère la liste des fichiers en .txt de ce répertoire
foreach ($MyFile in $MonFolder)
{
$ValeurParDefaut = $MyFile.name #Le premier fichier .txt trouvé servira de valeur par défaut
break
}
$ReponseUtilisateur = read-host "Entrez le nom du fichier à filtrer (réponse par défaut si vide : $($MyFile.name)"
if ($ReponseUtilisateur.Length -eq 0) {$ReponseUtilisateur = $ValeurParDefaut} #Si l'utilisateur n'a pas répondu, on met une valeur par défaut
Write-Host "Valeur de retour : $ReponseUtilisateur"
Lien vers le fichier : cliquez ici
En vbscript, il y avait une commande très pratique qui se nommait inputbox.
Il n'existe pas d'équivalent en Powershell.
Il est possible de l'importer via un appel de MSScriptControl.ScriptControl, mais la grosse contrainte est que cela ne fonctionne que si on utilise la version x86 de Powershell
Voici comment faire quand on utilise la version x86 de Powershell
#http://www.chdb.eu/?n=9262
#Création d'un objet VbScript pour ensuite affichier une fenêtre de saisie
#Note : ne fonctionne que sur un système 32bits, par 64bits
Clear-Host
$MaVariable = [string]
$ObjVbScript = new-object -comobject MSScriptControl.ScriptControl
$ObjVbScript.language = "vbscript"
#Afficher une fenêtre de saisie pour récupérer le tout dans une variable
$ObjVbScript.addcode("function getInput() getInput = inputbox(`"Entrez quelque-chose`",`"Saisie d une valeur`",`"Valeur par défaut`") end function" )
$MaVariable = $ObjVbScript.eval("getInput")
Write-Host $MaVariable
Lien vers le fichier : cliquez ici
Pages Web
Site Web | Description |
---|---|
Technet.microsoft.com | Page de Microsoft avec convertion de la fonction inputbox de VbScript en Powershell |
Ss64.com | Read-Host command |
Article(s) précédent(s)