none
Treeview en powershell RRS feed

  • Discussion générale

  • Bonjour,

    Je débute dans le powershell et j'essaye de faire un treeview du "C:\" mais sans succès.

    - J'ai commencé un bout de script mais quand la fenêtre s'ouvre, le treeview est "collapseall" et j'aimerai qu'il soit déployé sur les dossiers racine du "C"

    - Deuxièmement je n'arrive pas à faire apparaître les nœuds sur les dossiers racine pour accéder aux sous-dossiers et ainsi de suite.

    Je ne trouve pas de "tuto" sur le net au sujet du treeview sous powershell, est ce que quelqu'un pourrai m'aider s'il vous plait.

    Merci

    Voici mon code:

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    
    # create Window
    $Form1 = New-Object System.Windows.Forms.Form
    $Form1.Text = "Form1"
    $Form1.Size = New-Object System.Drawing.Size(390, 390)
    # create Treeview-Object
    $TreeView1 = New-Object System.Windows.Forms.TreeView
    $TreeView1.Location = New-Object System.Drawing.Point(48, 12)
    $TreeView1.Size = New-Object System.Drawing.Size(290, 322)
    $TreeView1.CheckBoxes = $true
    $treeview1.SelectedNode = $treeview1.Nodes[1]
    
    $Form1.Controls.Add($TreeView1)
    
    
    
    ###### Add Nodes to Treeview
    $rootnode = New-Object System.Windows.Forms.TreeNode
    $rootnode.text = "C:\"
    $rootnode.name = "root"
    [void]$treeview1.Nodes.Add($rootnode)
    
    
    
    $dirdata = Get-ChildItem "c:\"
    $dirdata
    foreach ( $obj in $dirdata ) { 																											
    		$subnode = New-Object System.Windows.Forms.TreeNode
    		$subnode.text = $obj.name
            
           		[void]$rootnode.Nodes.Add($subnode)
            
    }
    
    
    	
    						
    # Show Form // this always needs to be at the bottom of the script!
    [System.Windows.Forms.Application]::EnableVisualStyles()
    [System.Windows.Forms.Application]::Run($Form1)

    samedi 31 janvier 2015 23:57

Toutes les réponses

  • Bonsoir,

    Vous avez besoin de quoi exactement à l'affichage ?
    get-childitem c:\ -recurse |select fullname
    Peut être un début de piste ?
    Cordialement

    dimanche 1 février 2015 17:29
  • Bonsoir,

    J'avais déjà essayé le -recurse mais il m'affiche tous les dossiers et fichier du pc, mais à la racine du C: et nom pas classé dans des nouveaux noeuds et correctement classés.

    En plus cela est très long puisqu'il analyse tout le c:, donc tout le pc.

    Il faudrait que je trouve comment avoir les "+" qui permettent de déployer quand il y a des sous-dossiers et aussi comment avoir un "-récurse" qui obtiend les 1er sous-dossier, puis les autres après le déploiement des "+", car si il y a un "recurse" générale l'analyse sera beaucoup trop longue.

    Je sais pas si je me fais comprendre.

    dimanche 1 février 2015 19:37
  • Salut,
    il faut utiliser la méthode ExpandAll du Treeview.
    Pour la doc tu as soit MSDN  soit des tutoriaux C# .

    Si tu veux construire les nœuds du treeview au fur et à mesure il faut utiliser un événement comme dans l'exemple précédent.

    Tu peux aussi utiliser la propriété Tag de chaque nœud afin de savoir si le nœud est un répertoire ou un fichier fichiers et lui associé une image correspondante.


    Beatus, qui prodest, quibus potest.


    lundi 2 février 2015 09:18
    Modérateur
  • Bonjour, 

    Laurent tu me dis "comme dans l'exemple précédent"... mais dans quel exemple?

    Et comment associer une image avec la propriété Tag , je ne sais pas faire et dans MSDN il y a juste la liste des propriétés (où il n'y a pas la propriété tag d'ailleurs), pas d'exemple ou d'explication.

    Je n'utilise pas le soft "Powershell Studio" de Sapien.

    lundi 2 février 2015 21:51
  • >>Laurent tu me dis "comme dans l'exemple précédent"... mais dans quel exemple?
    Voir le lien sur 'les tutoriaux C#'.

    >>Et comment associer une image avec la propriété Tag,
    Pour associer une image consulte cet exemple.
    Et celui-ci qui construit la liste des images.

    >>où il n'y a pas la propriété tag d'ailleurs
    La propriété Tag est sur la classe TreeNode, c'est lui qui doit savoir s'il référence un fichier ou un répertoire . Tag est de type Object tu peux lui affecter ce que tu veux comme valeur, ici un boolean ou une valeur d'enumération personnelle.
    Ainsi lors d'un clic sur un nœud ton événement appellera, si le nœud est un Directory, une fonction Read-Directory. C'est celle-ci qui construira la branche du Treeview en cours de lecture.
     
    >> pas d'exemple ou d'explication.
    Il faut rechercher des projets de démos en C# et adapter le code ou passer du temps à lire MSDN...
    Tu peux aussi ajouter ce fichier de type à ton profil, ce qui facilite les recherches sur les classes.

    >>Je n'utilise pas le soft "Powershell Studio" de Sapien.
    Quel outil utilises-tu pour construire ta Form ?

    Beatus, qui prodest, quibus potest.

    mardi 3 février 2015 09:11
    Modérateur
  • J'utilise juste l'ISE de Powershell
    mardi 3 février 2015 19:20
  • J'ai un petit peu avancé, mais j'ai encore quelques soucis:

    1- quand la fenêtre s'ouvre cela affiche le treeview du "c" avec en 1er les dossiers racine et un noeud avec le "+" pour déployer et voir les sous dossiers et fichiers.
    Or il me met aussi un "+" sur les fichiers.
    J'ai beau essayer le "-attributs" ou "ItemType" rien ne fonctionne, je ne sais pas lui dire de créer des noeuds avec le "+" que pour les dossiers.

    2- J'aimerai que quand il ouvre la fenêtre il "charge" que le "Get-ChildItem" des dossiers racine du "C" avec seulement les 1ers sous dossiers et fichiers de ces dossiers racine et non pas de tout le "C".
    Dans mon script il le fait sur 2 niveaux (sous dossiers et sous-sous-dossiers et fichiers des dossiers racine du "c") mais j'aimerai qu'il charge les sous dossiers à partir du moment où l'on déploye le "+" du noeud.
    j'ai beau utiliser "If ($subnode.Expand){" il charge tout à l'ouverture de la fenêtre, et c'est très long.

    3 - Ma fonction "NodeChild" fonctionne très bien chez moi (powershell v3) mais pas du tout sur mon pc du boulot (powershell v2). Je l'ai mis ici en commentaire pour allerger le chargement.

    Voici mon code:

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    
    
    #Création de la 2ème fenetre Form2
    # create Window
    $Form2 = New-Object System.Windows.Forms.Form
    $Form2.Text = "Form2"
    $Form2.Size = New-Object System.Drawing.Size(390, 590)
    $Form2.StartPosition = "CenterScreen"
    # create Treeview-Object
    $TreeView1 = New-Object System.Windows.Forms.TreeView
    $TreeView1.Location = New-Object System.Drawing.Point(15, 12)
    $TreeView1.Size = New-Object System.Drawing.Size(250, 422)
    $Form2.Controls.Add($TreeView1)
    $TreeView1.CheckBoxes = $true
    
    
    ###### Add Nodes to Treeview
    $dirdata = Get-ChildItem -Path "c:\"
    $rootnode = New-Object System.Windows.Forms.TreeNode
    $rootnode.text = "C:\"
    $rootnode.name = "C:\"
    $rootnode.Expand()
    $rootnode.Tag = $dirdata
    
    [void]$treeview1.Nodes.Add($rootnode)
    
    
     
    
    foreach ( $obj in $dirdata ) {     
        if($obj){                                                                                                  
      
            $subnode1 = New-Object System.Windows.Forms.TreeNode
            $subnode1.text = $obj.name
            $subnode1.Name = $obj.Name
            $subnode1.Tag = $obj.FullName
            $rootnode.Nodes.Add($subnode1)
           
        $children= Get-ChildItem $($subnode1.FullPath)
        foreach($child in $children){
            if($child){
                $subnode2=New-Object System.Windows.Forms.TreeNode
                $subnode2.Name = $child.Name
                 $subnode2.Text = $child.Name
                $subnode2.Tag = $child.FullName
                $subnode1.Nodes.Add($subnode2) 
          
           If ($subnode2.Expand){     
           $children= Get-ChildItem $($subnode2.FullPath) 
           foreach($child in $children){
            if($child){
                $subnode3=New-Object System.Windows.Forms.TreeNode
                $subnode3.Name = $child.Name
                 $subnode3.Text = $child.Name
                $subnode3.Tag = $child.FullName
                $subnode2.Nodes.Add($subnode3)
    
                #NodeChild -Node1 $subnode3 -Node2 $subnode4  
                }
                }
                }
                   }
                }                            
                }
                }
      
    
    [void]$form2.showdialog()
    
    
    
    
    
    
    Function NodeChild 
    {
        param($Node1, $Node2)
        
    $children= Get-ChildItem $($Node1.FullPath)
           
        foreach($child in $children){
            if($child){
                $Node2=New-Object System.Windows.Forms.TreeNode
                $Node2.Name = $child.Name
                 $Node2.Text = $child.Name
                $Node2.Tag = $child.FullName
                $Node1.Nodes.Add($Node2)             
                    }
                    }
                    }

    Merci de m'aider.

    jeudi 12 février 2015 00:17
  • Bon j'ai réussi à avancer, j'ai trouvé un bout de code sur un forum que j'ai modifié et intégré à mon script, puis j'ai rajouté une listView pour visualiser ce que contient le dossier sélectionné dans le treeview.

    Maintenant j'arrive à déployer tout le treeview en double-cliquant sur le nom des nœuds.

    Mes nouveaux problèmes sont:

    - Comment dire: Si "$obj" (chaque éléments trouvés dans le"dir" du C:\) est un dossier, lui attribuer telle image, sinon telle image. Voir le commentaire N°1

    - J'ai ajouté une ListView qui affiche les noms des dossiers et fichiers mais j'aimerai qu'ils s'affichent en "liste détail", c'est à dire avec une colonne qui contient les noms et une autre la date de dernière modification (LastWriteDate) et pourquoi pas aussi une colonne qui indique la taille du fichier.

    Je reprécise que je n'ai pas "powershell studio" car je sais qu'il est plus facile d'intégrer des éléments comme la ListView et de la paramétrer.

    - Quand j'attribue une image à ma variable $img1 je lui indique le chemin en entier mais n'y a t'il pas une astuce pour ne pas mettre tout le chemin sachant que l'image se trouve à la racine du dossier contenant également lescript .ps (voir commentaire N°2).

    Voici une partie du code:

    $Form2 = New-Object System.Windows.Forms.Form
    $Form2.Text = "Form2"
    $Form2.Size = New-Object System.Drawing.Size(890, 590)
    $Form2.StartPosition = "CenterScreen"
    
    # create Treeview-Object
    $TreeView1 = New-Object System.Windows.Forms.TreeView
    $TreeView1.Location = New-Object System.Drawing.Point(10, 10)
    $TreeView1.Size = New-Object System.Drawing.Size(250, 422)
    
    
    $TreeView1.CheckBoxes = $true
    $ListView1 = New-Object System.Windows.Forms.ListView
    $ListView1.Location = New-Object System.Drawing.Point(270, 10)
    $ListView1.Size = New-Object System.Drawing.Size(250, 200)
    $Form2.Controls.Add($TreeView1)
    $Form2.Controls.Add($ListView1)
    
    $imgList = New-Object Windows.Forms.ImageList
    $TreeView1.ImageList = $imgList
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 14
    $System_Drawing_Size.Height = 14
    $imgList.ImageSize = $System_Drawing_Size
    
    $img1 = [System.Drawing.Image]::FromFile("F:\SCRIPTS\Powershell\BackUp-Ps\img1.png") #####N°2
    $img2 = [System.Drawing.Image]::FromFile("F:\SCRIPTS\Powershell\BackUp-Ps\img3.png") #####N°2
    
    ###### Add Nodes to Treeview
    $dirdata = dir -Path "c:\" 
    $rootnode = New-Object System.Windows.Forms.TreeNode
    $rootnode.text = "C:\"
    $rootnode.name = "C:\"
    $rootnode.Expand()
    $rootnode.Tag = $dirdata
    
    [void]$treeview1.Nodes.Add($rootnode)
    
    foreach ( $obj in $dirdata ) {    
    	if($obj){																									
    		$subnode1 = New-Object System.Windows.Forms.TreeNode
    		$subnode1.text = $obj.name
            $subnode1.Name = $obj.Name
            $subnode1.Tag = $obj.FullName        
            $rootnode.Nodes.Add($subnode1)
    
        if($obj){                              ########## N°1
            $imgList.Images.Add($img1)
            }
            Else
            {
            $imgList.Images.Add($img2)
            }
    
    
            $treeview1_DoubleClick={        
            $node=$treeview1.SelectedNode
    		if($node.Nodes.Count -eq 0){
    		    $children= dir $($node.FullPath) #|?{$_.PsIsContainer}	
    			foreach($child in $children){
    				if($child){
    					$newnode=New-Object System.Windows.Forms.TreeNode 
    				    $newnode.Name=$child.Name
    				 	$newnode.Text=$child.Name
    					$newnode.Tag=$child.FullName
    					$node.Nodes.Add($newnode)                    
    				}
    			}            
    			$node.Expand()            	            
            }
            }
            $Treeview1_AfterSelect= {
            $ListView1.items.clear()
            if ($Treeview1.SelectedNode) { 
            $children2= dir $($Treeview1.SelectedNode.FullPath) #|?{$_.PsIsContainer}
                foreach($child in $children2){
                $ListView1.Items.Add($Child.Name)
                }
            }
            }   
        }
    }        
            
    $Treeview1.add_DoubleClick($Treeview1_DoubleClick) 
    $Treeview1.add_AfterSelect($Treeview1_AfterSelect)   
    
    [void]$form2.showdialog()

     merci

     
    dimanche 15 février 2015 01:57
  • Salut,

    >> Comment dire: Si "$obj" (chaque éléments trouvés dans le"dir" du C:\) est un dossier, lui attribuer telle image, sinon telle image.
    Utiliser la propriété Tag, comme dans cette démo.

    >>Je reprécise que je n'ai pas "powershell studio"
    La démo se base sur un projet Winform C# sous Visual Studio. Le fichier Designer.cs est ensuite converti en un script Powershell à l'aide de ce module en cours de finalisation. 

    >>Quand j'attribue une image à ma variable $img1 je lui indique le chemin en entier
    Pour un script récupérer le chemin d'exécution (cf. le script de démo compatible ps v2). On le récupère via $Invocation.MyCommand.Path  
    Pour un module utiliser la variable automatique $psScriptRoot.
    Pour les versions PS v3 et >, $psScriptRoot est accessible dans les modules et dans les scripts.

    Autre approche, utiliser un fichier de ressources, ici il est construit sous Visual Studio et compilé avec Resgen.exe via le module ConvertForm.  

    En passant, lors de l'appel à Dir utilise le paramètre -LiteralPath, sinon les chemins contenant des wildcard PS ( '[', ']') ne seront pas traités correctement.

    Enfin, je laisse à d'autres le soin de te répondre sur la création de colonnes dans un Listview.

    Laurent


    Beatus, qui prodest, quibus potest.

    dimanche 15 février 2015 13:45
    Modérateur
  • Bonjour Laurent,

    J'ai avancé un peu dans mon projet (un backUp avec interface graphique où à partir d'un treeview on peu:

    - en sélectionnant un dossier du treeview il affiche son contenu dans un listview

    - en double-cliquant sur les dossiers du treeview il déploie le noeud et affiche le contenu du dossier

    - en cochant la checkbox d'un nœud il affiche le chemin du dossier correspondan, dans une listbox

    Par la suite il y aura des "option" cochées par défaut qui permettent de copier tous les profils et certaines info pc dans un dossier portant le nom du pc.

    Pour le moment j'en suis encore au treeview, listview et listbox.

    Tout fonctionne sauf:

    - tous les nœuds ont une image leurs correspondant (dossier ou fichier), jusque là pas de problème, sauf que quand je sélectionne un fichier dans le treeview son image de fichier se transforme en image de dossier puis revient en image de fichier quand je sélectionne autre chose (ce qui n'est pas vraiment gênant mais bon c'est pas "propre").

    - Dans la listview  qui comporte 2 colonnes, je veux afficher le nom et la date de dernière modification, mais pour la date il veut pas et me créée l'erreur suivante, que je n'arrive pas à corriger:

    "Impossible de convertir l'argument «item» (valeur «29/01/2015 00:23:32») de «Add» en type «
    System.Windows.Forms.ListViewItem+ListViewSubItem»: «Impossible de convertir la valeur «29/01/2015 
    00:23:32» en type «System.Windows.Forms.ListViewItem+ListViewSubItem». Erreur: «Cast non valide de 
    'System.DateTime' en 'System.Windows.Forms.ListViewItem+ListViewSubItem'.»»
    Au caractère F:\SCRIPTS\Powershell\BackUp-Ps\Test1.ps1:380 : 13
    +             $item.SubItems.Add($child.LastWriteTime)
    +             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument"

    Voici une partie du code:

    #region Form2
    #Generated Form Function
    function GenerateForm2 {
    #region Generated Form Objects
    $form2 = New-Object System.Windows.Forms.Form
    $button5 = New-Object System.Windows.Forms.Button
    $button4 = New-Object System.Windows.Forms.Button
    $button3 = New-Object System.Windows.Forms.Button
    $groupBox4 = New-Object System.Windows.Forms.GroupBox
    $label6 = New-Object System.Windows.Forms.Label
    $label5 = New-Object System.Windows.Forms.Label
    $label4 = New-Object System.Windows.Forms.Label
    $label3 = New-Object System.Windows.Forms.Label
    $label2 = New-Object System.Windows.Forms.Label
    $label1 = New-Object System.Windows.Forms.Label
    $checkBox3 = New-Object System.Windows.Forms.CheckBox
    $checkBox2 = New-Object System.Windows.Forms.CheckBox
    $checkBox1 = New-Object System.Windows.Forms.CheckBox
    $progressBar1 = New-Object System.Windows.Forms.ProgressBar
    $statusBar1 = New-Object System.Windows.Forms.StatusBar
    $groupBox1 = New-Object System.Windows.Forms.GroupBox
    $treeView1 = New-Object System.Windows.Forms.TreeView
    $rootnode = New-Object System.Windows.Forms.TreeNode
    $groupBox2 = New-Object System.Windows.Forms.GroupBox
    $ListView1 = New-Object System.Windows.Forms.ListView
    $groupBox3 = New-Object System.Windows.Forms.GroupBox
    $button2 = New-Object System.Windows.Forms.Button
    $button1 = New-Object System.Windows.Forms.Button
    $listBox1 = New-Object System.Windows.Forms.ListBox
    $groupBox5 = New-Object System.Windows.Forms.GroupBox
    $toolTip1 = New-Object System.Windows.Forms.ToolTip
    $columnHeader1 = New-Object System.Windows.Forms.ColumnHeader
    $columnHeader2 = New-Object System.Windows.Forms.ColumnHeader
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
    #endregion Generated Form Objects
    
    #region ImageList for nodes 
    $global:imageList = new-Object System.Windows.Forms.ImageList 
    $System_Drawing_Size = New-Object System.Drawing.Size 
    $System_Drawing_Size.Width = 16
    $System_Drawing_Size.Height = 16 
    $global:imageList.ImageSize = $System_Drawing_Size 
    $image1 = [System.Drawing.Image]::FromFile("$PSScriptRoot\Folder1.ico") 
    $image2 = [System.Drawing.Image]::FromFile("$PSScriptRoot\File.png") 
    $TreeView1.ImageList = $imageList 
    $ListView1.SmallImageList = $imageList
    $global:imageList.Images.Add("folder",$image1) 
    $global:imageList.Images.Add("file",$image2) 
    #endregion 
    
    #----------------------------------------------
    #Generated Event Script Blocks
    #----------------------------------------------
    
    #Provide Custom Code for events specified in PrimalForms.
    $button1_OnClick= 
    {
    $listbox1.Items.remove($listbox1.selecteditem)
    }
    
    $button4_OnClick= 
    {
    
    }
    
    $handler_form2_Load= 
    {
    
    }
    
    $button5_OnClick= 
    {
    
    }
    
    $button2_OnClick= 
    {
    #TODO: Place custom script here
    $listBox1.Items.Clear()
    $subnode1.Checked =$False
    }
    
    $button3_OnClick= 
    {
    
    }
    
    $handler_toolTip1_Popup= 
    {
    
    }
    
    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    $form2.WindowState = $InitialFormWindowState
    
    $TreeView1.CheckBoxes = $true
    
    #$counter=0
    
    
    ###### Add Nodes to Treeview
    $dirdata = dir -LiteralPath "c:\" 
    $rootnode.text = "C:\"
    $rootnode.name = "C:\"
    $rootnode.Tag = $dirdata
    [void]$Treeview1.Nodes.Add($rootnode)
    
    
    #####Affichage des dossiers racine du C
    foreach ( $obj in $dirdata ) {																										
    		$global:subnode1 = New-Object System.Windows.Forms.TreeNode
    		$subnode1.text = $obj.name
            $subnode1.Name = $obj.Name
            $subnode1.Tag = $obj.Name        
            $rootnode.Nodes.Add($subnode1)
            $rootnode.Expand()
           
           ####Affichage des icones dossier ou file sur chaque noeud
            if ($subnode1.Name -notlike "*.*") {         
                $subnode1.ImageIndex = 0             
            }
             else
            { 
                $subnode1.ImageIndex = 1             
            }      
               
            ### Déploiement au double-clic######
            $treeview1_DoubleClick={        
            $global:node=$treeview1.SelectedNode
            $node.Nodes.Clear()               
    		if($node.Text -notlike "*.*"){
    		    $children= dir -LiteralPath $($node.FullPath)
            }
                    
    			foreach($child in $children){				
    					$newnode=New-Object System.Windows.Forms.TreeNode 
    				    $newnode.Name=$child.Name
    				 	$newnode.Text=$child.Name
    					$newnode.Tag=$child.FullName                    
    					$node.Nodes.Add($newnode)                                   
                        
                    ####Affichage des icones dossier ou fichier sur chaque noeud ####
                    if ($child.Directory) {         
                        $newnode.ImageIndex = 1                     
                        }
                        else
                        { 
                        $newnode.ImageIndex = 0                     
                        }			          
    			$node.Expand()
                }                    
              }                 
    
            ###### Liste le contenu du dossier sélectionné dans la listview #####
            $Treeview1_AfterSelect= {
            $ListView1.items.clear()        
            $counter=0
            if ($Treeview1.SelectedNode.Text -notlike "*.*"){         
            $children2= dir -LiteralPath $($Treeview1.SelectedNode.FullPath) -Force
                foreach($child in $children2){            
                $item = New-Object System.Windows.Forms.ListViewItem($child.Name)           
                $item.SubItems.Add($child.LastWriteTime)
                $ListView1.Items.Add($item)
                        
                #### icone dans listview ####
                if ($child.Directory) {         
                $ListView1.Items[$counter].ImageIndex = 1            
                }
                else
                { 
                $ListView1.Items[$counter].ImageIndex = 0             
                } 
                $counter += 1               
                }
                }      
            }
    
            #### Ajout du chemin dans listbox de chaque noeud chécké ####
            $TreeView1_AfterCheck= {
            if($_.Node.Checked)
            {
            $listBox1.Items.Add($_.Node.FullPath)
            }
            Else
            {
            $listBox1.Items.Remove($_.Node.FullPath)        
            }
            } 
    } 
       
            
    $Treeview1.add_DoubleClick($Treeview1_DoubleClick)
    $Treeview1.add_AfterCheck($Treeview1_AfterCheck)
    $Treeview1.add_AfterSelect($Treeview1_AfterSelect)
    }
    #----------------------------------------------
    
    
    #Save the initial state of the form
    $InitialFormWindowState = $form2.WindowState
    #Init the OnLoad event to correct the initial state of the form
    $form2.add_Load($OnLoadForm_StateCorrection)
    #Show the Form
    $form2.ShowDialog()| Out-Null
    } #End Function
    #Call the Function
    GenerateForm2
    #endregion Form2

    Merci encore pour ton aide.



    • Modifié Bylliboy mardi 24 février 2015 23:12 Script trop long, j'ai supprimer la partie "graphique"
    samedi 21 février 2015 16:27
  • Bon je viens de trouver le problème pour la la date de dernière modification:

    J'écrivais:

     $item.SubItems.Add($child.LastWriteTime) ou $item.SubItems.Add($child.LastWriteTime.toString)

    ou $item.SubItems.Add($child.LastWriteTime.ToShortDateString)

    J'oubliais tout bêtement les "()" à la fin, et donc la bonne écriture est:

    $item.SubItems.Add($child.LastWriteTime.ToString())

    mardi 24 février 2015 23:07