Bonjour à tous
Je suis confronté au problème d'appel des "assembly" depuis des objets.
Un exemple parlant bien plus que des mots, je vous présente une portion de code qui résume à lui tout seul mon problème
Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing Class W_Dialog { # Classe de gestion de l'affichage d'une fenêtre type PopUp # ========================================================= # Propriétés [String] $titre = "" [String] $texte = "" [Int] $icone = 0 # 0 : Aucune icône | 16 : Erreur | 32 : Question | 48 : Avertissement | 64 : Information [Int] $bouton = 0 # 0 : OK | 1 : OKCancel | 2 : AbortRetryIgnore | 3 : YesNoCancel | 4 : YesNo | 5 : RetryCancel [String] $reponse = "" # Méthodes Create() { # Création et affichage de la fenêtre de type PopUp $this.reponse = [System.Windows.Forms.MessageBox]::Show($this.texte, $this.titre,$this.bouton,$this.icone) } } [W_Dialog] $msgbox = @{'titre' = "Information"; 'texte' = "Ceci est un test"; 'bouton' = 0; 'icone' = 32;} $msgbox.Create()
Quand je lance mon script, j'ai un beau message d'erreur m'indiquant qu'il ne trouve pas System.Windows.Forms.MessageBox alors que je l'ai déclaré au tout début de mon script.
Si je crée un second script
Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing
Et que je le lance dans une console PS, puis qu'ensuite je lance mon script initial dans cette même console PS, cela fonctionne.
Où est ce que je pêche ? Comment dois je permettre à PowerShell de prendre en compte mes déclarations d'assembly ?
Ma seule contrainte non négociable est de ne posséder qu'un seul fichier PS1, pour une très grande portabilité (pas de module d'auto-chargement ou autre à placer dans d'autres répertoires).
Je vous remercie d'avance.
Partager