$Script:Version = "FS Admin Panel v0.8" #Ersteller: Florian Späth #Diese Software soll helfen die verschiedensten Anwendungen und Scripte der FG HDS zu administrieren. Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null ### Variablen Definition ### # array = Settings , $script:array=@($false,$true) function getValues($formTitle, $textTitle){ [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $objForm = New-Object System.Windows.Forms.Form $objForm.Text = $formTitle $objForm.Size = New-Object System.Drawing.Size(300,200) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$x=$objTextBox.Text;$objForm.Close()}}) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(75,120) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.Add_Click({$Script:userInput=$objTextBox.Text;$objForm.Close()}) $objForm.Controls.Add($OKButton) $CANCELButton = New-Object System.Windows.Forms.Button $CANCELButton.Location = New-Object System.Drawing.Size(150,120) $CANCELButton.Size = New-Object System.Drawing.Size(75,23) $CANCELButton.Text = "CANCEL" $CANCELButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($CANCELButton) $objLabel = New-Object System.Windows.Forms.Label $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = New-Object System.Drawing.Size(280,30) $objLabel.Text = $textTitle $objForm.Controls.Add($objLabel) $objTextBox = New-Object System.Windows.Forms.TextBox $objTextBox.Location = New-Object System.Drawing.Size(10,50) $objTextBox.Size = New-Object System.Drawing.Size(260,20) $objForm.Controls.Add($objTextBox) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() return $userInput } ### $schema = getValues "Database Schema" "Enter database schema" #### Lädt Scripte #### function Load_main { [XML]$Form = @" "@ # Lädt das Fenster $window=[Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $Form)) # Objekt - Variablen Verknüpfung #Main $Script:menu1 = $window.findName("menu1") $Script:menu2 = $window.findName("menu2") $Script:menu3 = $window.findName("menu3") $Script:menu4 = $window.findName("menu4") $Script:menu5 = $window.findName("menu5") $Script:menu6 = $window.findName("menu6") $Script:img1 = $window.findName("img1") $Script:img2 = $window.findName("img2") $Script:img3 = $window.findName("img3") $Script:img4 = $window.findName("img4") $Script:img5 = $window.findName("img5") $Script:img6 = $window.findName("img6") $Script:btn_info = $window.findName("btninfo") $Script:settings = $window.findName("btnsettings") $Script:imginfo = $window.findName("imginfo") $Script:imgsettings = $window.findName("imgsettings") $Script:l1 = $window.findName("l1") $Script:log = $window.findName("log") $Script:work = $window.findName("work") $Script:btn_standby = $window.findName("btn_standby") $Script:btn_shutdown = $window.findName("btn_shutdown") $Script:btn_settings = $window.findName("btn_settings") $Script:btn_close = $window.findName("btn_close") #KI Endpoint $Script:chatwithme_output = $window.findName("chatwithme_output") $Script:chatwithme_input = $window.findName("chatwithme_input") $Script:chatwithme_send = $window.findName("chatwithme_send") #R710 $Script:btn_r710_stop = $window.findName("btn_r710_stop") $Script:btn_r710_start = $window.findName("btn_r710_start") $Script:img_r710_start = $window.findName("img_r710_start") $Script:btn_r710_info = $window.findName("btn_r710_info") $Script:btn_r710_m1 = $window.findname("btn_r710_m1") $Script:btn_r710_m2 = $window.findname("btn_r710_m2") $Script:tb_r710_power = $window.findname("tb_r710_power") $Script:tb_r710_mac = $window.findname("tb_r710_mac") $Script:tb_r710_ip = $window.findname("tb_r710_ip") $Script:tb_r710_bios = $window.findname("tb_r710_bios") $Script:tb_r710_name = $window.findname("tb_r710_name") $Script:l1_r710 = $window.findname("l1_R710") $Script:l2_r710 = $window.findname("l2_R710") $Script:l3_r710 = $window.findname("l3_R710") $Script:l4_r710 = $window.findname("l4_R710") $Script:l5_r710 = $window.findname("l5_R710") #Center $Script:btn_center_megstop = $window.findName("btn_center_megstop") $Script:btn_center_megstart = $window.findName("btn_center_megstart") $Script:img_center_megstart = $window.findName("img_center_megstart") $Script:btn_center_info = $window.findName("btn_center_info") $Script:btn_center_itmstop = $window.findName("btn_center_itmstop") $Script:btn_center_itmstart = $window.findName("btn_center_itmstart") $Script:img_center_itmstart = $window.findName("img_center_itmstart") $Script:btn_center_m1 = $window.findname("btn_center_m1") $Script:btn_center_m2 = $window.findname("btn_center_m2") $Script:tb1_center = $window.findname("tb1_center") $Script:tb2_center = $window.findname("tb2_center") $Script:tb3_center = $window.findname("tb3_center") $Script:tb4_center = $window.findname("tb4_center") $Script:tb5_center = $window.findname("tb5_center") $Script:l1_center = $window.findname("l1_center") $Script:l2_center = $window.findname("l2_center") $Script:l3_center = $window.findname("l3_center") $Script:l4_center = $window.findname("l4_center") $Script:l5_center = $window.findname("l5_center") $Script:l6_center = $window.findname("l6_center") $Script:l7_center = $window.findname("l7_center") # Fensterwahl #if (condition) { #$window.Height="912" #$window.Width="1370" #$window.WindowStyle="None" #$window.WindowState="Maximized" #$window.Height="912" #$window.Width="1370" #$window.WindowStyle="SingleBorderWindow" #$window.WindowState="Normal" #} # Verknüpft feste Elemente $window.Title = $Script:Version $window.icon="$PSScriptroot/Source/Logo.png" $imginfo.Source = "$PSScriptroot/Source/info.png" $imgsettings.Source = "$PSScriptroot/Source/Konfig.png" $img1.Source = "$PSScriptroot/Source/Dash.png" $img2.Source = "$PSScriptroot/Source/Server.png" $img3.Source = "$PSScriptroot/Source/center.png" $img_center_megstart.Source ="$PSScriptroot/Source/Start.png" $img_center_itmstart.Source ="$PSScriptroot/Source/Start.png" $img_r710_start.Source ="$PSScriptroot/Source/Start.png" return $window } $Script:main = Load_main # Variable: $main . $PSScriptRoot\GUIS\info.ps1 $PSSCriptRoot . $PSSCriptRoot\GUIS\confirm.ps1 $PSScriptRoot #### Definition globaler Variablen #### ## Die GO variable kann nach aufruf der confirm funktion abgefragt werden, um eine 2. Bestätigung der eingabe zu erhalten. (Aufruf: confirm $text) [boolean]$Script:GO = $false $Script:ScriptRoot = $PSScriptRoot $Script:iconpath = "$PSScriptRoot\icons" $Script:config = Import-CSV -Path "$PSScriptRoot\config.csv" $Script:RACpath = ($config | where{$_.ID -eq "racadm_path"}).value $Script:plinkpath = ($config | where{$_.ID -eq "plink_path"}).value $Script:idracuser = ($config | where{$_.ID -eq "idracuser"}).value $Script:idracpass = ($config | where{$_.ID -eq "idracpass"}).value if($Script:idracpass -eq ""){ $idracuser = getValues "IDRAC Configurator" "Enter idrac user" $idracpass = getValues "IDRAC Configurator" "Enter idrac password" $NewLine = "idracuser, $idracuser" -f $NewLine | add-content -path "$PSScriptRoot\config.csv" $NewLine = "idracpass, $idracpass" -f $NewLine | add-content -path "$PSScriptRoot\config.csv" } write-host $Script:idracuser Write-host $Script:idracpass #$Script:cert_path = ($config | where{$_.ID -eq "some"}).value #$Script:defudbu_path = ($config | where{$_.ID -eq "some"}).value $logfile = "$PSScriptRoot\log.txt" ### Farb Variablen ### $Script:Standardbtncolor = "#00b8d4" $Script:Delcolor = "#d50000" $Script:BackgroundMovecolor = "#FFFFEB9C" $Script:ForegroundMovecolor = "#FF9C6500" $Script:Foregroundgrey = "#FF7A7A7A" $Script:Backgroundgrey = "#FFC5C5C5" #### Funktionen #### ### Global ### function Write-Admin-Log{ Param($text) "$(get-date -format "yyyy-MM-dd HH:mm:ss"): $($text)" | out-file $logfile -Append $log.content += "$text `n" } function Resolve-DnsName { param ( [Parameter(Mandatory)][string]$ComputerName ) try { [System.Net.Dns]::GetHostAddresses($ComputerName).IPAddressToString return ([System.Net.Dns]::GetHostAddresses($ComputerName).IPAddressToString) } catch { Write-Log "IP not found for $ComputerName!" } } Function Select-FolderDialog{ param([string]$Description="Zielverzeichnis wählen",[string]$RootFolder="Desktop") [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |Out-Null $objForm = New-Object System.Windows.Forms.FolderBrowserDialog $objForm.Rootfolder = $RootFolder $objForm.Description = $Description $Show = $objForm.ShowDialog() If ($Show -eq "OK"){ Return $objForm.SelectedPath }else{ Return $false } } function working { param ( $status ) if ($status) { $Script:work.Background="Darkred" }else { $Script:work.Background="Darkgreen" } } #### Startet die Anwendung #### ### Initialisieren ### $Script:btn_info.Add_Click({ $Script:info.ShowDialog() }) ### Settings ### $settings.Add_Click({ if ($Script:array[0]) { $Script:btn_settings.Visibility = "Hidden" $Script:btn_standby.Visibility = "Hidden" $Script:btn_shutdown.Visibility = "Hidden" $Script:btn_close.Visibility = "Hidden" $Script:array[0]=$false }else { $Script:btn_settings.Visibility = "Visible" $Script:btn_standby.Visibility = "Visible" $Script:btn_shutdown.Visibility = "Visible" $Script:btn_close.Visibility = "Visible" $Script:array[0]=$true } }) $Script:btn_settings.Add_Click({ }) $Script:btn_standby.Add_Click({ if (confirm "Wanna SUSPEND the System?") { $PowerState = [System.Windows.Forms.PowerState]::Suspend $Force = $false $DisableWake = $false [System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake) } }) $Script:btn_shutdown.Add_Click({ if (confirm "Wanna SHUTDOWN the System?") { $PowerState = [System.Windows.Forms.PowerState]::Shutdown $Force = $false $DisableWake = $false [System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake) } }) $Script:btn_close.Add_Click({ $main.Hide() }) ### Menu ### function clearGUI { #KI $Script:chatwithme_output.Visibility = "Hidden" $Script:chatwithme_input.Visibility = "Hidden" $Script:chatwithme_send.Visibility = "Hidden" #R710 $Script:btn_r710_stop.Visibility = "Hidden" $Script:btn_r710_start.Visibility = "Hidden" $Script:btn_r710_info.Visibility = "Hidden" $Script:btn_r710_m1.Visibility = "Hidden" $Script:btn_r710_m2.Visibility = "Hidden" $Script:tb_r710_power.Visibility = "Hidden" $Script:tb_r710_mac.Visibility = "Hidden" $Script:tb_r710_ip.Visibility = "Hidden" $Script:tb_r710_bios.Visibility = "Hidden" $Script:tb_r710_name.Visibility = "Hidden" $Script:l1_r710.Visibility = "Hidden" $Script:l2_r710.Visibility = "Hidden" $Script:l3_r710.Visibility = "Hidden" $Script:l4_r710.Visibility = "Hidden" $Script:l5_r710.Visibility = "Hidden" #Center $Script:btn_center_megstop.Visibility = "Hidden" $Script:btn_center_megstart.Visibility = "Hidden" $Script:btn_center_info.Visibility = "Hidden" $Script:btn_center_itmstop.Visibility = "Hidden" $Script:btn_center_itmstart.Visibility = "Hidden" $Script:btn_center_m1.Visibility = "Hidden" $Script:btn_center_m2.Visibility = "Hidden" $Script:tb1_center.Visibility = "Hidden" $Script:tb2_center.Visibility = "Hidden" $Script:tb3_center.Visibility = "Hidden" $Script:tb4_center.Visibility = "Hidden" $Script:tb5_center.Visibility = "Hidden" $Script:l1_center.Visibility = "Hidden" $Script:l2_center.Visibility = "Hidden" $Script:l3_center.Visibility = "Hidden" $Script:l4_center.Visibility = "Hidden" $Script:l5_center.Visibility = "Hidden" $Script:l6_center.Visibility = "Hidden" $Script:l7_center.Visibility = "Hidden" } function SwitchGUI { param ( $menu ) if ($menu -match "m1") { clearGUI $Script:chatwithme_output.Visibility = "Visible" $Script:chatwithme_input.Visibility = "Visible" $Script:chatwithme_send.Visibility = "Visible" }elseif ($menu -match "m2") { clearGUI $Script:btn_r710_stop.Visibility = "Visible" $Script:btn_r710_start.Visibility = "Visible" $Script:btn_r710_info.Visibility = "Visible" $Script:btn_r710_m1.Visibility = "Visible" $Script:btn_r710_m2.Visibility = "Visible" $Script:tb_r710_power.Visibility = "Visible" $Script:tb_r710_mac.Visibility = "Visible" $Script:tb_r710_ip.Visibility = "Visible" $Script:tb_r710_bios.Visibility = "Visible" $Script:tb_r710_name.Visibility = "Visible" $Script:l1_r710.Visibility = "Visible" $Script:l2_r710.Visibility = "Visible" $Script:l3_r710.Visibility = "Visible" $Script:l4_r710.Visibility = "Visible" $Script:l5_r710.Visibility = "Visible" }elseif ($menu -match "m3") { clearGUI $Script:btn_center_megstop.Visibility = "Visible" $Script:btn_center_megstart.Visibility = "Visible" $Script:btn_center_info.Visibility = "Visible" $Script:btn_center_itmstop.Visibility = "Visible" $Script:btn_center_itmstart.Visibility = "Visible" $Script:btn_center_m1.Visibility = "Visible" $Script:btn_center_m2.Visibility = "Visible" $Script:tb1_center.Visibility = "Visible" $Script:tb2_center.Visibility = "Visible" $Script:tb3_center.Visibility = "Visible" $Script:tb4_center.Visibility = "Visible" $Script:tb5_center.Visibility = "Visible" $Script:l1_center.Visibility = "Visible" $Script:l2_center.Visibility = "Visible" $Script:l3_center.Visibility = "Visible" $Script:l4_center.Visibility = "Visible" $Script:l5_center.Visibility = "Visible" $Script:l6_center.Visibility = "Visible" $Script:l7_center.Visibility = "Visible" }elseif ($menu -match "m4") { clearGUI }elseif ($menu -match "m5") { clearGUI }elseif ($menu -match "m6") { clearGUI } } $Script:menu1.Add_Click({ switchGUI -menu "m1" $Script:l1.Content = "Local LLM" }) $Script:menu2.Add_Click({ switchGUI -menu "m2" $Script:l1.Content = "R710 Control" }) $Script:menu3.Add_Click({ switchGUI -menu "m3" $Script:l1.Content = "Gaming Control" }) $Script:menu4.Add_Click({ switchGUI -menu "m4" }) $Script:menu5.Add_Click({ switchGUI -menu "m5" }) $Script:menu6.Add_Click({ switchGUI -menu "m6" }) ### ChatWithMe ### $Script:chatwithme_input.Add_KeyDown({ if ($_.Key -eq "Enter") { $payload = @{ model="Mini Orca (Small)" messages = @(@{ role = "user" content = "$($Script:chatwithme_input.text)" } ) max_tokens = 2048 temperature = 0.7 } $json = ($payload | ConvertTo-Json -Depth 6 -compress) $response = (Invoke-WebRequest -URI http://192.168.178.182:4891/v1/chat/completions -Method POST -ContentType application/json -Body $json) $content = $response.Content $index = ($content.IndexOf("content"))+10 $second_index = $content.Substring($index).IndexOf("role")-3 $cutdown= $content.Substring($index, $second_index) $Script:chatwithme_output.Text = $cutdown.replace("/n", " ") } }) $Script:chatwithme_send.Add_Click({ $payload = @{ model="Mini Orca (Small)" messages = @(@{ role = "user" content = "$($Script:chatwithme_input.text)" } ) max_tokens = 2048 temperature = 0.7 } $json = ($payload | ConvertTo-Json -Depth 6 -compress) $response = (Invoke-WebRequest -URI http://192.168.178.182:4891/v1/chat/completions -Method POST -ContentType application/json -Body $json) $content = $response.Content $index = ($content.IndexOf("content"))+10 $second_index = $content.Substring($index).IndexOf("role")-3 $cutdown= $content.Substring($index, $second_index) $Script:chatwithme_output.Text = $cutdown.replace("/n", " ") }) ### R710 ### function get_r710_stats { working $true cd $Script:racpath $collection = $(.\racadm.exe -r spaeth-bayern.de:5005 -u root -p "kt}y/6ZHF~.@" getsysinfo) foreach ($item in $collection) { if ($null -ne $item) { $log.Text += "$item`n" if($item -match "DNS RAC Name"){ $index = ($item.IndexOf("=")) $Script:tb_r710_name.Text = $item.Substring($index+1) } if($item -match "Firmware Version"){ $index = ($item.IndexOf("=")) $Script:tb_r710_bios.Text = $item.Substring($index+1) } if($item -match "Power Status"){ $index = ($item.IndexOf("=")) $Script:tb_r710_power.Text = $item.Substring($index+1) } if($item -match "MAC Address"){ $index = ($item.IndexOf("=")) $Script:tb_r710_mac.Text = $item.Substring($index+1) } if($item -match "Power Status"){ $index = ($item.IndexOf("=")) $Script:tb_r710_power.Text = $item.Substring($index+1) } } } cd $PSSCriptRoot working $false } $btn_r710_start.Add_Click({ Write-Admin-Log "BTN r710 start pressed" if (confirm "Server R710 wird durch erneute betätigung gestartet") { cd $racpath $r710_log.Text += $(.\racadm.exe -r spaeth-bayern.de:5005 -u root -p "kt}y/6ZHF~.@" serveraction powerup) } }) $btn_r710_stop.Add_Click({ Write-Admin-Log "BTN r710 stop pressed" if (confirm "Server R710 wird durch erneute betätigung gestopt`n`nSind alle Virtuelle Maschinen ausgeschaltet?") { cd $Script:racpath $r710_log.Text += $(.\racadm.exe -r spaeth-bayern.de:5005 -u root -p "kt}y/6ZHF~.@" serveraction powerdown) } }) $btn_r710_info.Add_Click({ Write-Admin-Log "BTN r710 inspect pressed" get_r710_stats }) #Center $Script:btn_center_itmstart.Add_Click({ $Password = "Ob>Q%T\;Cf(9\+T+-7lNQl*i*)(3;Egl" $servername = '192.168.178.4' $username = 'spaethf' Write-Admin-Log "BTN ITM pressed" if (confirm "Bei dem Server gaming Server ITM wird eine Power Aktion ausgeführt") { $command = 'python tap_itm.py' #Execute SSH command echo y | &($plinkpath + "\plink.exe") -pw $password $username@$servername $command } }) $Script:btn_center_itmstop.Add_Click({ $Password = "Ob>Q%T\;Cf(9\+T+-7lNQl*i*)(3;Egl" $servername = '192.168.178.4' $username = 'spaethf' Write-Admin-Log "BTN ITM pressed" if (confirm "Bei dem Server gaming Server ITM wird eine Power Aktion ausgeführt") { $command = 'python tap_itm.py' #Execute SSH command echo y | &($plinkpath + "\plink.exe") -pw $password $username@$servername $command } }) $Script:btn_center_megstart.Add_Click({ $Password = "Ob>Q%T\;Cf(9\+T+-7lNQl*i*)(3;Egl" $servername = '192.168.178.4' $username = 'spaethf' Write-Admin-Log "BTN MEG pressed" if (confirm "Bei dem Server gaming Server MEG wird eine Power Aktion ausgeführt") { $command = 'python tap_meg.py' #Execute SSH command echo y | &($plinkpath + "\plink.exe") -pw $password $username@$servername $command } }) $Script:btn_center_megstop.Add_Click({ $Password = "Ob>Q%T\;Cf(9\+T+-7lNQl*i*)(3;Egl" $servername = '192.168.178.4' $username = 'spaethf' Write-Admin-Log "BTN MEG pressed" if (confirm "Bei dem Server gaming Server MEG wird eine Power Aktion ausgeführt") { $command = 'python tap_meg.py' #Execute SSH command echo y | &($plinkpath + "\plink.exe") -pw $password $username@$servername $command } }) ### Öffnet erstes Fenster ### Write-Admin-Log "##### OPEN MAIN WINDOW #####" clearGUI switchGUI "m1" $main.ShowDialog() | Out-Null