[Powershell] Variable objet en paramètre de fonction & ValidateSet

Variable objet en paramètre de fonction & ValidateSet [Powershell] - Shell/Batch - Programmation

Marsh Posté le 18-12-2021 à 18:34:47    

Bonsoir,
Je suis en train de me faire un script en powershell, et j'utilise un petit paquet de variable que j'ai besoin de passer en paramètre à une fonction.
 
Je cherche donc à simplifier ma gestion de variables (Powershell) que je passe en paramètre dans une fonction.
Actuellement j'ai ça :

 

$var_1_texte = "blabla"
var_1_position = "2"
var_1_jesaispasquoi = "truc"
$var_2_texte = "blabla2"
var_2_position = "22"
var_2_jesaispasquoi = "truc2"
$resultat = ma-fonction var_1_texte var_1_position var_1_jesaispasquoi  


 

J'aimerais pouvoir faire ceci :

 

$var_1.texte = "blabla"
var_1.position = "2"
var_1.jesaispasquoi = "truc"
$var_2.texte = "blabla2"
var_2.position = "22"
var_2.jesaispasquoi = "truc2"
$resultat = ma-fonction var_1 var_2


 
 
 
Mais je ne sais pas comment faire, ni comment ça 'appelle en programmation...
 
Est-ce possible en Powershell ?
 
Merci de votre aide :jap:

 
 
Edit : J'ai trouvé comment faire :

$var1 = New-Object -TypeName psobject
$var_obj | Add-Member -MemberType NoteProperty -Name truc1 -Value 2
$var_obj | Add-Member -MemberType NoteProperty -Name truc2 -Value 'JSP'
$var_obj | Add-Member -MemberType NoteProperty -Name truc3 -Value 'Du texte'


 
Mais maintenant je ne sais pas faire le ValidateSet pour $var_obj.truc1 comme je le faisais sur la variable $truc1 seule :
 

Code :
  1. function Get-Machin {
  2.         param (
  3.             [Parameter(Mandatory)]$var_obj,
  4.             [Parameter(Mandatory)][ValidateSet(1, 2)]$truc1,
  5.         )
  6. # Code de la fonction
  7. }
  8. # Appel de la fonction :
  9. Get-Machin $var_obj, $truc1


Dans mon exemple, $truc1 ne doit avoir comme valeur que 1 ou 2.
Il en va de même pour $var_obj.truc1, mais je ne sais pas comment faire pour la variable objet... car dedans tout ne doit pas être validé...
 
Des idées ?


Message édité par MilesTEG1 le 19-12-2021 à 10:15:58

---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
Reply

Marsh Posté le 18-12-2021 à 18:34:47   

Reply

Marsh Posté le 19-12-2021 à 10:16:47    

Message édité, j'ai trouvé comment faire une variable objet, mais maintenant j'ai un soucis pour faire un ValidateSet sur une propriété de cette variable objet.
J'ai mis la question dans le message d'origine.


---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
Reply

Marsh Posté le 23-12-2021 à 11:46:02    

Peut être que je me trompe mais ton besoin est assez avancé, je pense qu'il serait mieux de passer par une classe
 

Code :
  1. class CTest {
  2.     [int][ValidateSet(1, 2)]$truc1
  3.     [string]$truc2
  4.     [string]$truc3
  5.     CTest(
  6.         [int]$truc1,
  7.         [string]$truc2,
  8.         [string]$truc3
  9.     ){
  10.         $this.truc1 = $truc1
  11.         $this.truc2 = $truc2
  12.         $this.truc3 = $truc3
  13.     }
  14. }
  15. $OTest = [CTest]::new(2, 'JSP', 'Du texte')

Reply

Marsh Posté le 04-01-2022 à 18:23:30    

ericlm128 a écrit :

Peut être que je me trompe mais ton besoin est assez avancé, je pense qu'il serait mieux de passer par une classe
 

Code :
  1. class CTest {
  2.     [int][ValidateSet(1, 2)]$truc1
  3.     [string]$truc2
  4.     [string]$truc3
  5.     CTest(
  6.         [int]$truc1,
  7.         [string]$truc2,
  8.         [string]$truc3
  9.     ){
  10.         $this.truc1 = $truc1
  11.         $this.truc2 = $truc2
  12.         $this.truc3 = $truc3
  13.     }
  14. }
  15. $OTest = [CTest]::new(2, 'JSP', 'Du texte')



 
 
Ha oué c'est probablement encore mieux ^^
Et je peux mettre des validateSet :)
 
Bon faut que je bosse un peu la structure du coup :)
 
Merci :jap:


---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed