Question Stockage de variable global dans un Tab

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 9 ans 3 semaines #23569 par PatriceLT
Stockage de variable global dans un Tab a été créé par PatriceLT
Bonjour,

Je suis actuellement coincé sur un problème qui me fait criser :laugh:

J'ai actuellement une $global:OU qui a comme type un PSTreeView

Je souhaiterai pour chaque OU sélectionné dans le TreeView, le mettre dans un tableau.

J'en aurai par la suite besoin pour faire des traitements sur chaque OU dans mon tableau.

Voici ce que contient ma variable \"$global:OU\"

\"OU=Test,DC=PATRICE,DC=LAB OU=Test1,DC=PATRICE,DC=LAB OU=Test2,DC=PATRICE,DC=LAB\"

J'ai essayé de foreach la variable global tel que :

[code:1]$Tableau = @()
foreach($SelectedOU in $global:OU)
{
$Tableau += $SelectedOU
$Tableau
}[/code:1]

Cependant mon résultat n'est absolument pas concluant...

J'ai testé aussi un split sur mon résultat de $global:OU vu qu'il y a des espaces entre chaque DN, mais rien ne fonctionne.

Merci d'avance

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

Plus d'informations
il y a 9 ans 2 semaines #23575 par Philippe
salut PatriceLT

je suis pas un utilisateur de form et donc de treevoiew !
mais j'ai trouver une fonction
ici qui renvoie les elements treeview sélectionner

le principe a l'air simple et une collection des objet sélectionner


[code:1]function Get-CheckedNodes
{
param(
[ValidateNotNull()]
[System.Windows.Forms.TreeNodeCollection] $NodeCollection,
[ValidateNotNull()]
[System.Collections.ArrayList]$CheckedNodes)

foreach($Node in $NodeCollection)
{
if($Node.Checked)
{
[void]$CheckedNodes.Add($Node)
}
#Get-CheckedNodes $Node.Nodes $CheckedNodes
}
}

$CheckedNodes = New-Object System.Collections.ArrayList

Get-CheckedNodes $global:OU.Nodes $CheckedNodes

$CheckedNodes
[/code:1]

pour mes tests $CheckedNodes.text me renvoie la liste des noms dans un format exploitable

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 9 ans 2 semaines #23587 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Stockage de variable global dans un Tab
Salut 6ratgus,

Malheureusement ça ne marche pas, car j'ai une erreur correspondant à Get-CheckedNodes : Impossible de valider l'argument sur le paramètre \"NodeCollection\", l'argument est null.

J'ai essayé plusieurs fois différentes solutions, mais aucune ne marche réellement.

Etant donné que j'ai mon TreeView qui fait déjà partit d'une fonction, et que dans cette fonction, j'ai mon Get-CheckedNodes qui me permet de valider les Nodes selectionnés, cela ne peut donc marché via l'appel simple de la fonction en dehors de la fonction principal de mon TreeView.

Voici la totalité du code de mon treeview :

[code:1]
Function TreeView
{
param (
$root = [ADSI]\"LDAP://DC=PATRICE,DC=LAB\"
)

Function HierarchieAD {
param (
$root = [ADSI]\"LDAP://DC=PATRICE,DC=LAB\"
)

&{trap {throw \"$($_)\"};[void]$Root.get_Name()}

$form = new-object Windows.Forms.form
$form.Size = new-object System.Drawing.Size @(800,600)
$form.text = \"ActiveDirectory TreeView\"

$TV = new-object windows.forms.TreeView
$TV.Location = new-object System.Drawing.Size(10,30)
$TV.size = new-object System.Drawing.Size(770,470)
$TV.Anchor = \"top, left, right\"
$TV.checkBoxes = $true

Function Get-CheckedNode($node)
{
foreach ($n in $node.nodes)
{
if ($n.checked)
{
$n.Text
}
Get-CheckedNode($n)
}
}

$btnSelect = new-object System.Windows.Forms.Button
$btnSelect.text = \"Select\"
$btnSelect.Location = new-object System.Drawing.Size(710,510)
$btnSelect.size = new-object System.Drawing.Size(70,30)
$btnSelect.Anchor = \"Bottom, right\"

$btnSelect.add_Click({
$global:OU = Get-CheckedNode($TV)
$form.close()
})

$btnCancel = new-object System.Windows.Forms.Button
$btnCancel.text = \"Cancel\"
$btnCancel.Location = new-object System.Drawing.Size(630,510)
$btnCancel.size = new-object System.Drawing.Size(70,30)
$btnCancel.Anchor = \"Bottom, right\"

$btnCancel.add_Click({$form.close()})

$TNRoot = new-object System.Windows.Forms.TreeNode(\"Root\")
$TNRoot.Name = $root.name
$TNRoot.Text = $root.distinguishedName
$TNRoot.tag = \"NotEnumerated\"

$TV.add_AfterSelect({
if ($this.SelectedNode.tag -eq \"NotEnumerated\")
{
$de = [ADSI](\"LDAP://$($this.SelectedNode.text)\")
$de.get_Children() | foreach {
$TN = new-object System.Windows.Forms.TreeNode
$TN.Name = $_.name
$TN.Text = $_.distinguishedName
$TN.tag = \"NotEnumerated\"
$this.SelectedNode.Nodes.Add($TN)
}
$this.SelectedNode.tag = \"Enumerated\"
}
})

[void]$TV.Nodes.Add($TNRoot)

$form.Controls.Add($TV)
$form.Controls.Add($btnSelect)
$form.Controls.Add($btnCancel)

$Form.Add_Shown({$form.Activate()})
[void]$form.showdialog()

#Return Get-CheckedNode($TV)
}
. HierarchieAD $root
}
#endregion

TreeView
Write-Host $global:OU
[/code:1]

J'appel donc ma variable global dans un add_click d'un bouton : $global:OU pour récupérer mes valeurs.

@ 6ratgus : Désolé j'avais fait une erreur dans mon script, je viens de l'éditer, et ça fonctionne, ça me retourne bien mes OU à la suite...

Du coup j'ai toujours besoin d'une solution pour le traitement de mes OU (pour ensuite faire du Get-GPO et du GPInheritance + gplinks) comme tu me l'avais indiqué dans un précédent script.<br><br>Message édité par: PatriceLT, à: 10/05/17 11:17

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

Plus d'informations
il y a 9 ans 2 semaines #23588 par Philippe
je n'arrive pas a avoir le même résultat de ton premier message : :(

Voici ce que contient ma variable \&quot;$global:OU\&quot;

\&quot;OU=Test,DC=PATRICE,DC=LAB OU=Test1,DC=PATRICE,DC=LAB OU=Test2,DC=PATRICE,DC=LAB\&quot;


j'ai bien la form avec l'arborescence de l'AD mais pas résultat
en faite j'ai une variable comme résultat !!:blink:

soit ton script est un exemple incomplet
soit j'ai pas fais les choses comme il faut :whistle:

pour info tu ne voulais sélectionner qu'une OU dans l'arborescence de l'AD ?<br><br>Message édité par: 6ratgus, à: 9/05/17 18:01

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 9 ans 2 semaines #23591 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Stockage de variable global dans un Tab
6ratgus, je viens d'éditer mon script qui était effectivement faux.

Je l'ai donc mis à jour, testé et cela me donne exactement ce que cela me donnait au début, à savoir lorsque j'appelle ma variable global ($global:OU) il me renvoie toutes mes OU sélectionné (OU selected &gt; 1) afin de pouvoir faire du traitement derrière.

Donc : Appel de la fonction TreeView (au besoin je fais un return à la fin du script pour récupérer mes OUs mais qui ne sont toujours pas formatées correctement) et donc pour valider ça, en commentant le return, j'obtiens bien mes ou via le Write-Host $global:OU en dehors du script après avoir exécuté mon TreeView.

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

Plus d'informations
il y a 9 ans 2 semaines #23593 par Philippe
ok c bon

donc ton script fonctionne très bien

il faut simplement que affiche ta variable $OU de la bonne façon, c'est a dire sans le write-host

$global:OU renvoie bien une liste d'objet string que tu peut accéder directement avec $global:OU[0], $global:OU[1] etc
ou avec foreach comme dans ton premier message
[code:1]$Tableau = @()
foreach($SelectedOU in $global:OU)
{
$Tableau += $SelectedOU
}
$Tableau[/code:1]

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

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