Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell Probleme mit initialer Start-Wert-Befüllung einer DropDownList

Frage Entwicklung Batch & Shell

Mitglied: dschauerte

dschauerte (Level 1) - Jetzt verbinden

19.06.2014, aktualisiert 14:25 Uhr, 2198 Aufrufe, 5 Kommentare

Hallo liebe Community,

ich schreibe hier das erste Mal und hoffe auf eure guten Tipps.
Aktuell schreibe ich ein großes Skript, welches die Umzüge von Userhomes von FileServer A nach B automatisiert. Zur Auswahl des Ziel-Servers verwende ich eine ComboBox, Style DropDownList.
Ich möchte nun folgendes realisieren:

Die DropDownList soll initial den ersten Wert des Arrays anzeigen, sodass keine $NULL-Übergabe entstehen kann. Zur besseren Übersicht habe ich die Zeilen durchnummeriert. in den Zeilen 21 & 22 wollte ich den Start-Wert setzen. Dies funktioniert so allerdings leider nicht. Könntet ihr mir hier weiterhelfen? Des Weiteren suche ich nach einem Equivalent zu "Me.Close()", um das Fenster mit einem implementierten "Cancel" - Button zu schließen und das gesamte Skript zu beenden.

Für eine Hilfe wäre ich euch sehr dankbar!

Viele Grüße

Daniel

1 function Server-Auswahl
2 {
3 [array]$global:ServerList=Get-Content -Path D:\Scripts\AD\User\PS_UHomeCopy\Tools\FSList.csv | Where-Object {$_ -ne ""}
4 function Return-DropDown
5 {
6 $global:newServer = $DropDown.SelectedItem.ToString()
7 $Form.Close()
8 }
9
10 $Form = New-Object System.Windows.Forms.Form
11 $Form.width = 300
12 $Form.height = 150
13 $Form.Text = ”DropDown”
14 $Form.StartPosition = "CenterScreen"
15 $Form.KeyPreview = $False
16
17 $DropDown = new-object System.Windows.Forms.ComboBox
18 $DropDown.DropDownStyle = "DropDownList"
19 $DropDown.Location = new-object System.Drawing.Size(100,10)
20 $DropDown.Size = new-object System.Drawing.Size(130,30)
21 [System.Int32]$int = 2
22 $DropDown.SelectedIndex = $int
23
24
25 ForEach ($Item in $global:ServerList)
26 {
27 $a = $DropDown.Items.Add($Item)
28 }
29
.
.
$Form.Controls.Add($DropDown)

$DropDownLabel = new-object System.Windows.Forms.Label
$DropDownLabel.Location = new-object System.Drawing.Size(10,10)
$DropDownLabel.size = new-object System.Drawing.Size(100,30)
$DropDownLabel.Text = "Bitte Ziel-Server auswählen:"
$Form.Controls.Add($DropDownLabel)

$Button = new-object System.Windows.Forms.Button
$Button.Location = new-object System.Drawing.Size(100,50)
$Button.Size = new-object System.Drawing.Size(100,20)
$Button.Text = "OK"
$Button.Add_Click({Return-DropDown})
$form.Controls.Add($Button)

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

}
Server-Auswahl
Mitglied: colinardo
LÖSUNG 19.06.2014, aktualisiert um 14:25 Uhr
Hallo dschauerte, Willkommen auf Adminstrator.de!
Du versuchst den Index des DropDown-Feldes zu setzen bevor du es überhaupt mit Inhalt gefüllt hast, also mach dies danach (Zeile 22 nach Zeile 29 verschieben).
Um deine Form zu schließen schreibst du einfach
$Form.Close()
Grüße Uwe

p.s. die Nummerierung kannst du dir sparen wenn du Code-Tags für deinen Quellcode nutzt: <code> Quellcode </code>, ansonsten kommen uns hier auch eventuell wichtige Sonderzeichen abhanden.
Bitte warten ..
Mitglied: dschauerte
19.06.2014, aktualisiert um 14:08 Uhr
Super Uwe, vielen lieben Dank für den ersten Tipp mit der "verrückten" Zeile und den Code-Tags. Das werde ich demnächst beachten.
Zum zweiten Problem:

01.
 
02.
function Return-Cancel 
03.
 
04.
05.
[void][Microsoft.VisualBasic.Interaction]::MsgBox("Abbruch durch Benutzer!","OKOnly,Exclamation","UHomeCopy") 
06.
$Form.Close() 
07.
exit 
08.
09.
 
10.
$Button1 = new-object System.Windows.Forms.Button 
11.
$Button1.Location = new-object System.Drawing.Size(100,50) 
12.
$Button1.Size = new-object System.Drawing.Size(100,20) 
13.
$Button1.Text = "Cancel" 
14.
$Button1.Add_Click({Return-Cancel}) 
15.
$form.Controls.Add($Button1) 
16.
 
Das funktioniert so leider nicht. Hier bekomme ich ne Exception zurück, da sich dabei wohl die Windows Forms verabschieden.
Aus dem VBScript-Umfeld kenne ich da nur "Me.Close()". Das funktioniert hier aber nicht.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 19.06.2014, aktualisiert um 14:48 Uhr
Hierfür musst du aus der Funktion einen Wert zurückgeben anhand dessen du dann in einem If() entscheidest ob das Script beendet wird oder nicht:
Beispiel-Form
01.
function GenerateForm { 
02.
 
03.
#region Import the Assemblies 
04.
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null 
05.
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 
06.
#endregion 
07.
 
08.
$script:quit = $false 
09.
 
10.
#region Generated Form Objects 
11.
$form1 = New-Object System.Windows.Forms.Form 
12.
$button2 = New-Object System.Windows.Forms.Button 
13.
$button1 = New-Object System.Windows.Forms.Button 
14.
$DropDown = New-Object System.Windows.Forms.ComboBox 
15.
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState 
16.
#endregion Generated Form Objects 
17.
 
18.
#---------------------------------------------- 
19.
#Generated Event Script Blocks 
20.
#---------------------------------------------- 
21.
$handler_button2_Click=  
22.
23.
    $form1.Close() 
24.
    $script:quit = $true 
25.
26.
 
27.
$handler_button1_Click=  
28.
29.
    $DropDown.Items.Clear() 
30.
    1..10 | %{$DropDown.Items.Add($_)} 
31.
    $DropDown.SelectedIndex = 2 
32.
33.
 
34.
$OnLoadForm_StateCorrection= 
35.
{#Correct the initial state of the form to prevent the .Net maximized form issue 
36.
	$form1.WindowState = $InitialFormWindowState 
37.
38.
 
39.
#---------------------------------------------- 
40.
#region Generated Form Code 
41.
$System_Drawing_Size = New-Object System.Drawing.Size 
42.
$System_Drawing_Size.Height = 103 
43.
$System_Drawing_Size.Width = 210 
44.
$form1.ClientSize = $System_Drawing_Size 
45.
$form1.DataBindings.DefaultDataSourceUpdateMode = 0 
46.
$form1.Name = "form1" 
47.
$form1.Text = "Testform" 
48.
 
49.
 
50.
$button2.DataBindings.DefaultDataSourceUpdateMode = 0 
51.
 
52.
$System_Drawing_Point = New-Object System.Drawing.Point 
53.
$System_Drawing_Point.X = 102 
54.
$System_Drawing_Point.Y = 55 
55.
$button2.Location = $System_Drawing_Point 
56.
$button2.Name = "button2" 
57.
$System_Drawing_Size = New-Object System.Drawing.Size 
58.
$System_Drawing_Size.Height = 23 
59.
$System_Drawing_Size.Width = 75 
60.
$button2.Size = $System_Drawing_Size 
61.
$button2.TabIndex = 2 
62.
$button2.Text = "exit" 
63.
$button2.UseVisualStyleBackColor = $True 
64.
$button2.add_Click($handler_button2_Click) 
65.
 
66.
$form1.Controls.Add($button2) 
67.
 
68.
 
69.
$button1.DataBindings.DefaultDataSourceUpdateMode = 0 
70.
 
71.
$System_Drawing_Point = New-Object System.Drawing.Point 
72.
$System_Drawing_Point.X = 12 
73.
$System_Drawing_Point.Y = 55 
74.
$button1.Location = $System_Drawing_Point 
75.
$button1.Name = "button1" 
76.
$System_Drawing_Size = New-Object System.Drawing.Size 
77.
$System_Drawing_Size.Height = 23 
78.
$System_Drawing_Size.Width = 75 
79.
$button1.Size = $System_Drawing_Size 
80.
$button1.TabIndex = 1 
81.
$button1.Text = "set index" 
82.
$button1.UseVisualStyleBackColor = $True 
83.
$button1.add_Click($handler_button1_Click) 
84.
 
85.
$form1.Controls.Add($button1) 
86.
 
87.
$DropDown.DataBindings.DefaultDataSourceUpdateMode = 0 
88.
$DropDown.DropDownStyle = 2 
89.
$DropDown.FormattingEnabled = $True 
90.
$System_Drawing_Point = New-Object System.Drawing.Point 
91.
$System_Drawing_Point.X = 12 
92.
$System_Drawing_Point.Y = 12 
93.
$DropDown.Location = $System_Drawing_Point 
94.
$DropDown.Name = "DropDown" 
95.
$System_Drawing_Size = New-Object System.Drawing.Size 
96.
$System_Drawing_Size.Height = 21 
97.
$System_Drawing_Size.Width = 165 
98.
$DropDown.Size = $System_Drawing_Size 
99.
$DropDown.TabIndex = 0 
100.
 
101.
$form1.Controls.Add($DropDown) 
102.
 
103.
#endregion Generated Form Code 
104.
 
105.
#Save the initial state of the form 
106.
$InitialFormWindowState = $form1.WindowState 
107.
#Init the OnLoad event to correct the initial state of the form 
108.
$form1.add_Load($OnLoadForm_StateCorrection) 
109.
#Show the Form 
110.
$form1.ShowDialog()| Out-Null 
111.
 
112.
# gebe den Wert aus der Function zurück 
113.
return $script:quit 
114.
} #End Function 
115.
 
116.
#Call the Function 
117.
$result = GenerateForm 
118.
 
119.
# wenn $true zurückgegeben wird beende Script 
120.
if($result){ 
121.
    exit 
122.
123.
# Script wird weiter ausgeführt wenn die Form $false zurückgibt 
124.
write-host "Script continues here ..."
Hier läuft das Script nur weiter wenn auf das rote X der Form geklickt wurde. Wenn auf den Exit-Button geklickt wurde nicht.
Bitte warten ..
Mitglied: dschauerte
19.06.2014 um 14:48 Uhr
Vielen Dank, es funktioniert!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Sticky Notes - Autostart unterbinden

Tipp von Pedant zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell Fehler beim Start von zweitem Process (5)

Frage von iceboxyz zum Thema Batch & Shell ...

Windows 10
gelöst Windows 10 Start-Probleme - Hilfe (10)

Frage von clragon zum Thema Windows 10 ...

Windows Server
WinServer 2012 R2 Office 2016 Start Probleme (4)

Frage von spacedonuts zum Thema Windows Server ...

Batch & Shell
gelöst Powershell start-process (4)

Frage von Cougar77 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Batch & Shell
gelöst Base64 Decode (Batch,VBS) (26)

Frage von clragon zum Thema Batch & Shell ...

Flatrates
DeutschlandLAN der Telekom - welche internen IPs? (19)

Frage von qualidat zum Thema Flatrates ...

Linux
gelöst Schmaler Scrollbalken in Python-Anwendung (14)

Frage von indi955 zum Thema Linux ...