Question Utiliser read-host Script avec binding (parametres obligatoire)

Plus d'informations
il y a 1 mois 1 semaine #29875 par Firedaway
Bonjour,

Je cherche comment faire en sorte que le paramètre obligatoire d'un cmdlet bindings soit une variable ou saisir par l'utilisateur dans un read-host.
Soit le script toto.ps1 qui attend toujours un paramètre -samAccountName $username.
$username doit être renseigné dès le début du script
Mon souci actuel est qu'on est obligé pour exécuter le script de la commande suivante
C:\Users\Sylar\Desktop>.\toto.ps -SamAccountname YXY
Comment mettre de place un read-host pour remplacer YXY

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 1 semaine #29877 par Laurent Dardenne
Salut,
un début de piste :
Function Test{ 
 param(
     [ValidateNotNullOrEmpty()]
     [string] $S=(Read-Host 'Entrez une valeur')
  ) 
 $ErrorActionPreference='Stop'
 [ValidateNotNullOrEmpty()] [string] $VarContrainte=$S
 
 Write-Warning "S='$VarContrainte'"
}
Le premier attribut est utilisé par le binding mais ne persiste pas sur la variable, à vérifier.
Et la présence de ErrorAction évite de coder dans l'exemple une gestion d'erreur, à toi de voir ce point.
Il y a aussi les variables liées , mais ça semble une mauvaise piste ici...

Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: Firedaway

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 1 semaine - il y a 1 mois 1 semaine #29879 par Arnaud
Bonjour Firedaway,

Une alternative à ce que te propose Laurent est ceci :
[CmdletBinding()]
Param (
    [Parameter(Mandatory)]
    [String] $SamAccountName
)
"La valeur du SamAccountName est: $SamAccountName"

L'attribut [CmdletBinding] n'est pas obligatoire mais il est recommandé. Il indique à PowerShell d'activer le mode "fonctions avancées". C'est une bonne pratique de le mettre. Ainsi ton script (ou ta fonction) te permettra d'utiliser tous les paramètres communs de PowerShell tels que Whatif, Verbose, Debug, etc.

Aussi pas besoin de Read-Host car le fait de définir un paramètre comme étant obligatoire fait que PowerShell va t'afficher un prompt de saisie du paramètre si tu ne l'as pas indiqué sur la ligne de commandes.

Arnaud

Créateur du forum de la communauté PowerShell Francophone
Dernière édition: il y a 1 mois 1 semaine par Arnaud. Raison: Ajout d'un complément d'informations

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 1 semaine - il y a 1 mois 1 semaine #29882 par Firedaway
Bonjour ,

Merci pour vos retours.

j'ai essayé la solution : j'ai le message d'erreur.

PS C:\Windows\system32> C:\Temp\toto.ps1
la valeur du SamAccountname est : 
begin : Le terme «begin» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou 
programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin 
d'accès est correct et réessayez.
Au caractère C:\Temp\toto.ps1:15 : 1
+ begin {
+ ~~~~~
    + CategoryInfo          : ObjectNotFound: (begin:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
Get-Process : Impossible d'évaluer le paramètre «Name», car son argument est spécifié en tant que bloc de 
script et qu'il n'y a pas d'entrée. Un bloc de script ne peut pas être évalué sans entrée.
Au caractère C:\Temp\toto.ps1:539 : 9
+ process {
+         ~
    + CategoryInfo          : MetadataError: (:) [Get-Process], ParameterBindingException
    + FullyQualifiedErrorId : ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.GetProcessCommand
 
end : Le terme «end» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou 
programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin 
d'accès est correct et réessayez.
Au caractère C:\Temp\toto.ps1:969 : 1
+ end {
+ ~~~
    + CategoryInfo          : ObjectNotFound: (end:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
Dernière édition: il y a 1 mois 1 semaine par Arnaud.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 1 semaine #29883 par Arnaud
Pourrais-tu publier tout ton code STP ?

Créateur du forum de la communauté PowerShell Francophone

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 1 semaine #29884 par Laurent Dardenne

Arnaud écrit: Une alternative à ce que te propose Laurent est ceci :

C'est beaucoup mieux :-), je faisais du hors piste.

Je part du principe que si un paramètre est obligatoire, il faut le renseigner sur la ligne de commande, ici ça permet de laisser une seconde chance de le renseigner.

Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: Firedaway

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.232 secondes
Propulsé par Kunena