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-ID: 323410

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

Ausgedruckt am: 27.11.2024 um 13:11 Uhr

131381
Lösung 131381 10.12.2016 um 10:19:54 Uhr
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
Markus2016
Markus2016 10.12.2016 um 21:14:21 Uhr
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 })
Markus2016
Markus2016 11.12.2016 um 22:15:18 Uhr
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" }  
    })
}
colinardo
Lösung colinardo 12.12.2016 aktualisiert um 09:19:23 Uhr
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
Markus2016
Markus2016 13.12.2016 um 20:00:34 Uhr
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
Markus2016
Markus2016 16.12.2016 aktualisiert um 19:20:09 Uhr
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
colinardo
colinardo 16.12.2016 aktualisiert um 21:06:45 Uhr
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.
Markus2016
Markus2016 16.12.2016 um 21:53:04 Uhr
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 
}
Markus2016
Markus2016 16.12.2016 um 22:01:06 Uhr
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
colinardo
Lösung colinardo 16.12.2016 aktualisiert um 22:24:38 Uhr
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.
Markus2016
Markus2016 16.12.2016 um 23:44:53 Uhr
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