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

Url: https://administrator.de/forum/powershell-tab-markierung-aufheben-4264076907.html

Ausgedruckt am: 22.12.2024 um 05:12 Uhr

emeriks
emeriks 13.10.2022 aktualisiert um 09:24:37 Uhr
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.
emeriks
Lösung emeriks 13.10.2022 um 09:29:06 Uhr
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"  
  }

}
AnfaengerIT
AnfaengerIT 13.10.2022 um 14:39:11 Uhr
Goto Top
Vielen dank für die Lösung meines Problems.
Das war genau dass wonach ich gesucht hatte, danke face-smile
LG AnfaengerIT
emeriks
emeriks 14.10.2022 um 08:56:49 Uhr
Goto Top
Elegant ist das aber nicht. face-wink
AnfaengerIT
AnfaengerIT 14.10.2022 um 09:13:35 Uhr
Goto Top
Und was wäre davon die Eleganteste Lösung ? face-smile
emeriks
emeriks 14.10.2022 um 10:02:41 Uhr
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.?
AnfaengerIT
AnfaengerIT 14.10.2022 um 10:14:08 Uhr
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