anfaengerit
Goto Top

PowerShell Tab Markierung aufheben

Moin,
ich habe mit PowerShell ein GUI-Skript erstellt wo ich mittels einer Listbox, Servernamen aus einer .Json Datei über 2 Tabs auslesen lasse. Wenn man einen Server Auswählt, erstellt man eine Textdatei wo dementsprechend die Server Adresse eingetragen wird.

Mein Problem ist jetzt folgendes: Wenn ich das Skript Starte und z.b. im ersten Tab einen Server Auswähle und dann in ein anderen Tab klicke, bleibt die Auswahl im ersten Tab und dies soll nicht sein, ich beiße mir da echt die Zähne aus.
Ich hoffe mir kann wer helfen face-smile
LG AnfaengerIT

Mein Code:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  

$objForm = New-Object System.Windows.Forms.Form

$objForm.StartPosition = "CenterScreen"  

$objForm.Size = New-Object System.Drawing.Size(640,480)

$TabForm = New-Object System.Windows.Forms.TabControl
$TabForm.Location = "20,60"  
$TabForm.Size = "585,250"  
$objForm.Controls.Add($TabForm)

$Tab1 = New-Object System.Windows.Forms.TabPage
$Tab1.Databindings.DefaultDataSourceUpdateMode = 0
$Tab1.UseVisualStyleBackColor = $True
$Tab1.Name = "user1"  
$Tab1.Text = "user1"  
$TabForm.Controls.Add($Tab1)

$objListBox = New-Object System.Windows.Forms.ListBox
$objListBox.Location = New-Object System.Drawing.Size(20,20)
$objListBox.Size = New-Object System.Drawing.Size(530)
$objListBox.Height = 190
$objListBox.Font = New-Object System.Drawing.Font("Comic Sans MS",12,[System.Drawing.FontStyle]::BOLD)  
$Tab1.Controls.Add($objListBox)
$objForm.TopMost = $true

$array = Get-Content -Path "$env:USERPROFILE\Desktop\Server-List\Test-zwecke\server.json" | ConvertFrom-Json  

[void] $objListBox.Items.Add($array.user1.Server1.Name)
[void] $objListBox.Items.Add($array.user1.Server2.Name)

$Tab2 = New-object System.Windows.Forms.Tabpage
$Tab2.DataBindings.DefaultDataSourceUpdateMode = 0 
$Tab2.UseVisualStyleBackColor = $True 
$Tab2.Name = "user2"   
$Tab2.Text = "user2”   
$TabForm.Controls.Add($Tab2)

$objListBox2 = New-Object System.Windows.Forms.ListBox
$objListBox2.Location = New-Object System.Drawing.Size(20,20)
$objListBox2.Size = New-Object System.Drawing.Size(530)
$objListBox2.Height = 190
$objListBox2.Font = New-Object System.Drawing.Font("Comic Sans MS",12,[System.Drawing.FontStyle]::BOLD)  
$Tab2.Controls.Add($objListBox2)
$objForm.TopMost = $true

[void] $objListBox2.Items.Add($array.user2.Server1.Name)
[void] $objListBox2.Items.Add($array.user2.Server2.Name)
[void] $objListBox2.Items.Add($array.user2.Server3.Name)

$CancelButton = New-Object System.Windows.Forms.Button

$CancelButton.Location = New-Object System.Drawing.Size(340,380)
$CancelButton.Size = New-Object System.Drawing.Size(115,30)
$CancelButton.Font = New-Object System.Drawing.Font("Comic Sans MS",10,[System.Drawing.FontStyle]::Bold)  
$CancelButton.Text = "Cancel"  
$CancelButton.Name = "Cancel"  

$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$OpenButton = New-Object System.Windows.Forms.Button
$OpenButton.Location = New-Object System.Drawing.Size(465,380)
$OpenButton.Size = New-Object System.Drawing.Size(115,30)
$OpenButton.Font = New-Object System.Drawing.Font("Comic Sans MS",10,[System.Drawing.FontStyle]::Bold)  
$OpenButton.Text = "open"  
$OpenButton.Name = "open"  
$OpenButton.DialogResult = "ok"  

$OpenButton.Add_click({

if($objListBox.SelectedItem -like $array.user1.server1.Name){
Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user1.server1.Name,"> %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt" }  

if($objListBox.SelectedItem -like $array.user1.server2.Name){
Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user1.server2.Name,"> %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt" }  

if($objListBox2.SelectedItem -like $array.user2.server1.Name){
Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user2.server1.Name,"> %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt" }  

if($objListBox2.SelectedItem -like $array.user2.server2.Name){
Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user2.server2.Name,"> %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt" }  

if($objListBox2.SelectedItem -like $array.user2.server3.Name){
Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user2.server3.Name,"> %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt" }  

})
$objForm.Controls.Add($OpenButton)

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

Und einmal die .Json datei, falls die gebraucht wird um zu helfen ;) :
{
  "user1": {  
    "Server1": {  
      "Name": "Test-Server1",  
      "Address": "1.2.3.4.5.6"  
    },
    "Server2": {  
      "Name": "Test-Server2",  
      "Address": "6.5.4.3.2.1"  
    }
  },

  "user2": {  
    "Server1": {  
      "Name": "Test-ServerA",  
      "Address": "10.2.21.12.1234"  
    },
    "Server2": {  
      "Name": "Test-ServerB",  
      "Address": "51.65.42.1246"  
    },
    "Server3": {  
      "Name": "Test-ServerC",  
      "Address": "1.142.532.1231"  
    }
  }
}

Content-Key: 4264076907

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

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

Member: emeriks
emeriks Oct 13, 2022 updated at 07:24:37 (UTC)
Goto Top
Hi,
Du willst also erreichen, dass, sobald man auf dem 2. Tab in dessen Listbox einen Eintrag auswählt, dann in der Listbox des 1. Tab die Auswahl aufgehoben wird? Sprich $objListBox.SelectedItem dann leer ist?
Und natürlich auch umgekehrt, wenn man wieder zurück auf den 1. Tab geht und dort in der Listbox auswählt, dass dann die Auswahl des 2. Tab aufgehoben wird?

E.
Member: emeriks
Solution emeriks Oct 13, 2022 at 07:29:06 (UTC)
Goto Top
Du könntest abfragen, auf welchem Tab Du gerade bist.

If($Tabform.SelectedTab.Name -eq $Tab1.Name) {
  if($objListBox.SelectedItem -like $array.user1.server1.Name){
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user1.server1.Name,">   
    %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt"   
  }
  if($objListBox.SelectedItem -like $array.user1.server2.Name){
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user1.server2.Name,">   
    %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt"   
  }
}
If($Tabform.SelectedTab.Name -eq $Tab2.Name) {
  if($objListBox2.SelectedItem -like $array.user2.server1.Name){
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user2.server1.Name,">   
    %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt"   
  }

  if($objListBox2.SelectedItem -like $array.user2.server2.Name){
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user2.server2.Name,">   
    %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt"  
  }

  if($objListBox2.SelectedItem -like $array.user2.server3.Name){
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo ",$array.user2.server3.Name,">   
    %USERPROFILE%\Desktop\Server-List\Test-zwecke\server.txt"  
  }

}
Member: AnfaengerIT
AnfaengerIT Oct 13, 2022 at 12:39:11 (UTC)
Goto Top
Vielen dank für die Lösung meines Problems.
Das war genau dass wonach ich gesucht hatte, danke face-smile
LG AnfaengerIT
Member: emeriks
emeriks Oct 14, 2022 at 06:56:49 (UTC)
Goto Top
Elegant ist das aber nicht. face-wink
Member: AnfaengerIT
AnfaengerIT Oct 14, 2022 at 07:13:35 (UTC)
Goto Top
Und was wäre davon die Eleganteste Lösung ? face-smile
Member: emeriks
emeriks Oct 14, 2022 at 08:02:41 (UTC)
Goto Top
Na ja. Du liest da ein JSON-File ein. Doch sicherlich deshalb, weil sich dieses ändern kann, oder? Denn sonst könntest Du doch im Script alles "hart verdrahten".

Oder ist die Anzahl der Server in den einzelnen Blöcken immer statisch und nur die Werte dahinter ändern sich ggf.?
Member: AnfaengerIT
AnfaengerIT Oct 14, 2022 at 08:14:08 (UTC)
Goto Top
Die JSON-File habe ich, weil sich alles theoretisch ändern kann, allerdings bin ich etwas neu was das Programmieren bzw. das Skripten angeht, deshalb ist leider noch alles statisch im Programm aufgebaut und ich bisher noch nicht auf die Lösung kam, alles "dynamisch" aufzubauen außer die JSON-File face-smile