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

Plus d'informations
il y a 1 an 3 mois #29875 par YOUSSOUF CAMARA
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 an 3 mois #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é: YOUSSOUF CAMARA

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

Plus d'informations
il y a 1 an 3 mois - il y a 1 an 3 mois #29879 par Arnaud Petitjean
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

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Dernière édition: il y a 1 an 3 mois par Arnaud Petitjean. 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 an 3 mois - il y a 1 an 3 mois #29882 par YOUSSOUF CAMARA
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 an 3 mois par Arnaud Petitjean.

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

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

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

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

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

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é: YOUSSOUF CAMARA

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

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