Jump to content

cosmo87

Members
  • Gesamte Inhalte

    11
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von cosmo87

  1. Danke dafür. Das hat mir etwas weiter geholfen Jetzt überlege ich noch ob ich die Abfragen mit runspace laufen lassen in einer while-schleife laufen lassen kann und davon den rückgabewerte auslese. Sozusagen: .BackgrundColor = (if{runspaceXY}{red}else{red}) runspace deswegen weil es 75 Verbindungen sind und die zB. 1x alle 10 min abgefragt werden soll.
  2. Das sieht ja mal auch sehr gut aus. Wird, wenn mal Zeit dafür ist.... , nochmal genauer begutachtet! Danke dafür! BTT: Ich stelle meine Frage mal einfacher: Kann ich das Object "System.Windows.Forms.Button" den "BackgroundColor" ändern mit Hilfe einem Timers ".add_tick(if/else)"? Bzw. das Ergebnis von if/else als button.text anzeigen lassen?
  3. Das ist schon das erste Problem... Ich habe bzw, ich musste mich bewusst für Powershell entscheiden. Es steht soweit schon alles. Mir fehlt nur noch diese GUI...
  4. Hallo zusammen, ich beiß mir momentan die Zähne aus beim Erstellen eines kleinen Monitoring-Tools für meine "weniger technisch begabten Kollegen" . Die Idee: alle 43 Standorte die jeweiligen Geräte mittels "Test-Connection" abfragen. Dies sind je Standort 1-3 Systeme + Router. Jetzt wollte ich mit Hilfe einer GUI den Online Status mit einem grünen Button darstellen. Beim Klick auf dem Button soll eine eine neues Fenster erscheinen mit den jeweiligen Befehlen. Beispiel von mir aus Visual Studio: Versucht hätte ich es mit folgenden: Mit XML: Stackpanel, Dockpanel, Grid (nur mit XML finde ich es noch verwirrender. Wobei wenn nötig würde ich mich hier weiter rein kämpfen.) ohne XML: GridView, DataGridView, ListView Am besten klappte es, für mich persönlich, bisher mit "DataGridView": $Standort = @("001","002","003","004","005") function Add-Server{ Param ( $Standort = "", $SystemXY1 = "", $SystemXY2 = "", $SystemXY3 = "", $Router = "" ) $DataGridView_ServerName.Rows.Add($Standort, $SystemXY1, $SystemXY2, $SystemXY3, $Router) } #Load the GDI+ and WinForms Assemblies [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") #Define Form $form1 = New-Object System.Windows.Forms.Form $form1.Text = "" $form1.Name = "form1" $form1.DataBindings.DefaultDataSourceUpdateMode = 0 $form1.Location = New-Object System.Drawing.Point(10, 10) $form1.AutoSize = $true $form1.WindowState = "Normal" $form1.StartPosition = "CenterScreen" #Definine DataGridView $DataGridView_ServerName = New-Object System.Windows.Forms.DataGridView $DataGridView_ServerName.AllowUserToAddRows = $false $DataGridView_ServerName.AllowUserToDeleteRows = $false $DataGridView_ServerName.Top = 10 $DataGridView_ServerName.Left = 10 $DataGridView_ServerName.AutoSize = $true $DataGridView_ServerName.ColumnHeadersVisible = $true $DataGridView_ServerName.ColumnHeadersHeight = 20 $DataGridView_ServerName.Enabled = $true #Add Columns $Column = New-Object System.Windows.Forms.DataGridViewTextBoxColumn $Column.Width = 80 $Column.Name = 'Standort XY' $DataGridView_ServerName.Columns.Add($Column) | Out-Null $Column1 = New-Object System.Windows.Forms.DataGridViewButtonColumn $Column1.Width = 70 $Column1.Name = 'System XY1' $Column1.Text = 'Online!' $DataGridView_ServerName.columns.Add($Column1) | Out-Null $Column2 = New-Object System.Windows.Forms.DataGridViewButtonColumn $Column2.Width = 70 $Column2.Name = 'System XY2' $DataGridView_ServerName.Columns.Add($Column2) | Out-Null $Column3 = New-Object System.Windows.Forms.DataGridViewButtonColumn $Column3.Width = 70 $Column3.Name = 'System XY3' $DataGridView_ServerName.Columns.Add($Column3) | Out-Null $Column4 = New-Object System.Windows.Forms.DataGridViewButtonColumn $Column4.Width = 70 $Column4.Name = 'Router' $DataGridView_ServerName.Columns.Add($Column4) | Out-Null $form1.Controls.AddRange(($DataGridView_ServerName)) #Add Rows for([int]$i=0;$i -lt $Standort.count; $i++ ){ Add-Server $Standort[$i] "Check1" "Check2" "Check3" $Router } $form1.Add_Shown({$form1.Activate()}) $form1.ShowDialog() Meine Frage nun: Wie bekomme ich einen Farbwechsel hin wenn ein System zB offline geht? Ich dachte zuerst ich könnte den Background des Buttons ändern aber bei "New-Object System.Windows.Forms.DataGridViewButtonColumn" lässt sich das nicht einstallen und bei "System.Windows.Forms.Button" kann ich es nicht in "DataGridView" hinzufügen. Ich hoffe hier könnt mir helfen :)
  5. Das stimmt, habe auch schon kostenlose gefunden, aber mir ging es hier hauptsächlich um das Verständnis für Powershell. Warum kann ich einen scheinbar simplen „parallelen Kopiervorgang“ nicht in Powershell schreiben 😅 Im Endeffekt den murks den der Kollege gemacht hat ausbessern und die Verkabelung neu machen bzw. das kabelmanagement. Immerhin ist sicherheits technisch schon Besserung in Sicht, aber der Weg wird noch lang und steinig für mich 😱 habe ich was falsches gesagt? :(
  6. Das sieht auch interessant aus. Ich glaub in den Tiefen das WWW schon mal drüber gestolpert zu sein Grundsätzlich gebe ich dir voll und ganz recht, es stehen auch anderweitig noch "Problemchen" an. Es wurde auch eine Administrations Software für einen 4-stelligen Betrag gekauft, um ein Image zu erstellen und automatisch zu Installieren, bei der sich am Ende raus stellte dass die Installation dann nicht so zu gebrauchen war. Auch hier sind mehrere Std. drauf gegangen bis ich diese Software so weit verstanden und eingestellt hatte. Ich sehe in PS eben die große Flexibilität als Vorteil, aber du hast Recht dass das auch der Nachteil sein kann Ja, die FW ist soweit konfiguriert dass dieser Traffic auf 2 server zugreifen kann/darf. Die Überlegung war ja auch ob ich es nicht sogar über -ToSession/-FromSession mache. Zusammen mit Invoke und AsJob müsste das klappen, denke ich. "Invoke-Command" bzw "EnterPSSession" habe ich auf allen Geräten konfiguriert (vor 4 Monaten war erst der Rollout von allen 75 Geräten an 43 Standorten). Bisher wurden Updates, Einstellungen etc. über eine VNC Session gemacht *Facepalm*. Im Punkto Sicherheit und Admin Freigabe: das wird nach dem After-Rollout auch geändert. Die Geräte haben "nur" einen lokalen Admin, aus Sicherheitsgründen wurden von meinem Vorgesetzten IT-Leiter die Geräte auch nicht in die Domäne mit aufgenommen und mein AD Account hat auch keine kompletten Domänen Rechte. Mein Passwort wird wird in meinen Skripten auch nicht benutzt und der lokale Zugang wird mit Secure-String genutzt. Ich finde "EnterPSSession" oft auch sehr praktisch, da ich fast alles konfigurieren kann ohne mich zB mit VNC drauf zu schalten. Oder eben auch einfache Aufgaben erledigen ohne dass der Mitarbeiter vor Ort gestört wird (zB ping von Gerät A zu Gerät B). Ende des Jahres soll auch die eingesetzte Software der Geräte auch ein Update erhalten. Hier sehe auch den Vorteil von PS dass ich es dann Flexibel, teilweise zur Laufzeit, ändern kann. Bei einigen Anwendungsfällen heißt es auch: "Nein, das brauchen bzw. kaufen wir nicht, da es in ein paar Monaten eh geändert wird!". Trotzdem habe ich einige Probleme, meist einfachste Klickei,Klicki-Aufgaben, die ich aber JETZT schon habe. Und ob es dann nach der genannten "Änderung" dann passt, ist bei der eingesetzten Software fraglich....
  7. Nach mehrmaligen Login und 3 x passwort reset, nun endlich wieder hier... am Handy ist der Login sogar gar nicht möglich?! BTT: Ihr seid der Wahnsinn!! Bevor ich dieses Forum gefunden habe war ich in 2 anderen. Da wurde man schon für Rechtschreibfehler angeschi**en.. vom 2. rede ich erst gar nicht Was wäre der effizienteste Weg? ich bin mir nach der ganzen Recherche da nicht mehr so sicher... Es muss nicht Start-Job sein, bzw. würde ich es zumindest gerne verstehen. Die Dateien sind zwischen 20-300mb groß. Zum "Warum?!" komme ich gleich weiter unten. Ja, hätte ich in dieser Zeit durchaus mit anderer Software lösen können, bzw. habe ich es teilweise schon, aber so habe ich wieder einiges für Powershell gelernt was mir auch in den nächsten Projekten nützlich sein wird. Mir steht da noch so einiges bevor... Auch hier komme ich gleich weiter unten dazu In diesem Firmen-Netzwerk ist noch so einiges aufzuholen. Da sind diese administrativen Freigaben noch das kleinere übel... Diesen Befehl hab ich so auch noch nicht gefunden. Wobei ich das "-Name" im Bezug auf "Start-Job" nicht ganz verstehe. Ist das dann ein Remote-Befehl? Weil: Wenn ich es nacheinander ablaufen lasse, das ganze schon mal über 4 Std. dauern kann. Das liegt teilweise an der Anbindung oder auch an Verbindungsabbrüchen. Invoke-Command habe ich schon getestet, leider ohne Erfolg (siehe mein Post weiter oben Danke für diese Idee und der Erklärung! Ich merke schon dass ihr einem wirklich RICHTIG helfen wollt, eben das "Problem" an der Wurzel anpacken. Zum Background bzw dem "Environment": Ich bin ein Administrator von diesem Netzwerk nach gerade mal 1 Jahr. Wenn nicht sogar der Hauptadmin... Geschuldet durch Geiz, Mangel an Fachinformatiker und fehlendem Personal ist hier einiges aufzuholen um das Unternehmen aus der IT-Steinzeit raus zu holen. Es gibt auch erst seit etwas über 1 Jahr erst eine VPN Verbindung zu diesen 43 Systemen, genauer gesagt 43 Standorte. Davor wurden die Daten völlig unverschlüsselt (zB HTTP) übertragen. Das Problem ist hier die verwendete Software die eigentlich dieses Jahr abgelöst werden sollte. Jetzt läuft sie aber noch für 3 weitere Jahre. Aber diese Entscheidung liegt außerhalb meiner Befugnis.. Die genannten ZIP Dateien sind die Backup Daten (natürlich auch unverschlüsselt) der Datenbank der jeweiligen Systeme. Das einzige Backup davon wird auf einem lokalem USB-Stick gespeichert bzw. werden die Daten Abends an die Zentrale übertragen. Sollte wieder Hochwasser kommen.. da will ich gar nicht weiter dran denken. Bisher ist es fast immer gut gelaufen, aber auf das will ich mich nicht verlassen! Angebunden sind die Systeme via VPN (site-to-site) an den Standorten sind keine besonders zuverlässigen Router und die Zentrale mit einer Sophos XG Firewall. Es wurden immerhin schon die meisten Anbindungen der Router von ADSL auf VDSL Glasfaser umgestellt. Trotzdem müssen die VPN Verbindungen teilweise neu gestartet werden (hierfür baue ich auch schon ein Skript da ich keinen Vollzugriff auf die Sophos habe und somit nur über die WebGUI die Verbindung neu starten kann) Dann steht demnächst noch eine Neu-konfigurierung der Drucker (auch 43 Stück) an. Bisher wurde das über die WebGUI gemacht. Auch hier kann ich mir den Einsatz von PS vorstellen. Achja, die Router müssten auch noch... Die Angebotenen Admin-Software ist entweder nicht nutzbar oder fehlerhaft. Drittanbieter-Software würde wieder Kosten verursachen und ich müsste mich da auch reinarbeiten... Mir steht noch viel Bevor Was in der Frage des TO völlig fehlt: Was ist das "eigentliche" Ziel? Mir gehts um´s Prinzip!!! Bzw. ich möchte mehr über Powershell lernen und ich bin jemand der nicht nur copy&paste machen will, sondern auch verstehen können was dahinter steckt. Zumindest eine gewisse Logik. Wie gesagt: Ich weiß es gibt viele Weg um das meiste davon umzusetzen, aber aus mangelden ressourcen teilweise nicht umsetzbar. Hätte ich einen guten Programmierer zur Hand oder einen "Powershell-Profi", würde mir dadurch viel Zeit erspart Ich bin auch dabei eine PowershellGUI zu erstellen, aber dafür würde ich dann einen seperaten Thread eröffnen. Sollten noch Fragen offen sein, einfach schreiben EDIT: Sry für den langen Text!
  8. Das Skript aus dem ersten Post brachte bisher etwas. aber nur wenn ich für jede Datei einen eigenen "Start-Job -Scriptblock{}" geschrieben habe. Fehlermeldung kommt keine. Wie ich den Job anders als wie mit Get-Job sinn auslesen kann, weiß ich auch nicht sicher
  9. Ja genau. Stichwort parallelisierung. Ich weiß es gibt gefühlt 1000 Wege das zu realisieren, aber eben an dem Punkt "paralelle ausführung" z.B. von einem Array, bin ich an die Grenze von meinem Selbst-Studium geraten. Ich habe mehrere Std (mittlerweile über 40Std.) versucht dass es funktioniert. Wahrscheinlich bin ich gedanklich in einer Sackgasse... Zusätzlich zu "Start-Jobs" bzw "AsJob" habe ich dann noch "./start.ps1" ein skript starten (wobei ich mich hier frage wie man die variablen übergibt und ggf. wieder variablen in das aktuelle powershell übergibt) "Jobs mit Runspace / Invoke", "MultiThreading mit PowerShell mit .NET", "XCOPY" , "ROBOCOPY", "Workflow", "ForEach-Object -parallel", und letztendlich noch über WMI-Objekte. Danach war die Verwirrung komplett :/ Anfangs dachte ich: "wenn es im internet explorer so einfach geht, dann doch auch mit Powershell" Das war auch schon meine Überlegung. Nur möchte ich das selbst manuell anstossen und ich wollte keine 43 skripte einzeln dafür schreiben. Eher würde ich es hier über ein Invoke-Command oder dem PSRemote machen, bzw "Invoke-Command -FromSession" hab auch das schon versucht. Jedoch ohne Erfolg da ich die Variablen nicht übergeben konnte (-ArgumentList).
  10. ja genau,sry '^^ Ich hatte es mit dem skript von dem lokalem Gerät getestet. quelle müsste eigentlich "c:\test\test" heißen. Ich würde nur gern die "Logik" hinter dem start-job verstehen.. Vor allem die Übergabe der "param" klappt mir, je nach dem was ich wieder getestet habe... , nicht. Auch eine "ArgumentList" habe ich mittel "Invoke-Command" versucht. Auch hier fand keine Übergabe der Variablen statt.
  11. Hallo zusammen, ich hoffe hier endlich das richtige Forum gefunden zu haben. Erst seit letztem Jahr hab ich Powershell für mich entdeckt und bisher im selbststudium gelernt. Von daher verzeiht mir Anfängerfehler... Ich möchte alle ZIP dateien aus einem ordner als "Start-Job" (oder ähnliches) starten. Ideal wäre es wenn man das ganze noch als "Invoke-Command –ComputerName $name -Credential $cred -Authentication Negotiate –ScriptBlock {}" machen könnte Hintergrund: Ich benötige zum verarbeiten jeden Tag die ZIP dateien von 43 Windows Geräten. Bisher wurde das von meinem Vorgänger immer über den Windows-Explorer via SMB Freigabe einzeln gemacht (copy&paste)... Fragt hier lieber nicht "Warum?! Es sind teilweise mehrere ZIP und die würde ich nur ungern einzeln verarbeiten... Mein bisher "bester Versuch: $quelle1 = '\\test\test.zip' $quelle2 = '\\test\test2.zip' $ziel = "C:\XY\$computername\$(get-date -format "dd-MM-yyyy")\" $ordner = "C:\YX\$computername" if(!($ordner)){ mkdir -Path $ordner -Force } Start-Job -Scriptblock{ param($quelle1,$ziel) copy-item -Path $quelle1 -Destination $ziel -Force -Verbose -PassThru } -ArgumentList $quelle1,$ziel Start-Job -Scriptblock{ param($quelle2,$ziel) copy-item -Path $quelle2 -Destination $ziel -Force -Verbose -PassThru } -ArgumentList $quelle2,$ziel get-job | wait-job | Remove-Job Ich bin über jede Hilfe dankbar! gruß cosmo87
×
×
  • Neu erstellen...