markus2016
Goto Top

Checkbox Event

Hallo zusammen,

benötige mal wieder Eure Unterstützung.

Über "value.Add_CheckStateChanged" bekomme ich beim Auswählen einer beliebigen Checkbox immer nur den Namen der letzten erzeugten Variable zurück und nicht den der ausgewählten Checkbox.
Genauso werden über den Button "Check all" auch nur die jeweils letzten erzeugten Variblen ausgewählt.

Habe schon alles Mögliche ausprobiert, und kommen nicht weiter.

Schon mal vielen Dank.

Schöne Grüße

Markus2016

Function GenerateForm {

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")   
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.Button")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.Checkbox")  

# Input -----------------------------------------------------------------------------#

$Verzeichnis = "C:\Windows_Home\Windows 10\Programme"  
$Name = @(ForEach ($file in Get-ChildItem -include *.vbs -Path "$Verzeichnis" -Recurse) { (Get-Content $file) | ForEach-Object {$_.Trim("' ")} })  

$Programme_I = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -First 20
$Programme_II = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -Skip 20 -First 20
$Programme_III = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -Skip 40 -First 20

# Input Ende ------------------------------------------------------------------------#

# Window ----------------------------------------------------------------------------#

$Window = New-Object System.Windows.Forms.Form
$Window.StartPosition = "CenterScreen"  
$Window.Size = New-Object System.Drawing.Size(800,600)
$Window.Font = "Eras ITC, 8"  
$Window.Text = "Windows Setup - Programme auswählen und kopieren..."  
$Window.BackColor = "white"                                                    
$Window.Topmost = $true
$Window.ShowInTaskbar=$false
$Window.MaximizeBox = $false
$Window.MinimizeBox = $false
$Window.ControlBox = $true
$Window.Name = "Window"                                            

$i = 0
ForEach ($_ in $Programme_I ) {

	$Variable_I = $Programme_I[$i]
	New-Variable -Name $Variable_I -Value (New-Object System.Windows.Forms.CheckBox) -Force
	$Window.Controls.Add((Get-Variable $Variable_I).Value)
	(Get-Variable $Variable_I).value.Text = $_
	$i++
	$Y = $i * 20

	(Get-Variable $Variable_I).value.Location = New-Object System.Drawing.Size(60, $Y)
	(Get-Variable $Variable_I).value.Size = New-Object System.Drawing.Size(240, 20)
        (Get-Variable $Variable_I).value.Font = "Eras ITC, 8"  
        (Get-Variable $Variable_I).value.checked = $false #$true

        (Get-Variable $Variable_I).value.Add_CheckStateChanged({ Write-Host $Variable_I })
}

$i = 0
ForEach ($_ in $Programme_II ) {

	$Variable_II = $Programme_II[$i]
	New-Variable -Name $Variable_II -Value (New-Object System.Windows.Forms.CheckBox) -Force
	$Window.Controls.Add((Get-Variable $Variable_II).Value)
	(Get-Variable $Variable_II).value.Text = $_
	$i++
	$Y = $i * 20

	(Get-Variable $Variable_II).value.Location = New-Object System.Drawing.Size(300, $Y)
	(Get-Variable $Variable_II).value.Size = New-Object System.Drawing.Size(240, 20)
        (Get-Variable $Variable_II).value.Font = "Eras ITC, 8"  
        (Get-Variable $Variable_II).value.checked = $false #$true

        (Get-Variable $Variable_II).value.Add_CheckStateChanged({ Write-Host $Variable_II })
}

$i = 0
ForEach ($_ in $Programme_III ) {

	$Variable_III = $Programme_III[$i]
	New-Variable -Name $Variable_III -Value (New-Object System.Windows.Forms.CheckBox) -Force
	$Window.Controls.Add((Get-Variable $Variable_III).Value)
	(Get-Variable $Variable_III).value.Text = $_
	$i++
	$Y = $i * 20

	(Get-Variable $Variable_III).value.Location = New-Object System.Drawing.Size(540, $Y)
	(Get-Variable $Variable_III).value.Size = New-Object System.Drawing.Size(240, 20)
        (Get-Variable $Variable_III).value.Font = "Eras ITC, 8"  
        (Get-Variable $Variable_III).value.checked = $false #$true
 
        (Get-Variable $Variable_III).value.Add_CheckStateChanged({ Write-Host $Variable_III })
}

$Window.Controls.Add($Variable_I)
$Window.Controls.Add($Variable_II)
$Window.Controls.Add($Variable_III)

$Button_I = New-Object System.Windows.Forms.Button
$Button_I.Location = New-Object System.Drawing.Size(200,500)
$Button_I.Size = New-Object System.Drawing.Size(140,40)   
$Button_I.Font = "Eras ITC, 10"                                     
$Button_I.ForeColor = "gray"  
$Button_I.Text = "Check all"  
$Button_I.TextAlign = "MiddleCenter"  
$Button_I.Add_Click({

(Get-Variable $Variable_I).value.CheckState = "Checked"  
(Get-Variable $Variable_II).value.CheckState = "Checked"  
(Get-Variable $Variable_III).value.CheckState = "Checked"  

})

$Button_II = New-Object System.Windows.Forms.Button
$Button_II.Location = New-Object System.Drawing.Size(500,500)
$Button_II.Size = New-Object System.Drawing.Size(140,40)   
$Button_II.Font = "Eras ITC, 10"                                     
$Button_II.ForeColor = "gray"  
$Button_II.Text = "Programme kopieren"  
$Button_II.TextAlign = "MiddleCenter"  
$Button_II.Add_Click({

# $Shell = New-Object -ComObject "Shell.Application"  
# $Item = $Shell.Namespace(" Ziel Ordner ")   
# $Item.CopyHere(" Ordner ")  

# $file.DirectoryName + "\"  

})

$Window.Controls.Add($Button_I) 
$Window.Controls.Add($Button_II) 

[void] $Window.ShowDialog()

} GenerateForm

image

Content-Key: 323410

Url: https://administrator.de/contentid/323410

Printed on: April 26, 2024 at 00:04 o'clock

Mitglied: 131381
Solution 131381 Dec 10, 2016 at 09:19:54 (UTC)
Goto Top
Moin,
du gehst das ganze mit den Variablen falsch an. Mach es besser so das du jede Checkbox die du erstellst einem Array hinzufügst. Zum Schluss im Button Event durchläufst du dann das Array der Checkboxen und ermittelst deren Status. Das kannst du ja leicht mit einem where-object machen welches das Array nach gecheckten Checkboxen filtert.
Alternativ kannst du den Checkboxen im Namen ein eindeutiges Prefix geben und dann zum Schluss alle Controls mit einem Where-Object nach Controls der Klasse Checkbox und dem spezifischen Prefix filtern und dann deren Status ermitteln.

Gruß mikrotik
Member: Markus2016
Markus2016 Dec 10, 2016 at 20:14:21 (UTC)
Goto Top
Hallo mikrotik,

wieder mal vielen lieben Dank für Deine Unterstützung.

Das mit dem eindeutigen Namen der Variablen und dem Where-Object hatte ich auch schon ausprobiert.
Ergebnis = Null

Ich verstehe das gerade nicht ganz. In dem Script aus dem Post funktioniert das ja auch?

powershell.org: dynamic form checking checkboxes on click

Schöne Grüße

Markus2016

$i = 0
ForEach ($_ in $Programme_I ) {

    $Variable_I = $Programme_I[$i]
#"$Variable_I" 

	New-Variable -Name $Programme_I[$i] -Value (New-Object System.Windows.Forms.CheckBox) -Force
	$Window.Controls.Add((Get-Variable $Variable_I).Value)
	(Get-Variable $Variable_I).value.Text = $_
	$i++
	$Y = $i * 20

	(Get-Variable $Variable_I).value.Location = New-Object System.Drawing.Size(60, $Y)
	(Get-Variable $Variable_I).value.Size = New-Object System.Drawing.Size(240, 20)
        (Get-Variable $Variable_I).value.Font = "Eras ITC, 8"  
        (Get-Variable $Variable_I).value.checked = $false #$true
        (Get-Variable $Variable_I).Name
        (Get-Variable $Variable_I).value.CheckState

        (Get-Variable $Variable_I).value.Add_CheckStateChanged({ Where-Object {(Get-Variable $Variable_I).Value.CheckState -eq "Checked"} |    
        Write-Host ($Variable_I).Name })
Member: Markus2016
Markus2016 Dec 11, 2016 at 21:15:18 (UTC)
Goto Top
Hallo mikrotik,

ich habe jetzt mal die Checkboxen in ein Array gesetzt wie Du vorgeschlagen hattest.
Aber auch bei dieser Variante bekomme ich nur den letzten Namen des Array ausgegeben, genauso wie bei den Variablen.

Wo habe ich mal wieder den Wurm drin?

Schöne Grüße

Markus2016

$i = 0
ForEach ($_ in $Programme_I ) {
    
    $Programm_I = New-Object System.Windows.Forms.Checkbox
    $Programm_I.Text = $_
    $Programm_I.Name = $_
    $Window.Controls.Add($Programm_I)
    
    $i++
    $Y = $i * 20
    $Programm_I.Location = New-Object System.Drawing.Size(60,$Y) 
    $Programm_I.Size = New-Object System.Drawing.Size(240,20)
    $Programm_I.Checked = $false #$true 

    $Programm_I.Add_CheckStateChanged({ 
    IF ($Window.Controls | ForEach-Object {$Programm_I} | Where-Object -FilterScript {$Programm_I.CheckState -eq "Checked"} | Select-Object ) { Write-Host $Programm_I.Name "Checked" }  
    IF ($Window.Controls | ForEach-Object {$Programm_I} | Where-Object -FilterScript {$Programm_I.CheckState -eq "Unchecked"} | Select-Object  ) { Write-Host $Programm_I.Name "Unchecked" }  
    })
}
Member: colinardo
Solution colinardo Dec 12, 2016 updated at 08:19:23 (UTC)
Goto Top
Servus Markus,
ich glaube du hast @131381 da ziemlich falsch verstanden.

Hier mal ein Beispiel wie man es mit dem Array macht:

#Generated Form Function
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
#endregion

$form1 = New-Object System.Windows.Forms.Form
$btnListChecked = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

# Array welches später die erzeugten Checkboxen enthält
$global:array_checkboxes = @()

$handler_btnListChecked_Click= 
{
    # Abfragen welche der Checkboxen aktiviert wurden
    $checked_boxes = ($global:array_checkboxes | ?{$_.Checked} | %{$_.Text}) -join "`r`n"  
    # Anzeigen was aktiviert wurde
    [System.Windows.Forms.MessageBox]::Show("Aktivierte Checkboxen: `r`n$checked_boxes")  
}

$handler_form1_Load= {

    # 10 Checkboxen erzeugen und dem Array hinzufügen
    1..10 | %{
        $cb = New-Object System.Windows.Forms.CheckBox
        $cb.Name = "Programm_$_"  
        $cb.Location = New-Object System.Drawing.Point(12,[int]($_*20+5))
        $cb.Size = New-Object System.Drawing.Size(104,24)
        $cb.Text = "Programm_$_"  
        $cb.UseVisualStyleBackColor = $True
        $form1.Controls.Add($cb)    
        $global:array_checkboxes += $cb
    }
    
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 395
$System_Drawing_Size.Width = 534
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"  
$form1.Text = "Checkbox-Demo"  
$form1.add_Load($handler_form1_Load)

$btnListChecked.Anchor = 10

$btnListChecked.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 382
$System_Drawing_Point.Y = 360
$btnListChecked.Location = $System_Drawing_Point
$btnListChecked.Name = "btnListChecked"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 140
$btnListChecked.Size = $System_Drawing_Size
$btnListChecked.TabIndex = 0
$btnListChecked.Text = "List checked"  
$btnListChecked.UseVisualStyleBackColor = $True
$btnListChecked.add_Click($handler_btnListChecked_Click)

$form1.Controls.Add($btnListChecked)

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function

GenerateForm
Grüße Uwe
Member: Markus2016
Markus2016 Dec 13, 2016 at 19:00:34 (UTC)
Goto Top
Hallo‎ colinardo,

vielen lieben Dank für das Beispiel.

Oh je, zum Glück gibt es hier im Forum kein Voting zum Mitglied des Monats mit dem Titel "Powershell für Ahnungslose".
Diesen hätte ich wohl mit goßem Abstand gewonnen. face-wink

Spaß beiseite, ich werde mich am WE nochmal hinsetzen.

Schöne Grüße

Markus2016
Member: Markus2016
Markus2016 Dec 16, 2016 updated at 18:20:09 (UTC)
Goto Top
Hallo zusammen,

jetzt habe ich es hinbekommen. face-smile

@ colinardo, mikrotik, vielen lieben Dank für Eure Hilfe.

Einen kleinen Tipp benötige ich noch.

Die "checked" Checkboxen werden in $Checked gespeichert.
Jetzt brauche ich noch den $file.Directory aus $Name oder $Path für das anschließende kopieren der ausgewählten Programme.

Dies habe ich mit "compare" versucht:
$CheckedPath = ($Checked | ForEach-Object {$_} | compare -ReferenceObject $_ -ExcludeDifferent $($Name | ForEach-Object {$_}) | Write-Host {$file.Directory})

Von der Konsole bekomme ich dann die Fehlermeldung:
powershell : compare : Das Eingabeobjekt kann an keine Parameter des Befehls gebunden werden, da der Befehl keine Pipelineeingaben 
In Zeile:1 Zeichen:1
+ powershell -ep RemoteSigned -file "C:\Users\..\De ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (compare : Das E...pelineeingaben :String) , RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
akzeptiert oder die Eingabe und deren Eigenschaften mit keinem der Parameter bereinstimmen, die Pipelineeingaben 
akzeptieren.
In C:\Users\..Desktop\Powershell\Script Windows Setup\Windows Setup Add_Program_v1.8.ps1:120 
Zeichen:55
+ ... ject {$_} | compare -ReferenceObject $_ -ExcludeDifferent $($Name | F ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (
Name         ...Unchecked
:PSObject) [Compare-Object], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.CompareObjectCommand

Kann ich compare hierfür nicht verwenden, oder habe ich einfach wiedermal den Wurm drin?

Vielen Dank im Voraus

Schöne Grüße

Markus

Function GenerateForm {

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")   
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.Button")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.Checkbox")  

# Input -----------------------------------------------------------------------------#
$Root = "C:\Windows_Home\Windows 10\Programme"  
$Name = @(ForEach ($file in Get-ChildItem -include *.vbs -Path "$Root" -Recurse) { (Get-Content $file) | ForEach-Object {$_.Trim("' ")} })  
#$Path = @(ForEach ($file in Get-ChildItem -include *.vbs -Path "$Root" -Recurse) { $file.Directory }) 

$Global:Programme_I = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -First 20
$Global:Programme_II = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -Skip 20 -First 20
$Global:Programme_III = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -Skip 40 -First 20
# Input Ende ------------------------------------------------------------------------#

# Window ----------------------------------------------------------------------------#
$Window = New-Object System.Windows.Forms.Form
$Window.StartPosition = "CenterScreen"  
$Window.Size = New-Object System.Drawing.Size(800,600)
$Window.Font = "Eras ITC, 8"  
$Window.ForeColor = "gray"  
$Window.Text = "Windows Setup - Programme auswählen und kopieren..."  
$Window.BackColor = "white"                                                    
$Window.Topmost = $true
$Window.ShowInTaskbar=$false
$Window.MaximizeBox = $false
$Window.MinimizeBox = $false
$Window.ControlBox = $true
$Window.Name = "Window"    
$Window.DataBindings.DefaultDataSourceUpdateMode = 0       

$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState   

$Global:Checkbox = @()

$Checkbox_Load = {                             

$i = 0
ForEach ($_ in $Global:Programme_I ) {
    
    $Global:Checkbox_I = New-Object System.Windows.Forms.Checkbox
    $Global:Checkbox_I.Text = $_
    $Global:Checkbox_I.Name = $_
    $Global:Checkbox_I.DataBindings.DefaultDataSourceUpdateMode = 0
    $Global:Checkbox += @($Global:Checkbox_I)
    $Window.Controls.Add($Global:Checkbox_I)
    
    $i++
    $Y = $i * 20

    $Global:Checkbox_I.Location = New-Object System.Drawing.Size(60,$Y) 
    $Global:Checkbox_I.Size = New-Object System.Drawing.Size(240,20)
    $Global:Checkbox_I.Checked = $false #$true 

    $Global:Checkbox_I.Add_CheckStateChanged({$Checked; $_.Name})
}

$i = 0
ForEach ($_ in $Global:Programme_II ) {

    $Global:Checkbox_II = New-Object System.Windows.Forms.Checkbox
    $Global:Checkbox_II.Text = $_
    $Global:Checkbox_II.Name = $_
    $Global:Checkbox_II.DataBindings.DefaultDataSourceUpdateMode = 0
    $Global:Checkbox += @($Global:Checkbox_II)
    $Window.Controls.Add($Global:Checkbox_II)
    
    $i++
    $Y = $i * 20

    $Global:Checkbox_II.Location = New-Object System.Drawing.Size(300,$Y) 
    $Global:Checkbox_II.Size = New-Object System.Drawing.Size(240,20)
    $Global:Checkbox_II.Checked = $false #$true 

    $Global:Checkbox_II.Add_CheckStateChanged({$Checked; $_.Name})
}

$i = 0
ForEach ($_ in $Global:Programme_III ) {

    $Global:Checkbox_III = New-Object System.Windows.Forms.Checkbox
    $Global:Checkbox_III.Text = $_
    $Global:Checkbox_III.Name = $_
    $Global:Checkbox_III.DataBindings.DefaultDataSourceUpdateMode = 0
    $Global:Checkbox += @($Global:Checkbox_III)
    $Window.Controls.Add($Global:Checkbox_III)
    
    $i++
    $Y = $i * 20
    $Name.DirectoryName
    $Global:Checkbox_III.Location = New-Object System.Drawing.Size(540,$Y) 
    $Global:Checkbox_III.Size = New-Object System.Drawing.Size(240,20)
    $Global:Checkbox_III.Checked = $false #$true 

    $Global:Checkbox_III.Add_CheckStateChanged({$Checked; $_.Name})
}
}

$OnLoadForm_StateCorrection = { $Window.WindowState = $InitialFormWindowState } 

$Window.add_Load($Checkbox_Load)

$Button_I = New-Object System.Windows.Forms.Button
$Button_I.Location = New-Object System.Drawing.Size(200,500)
$Button_I.Size = New-Object System.Drawing.Size(140,40)  
$Button_I.Font = "Eras ITC, 10"                                     
$Button_I.ForeColor = "gray"  
$Button_I.Text = "Checked Boxes Path"  
$Button_I.TextAlign = "MiddleCenter"  
$Button_I.Add_Click({

    #$Checked = ($Global:Checkbox | ForEach-Object {$_} | Format-Table -Property Name, Path, CheckState | Out-String)
    #Write-Host ($Checked)

    $CheckedPath = ($Checked | ForEach-Object {$_} | compare -ReferenceObject $_ -ExcludeDifferent $($Name | ForEach-Object {$_}) | Write-Host {$file.Directory})
    

    #$CheckedPath = ($Path | ForEach-Object {$_} | Format-Table -Property BaseName, Directory, DirectoryName | Out-String)
    #Write-Host ($CheckedPath) 
    
})

$Button_II = New-Object System.Windows.Forms.Button
$Button_II.Location = New-Object System.Drawing.Size(500,500)
$Button_II.Size = New-Object System.Drawing.Size(140,40)   
$Button_II.Font = "Eras ITC, 10"                                     
$Button_II.ForeColor = "gray"  
$Button_II.Text = "Checked Boxes Message"  
$Button_II.TextAlign = "MiddleCenter"  
$Button_II.DataBindings.DefaultDataSourceUpdateMode = 0
$Button_II.Add_Click({

    $Checked = ($Global:Checkbox | Where-Object {$_.Checked} | ForEach-Object {$_.Text}) -join "`r`n"  
    [System.Windows.Forms.MessageBox]::Show("Aktivierte Checkboxen: `r`n$Checked")  

})

$Window.Controls.Add($Button_I) 
$Window.Controls.Add($Button_II)

$InitialFormWindowState = $Window.WindowState
$Window.add_Load($OnLoadForm_StateCorrection)

[void] $Window.ShowDialog()

} GenerateForm
Member: colinardo
colinardo Dec 16, 2016 updated at 20:06:45 (UTC)
Goto Top
Ich würde direkt beim Auslesen der Programme aus den Pfaden das Verzeichnis der Einfachheit halber in die Eigenschaft Tag der Checkbox schreiben dann kannst du sie hinterher direkt beim Auslesen der Checked-Property abfragen.
Wenn du Compare nutzt musst du aufpassen das die zu vergleichenden Eigenschaften oder Objekte vom gleichen Typ sind, so wie du es oben machst kann es also aus Prinzip nicht funktionieren, da du hier Äpfel mit Birnen vergleichst face-smile.

Deine Konstrukte sind viel zu umständlich gedacht, sorry wenn ich das hier leider sagen muss face-smile.
Member: Markus2016
Markus2016 Dec 16, 2016 at 20:53:04 (UTC)
Goto Top
Hallo colinardo,

über die Möglichkeit hatte ich auch schon nachgedacht. War aber nicht erfolgreich. face-sad
Aufgrund der Sortierung ist die Reihenfolge in $Name und $Path nicht identisch.

Gibt es eine Möglichkeit sicher zu stellen, dass der Name und Path immer zur selben *.vbs gehören.

Vielen lieben Dank

Schöne Grüße

Markus

$Name = @(ForEach ($file in Get-ChildItem -include *.vbs -Path "$Root" -Recurse) { (Get-Content $file) | ForEach-Object {$_.Trim("' ")} })  
$Path = @(ForEach ($file in Get-ChildItem -include *.vbs -Path "$Root" -Recurse) { $file.Directory })  

$Global:Programme_I = $Name | ForEach-Object {$_} | Sort-Object | Select-Object -First 20
$Global:Programme_II = $Name | ForEach-Object {$_} | Sort-Object |  Select-Object -Skip 20 -First 20
$Global:Programme_III = $Name | ForEach-Object {$_} | Sort-Object |  Select-Object -Skip 40 -First 20

$i = 0
ForEach ($_ in $Global:Programme_I ) {
    
    $Global:Checkbox_I = New-Object System.Windows.Forms.Checkbox
    $Global:Checkbox_I.Text = $_
    $Global:Checkbox_I.Name = $_
    $Global:Checkbox_I.Tag = $Path[$i]
    $Global:Checkbox_I.DataBindings.DefaultDataSourceUpdateMode = 0
    $Global:Checkbox += @($Global:Checkbox_I)
    $Window.Controls.Add($Global:Checkbox_I)
    
    $i++
    $Y = $i * 20

    $Global:Checkbox_I.Location = New-Object System.Drawing.Size(60,$Y) 
    $Global:Checkbox_I.Size = New-Object System.Drawing.Size(240,20)
    #$Global:Checkbox_I.checkAlign = "MiddleRight" 
    $Global:Checkbox_I.Checked = $false #$true 
}
Member: Markus2016
Markus2016 Dec 16, 2016 at 21:01:06 (UTC)
Goto Top
Hallo zusammen,

zur Info der Inhalt / Aufbau der *.vbs.

' Adobe Reader XI  

set oShell= CreateObject("Wscript.Shell")  

set oEnv = oShell.Environment("PROCESS")  

oEnv("SEE_MASK_NOZONECHECKS") = 1  

oShell.run "msiexec /i ""%SystemDrive%\Software\Adobe\Reader 11.0.13\AcroRead.msi"" /qb"  

oEnv.Remove("SEE_MASK_NOZONECHECKS")  

Set FSO = CreateObject("Scripting.FileSystemObject")  
If FSO.FileExists("C:\Users\Public\Desktop\Adobe Reader XI.lnk")Then  
FSO.DeleteFile("C:\Users\Public\Desktop\Adobe Reader XI.lnk")  
End If
Member: colinardo
Solution colinardo Dec 16, 2016 updated at 21:24:38 (UTC)
Goto Top
Kein Problem, mach dir einfach ein Object mit beiden Eigenschaften
$data = gci $root -Filter *.vbs -Recurse | Select @{n="Name";e={(gc $_.Fullname -Head 1).trim("' ")}},DirectoryName  
$data
Falls du so ein Konstrukt nicht kennst, das nennt sich Calculated Property.
Das Objekt kannst du Filtern oder auf beide Eigenschaften zugreifen und mit Schleife durchlaufen wie bei anderen Objekten auch.
Member: Markus2016
Markus2016 Dec 16, 2016 at 22:44:53 (UTC)
Goto Top
Hallo colinardo,

vielen lieben Dank.

Perfekt face-smile

Die Welt kann soooo schön einfach sein, wenn man versteht. face-wink

Schöne Grüße

Markus