TUTOS.EU

Powershell - Faire une fenêtre de saisie

Comment faire une inputbox en powershell

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 Copier le code

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 Copier le code

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 Copier le code

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 Copier le code

Pages Web

Site WebDescription
Technet.microsoft.comPage de Microsoft avec convertion de la fonction inputbox de VbScript en Powershell
Ss64.comRead-Host command

Article(s) précédent(s)

2