Jump to content

cosmo87

Members
  • Gesamte Inhalte

    11
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von cosmo87

  1. vor 20 Stunden schrieb MurdocX:

    Ja ;-)

     

    Hier wurde deine Frage beantwortet: c# - Change color of Button in DataGridView - Stack Overflow

     

    Danke dafür. Das hat mir etwas weiter geholfen :lool:

    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. vor 17 Stunden schrieb testperson:

    dann guck dir bspw. Zabbix an. Das dürfte unterm Strich deutlich effektiver sein. In der Regel bekommt man ja beim Essen Hunger. ;-)

     

    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. Hallo zusammen,

     

    ich beiß mir momentan die Zähne aus beim Erstellen eines kleinen Monitoring-Tools für meine "weniger technisch begabten Kollegen" :grins2:.

     

    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:

     

    grafik.png.c66fb2cb5b0fa4388e267e392f3e7c44.png

     

    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 :)

  4. vor 6 Stunden schrieb winmadness:

    @cosmo87 Was ich nicht nachvollziehen kann, warum Du eine Backup Software "neu erfinden" willst. Das Kopieren der 43 zip-Dateien ist ja nur der erste Schritt. Die Backups müssen verwaltet werden, was passiert, wenn einige Backups nicht laufen, wer wird wie benachrichtigt. Es gibt gute Backup-Programme für wenig Geld.

    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 😅

    vor 5 Stunden schrieb cj_berlin:

    Ich wage mir nicht auszumalen, was Du mit "After-Rollout" meinst ;-) Aber Deine Organisation wäre nicht die erste, die ihre IT grundsätzlich durch diese Öffnung betreibt...

    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 😱

    vor 4 Stunden schrieb MurdocX:

    Ich klinke mich aus. Falls noch spezielle Fragen zu Befehlen oder Umsetzungen kommen, helfe ich gerne wieder. :hallo:

     habe ich was falsches gesagt? :(

  5. vor 3 Stunden schrieb testperson:

    bei dem Hintergrund wäre sicherlich "Start-BitsTransfer" eine bessere Lösung. Sinnvollerweise dann aber halt auch aus der Außenstelle zur Zentrale, wie @daabm schon vorgeschlagen hat.

    Das sieht auch interessant aus. Ich glaub in den Tiefen das WWW schon mal drüber gestolpert zu sein :lol2:

     

    vor 2 Stunden schrieb NorbertFe:

    Total offtopic: bei den Voraussetzungen kommt mit Skripten meist auch nur noch mehr Komplexität und deren Folgen dazu. Wenn die Basis aus gründen Mist ist, hilft selten diesen Mist zu automatisieren. ;)

    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 :lool:

    vor 54 Minuten schrieb MurdocX:

    Der findet sich auch schon vorher wieder :aetsch2:  Deine Idee mit dem Bits-Transfer finde ich gut. Es fragt sich dabei, ob QOS überhaupt von der FW beachtet wird.

     

    Ich habe schon mal ein Skript geschrieben, welches dynamisch Code auf 250 Clients ausführt und mir die Auswertung in der PS präsentiert. Dies mit einer möglichst hohen Parallelisierung. Das war alles andere als ein Zuckerschlecken. Lass Dir das gesagt sein ;-)

     

    Generell kannst du "Invoke-Command -AsJob" nutzen. Damit das gut funktioniert, müssen viele Einstellungen inkl. der Authentifizierung auf den Endgeräten richtig konfiguriert sein. Manchmal muss man auch trotz Richtlinie nachhelfen. Das setzt Wissen in diesen Bereichen voraus.

     

    Aus Sicherheitsgründen empfehle ich Dir nochmal die Daten nicht auf eine administrative Freigabe zu kopieren. Oder willst du dein Admin-Passwort auf allen Außenstellen zur Ausnutzung bzw. von Ransomeware haben? 

    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....

  6. 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 :rolleyes:

     

    vor 7 Stunden schrieb MurdocX:

    Wenn ich es aus dem Kontext richtig verstehe, dann geht es nicht darum den effizientesten Weg zu finden, sondern die Aufgabe mit "Start-Job" zu lösen?

    Was wäre der effizienteste Weg? :lool: 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.

     

    vor 7 Stunden schrieb tesso:

    Ich frage mich schon die ganze Zeit wie groß die Archive sind. Warum packt man die nicht nacheinander aus?

    Die Dateien sind zwischen 20-300mb groß. Zum "Warum?!" komme ich gleich weiter unten.

     

    vor 7 Stunden schrieb MurdocX:

    Ich vermute, weil er 43 Stück auf 43 Computern hat. Das wäre bei 40Std. investiertem Aufwand sicher auch drin gewesen.

    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 :shy: 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 :lool:

    vor 7 Stunden schrieb MurdocX:

    Gerade den Zugriff auf die administrativen Freigaben finde ich sehr bedenklich. Das sollte anders zu lösen sein. In diesem Befehl sind mehrere Hinweise für deine Umsetzung:

    
    Start-Job -Name $Computername -ArgumentList @($Computername, $Filename, $DestinationPath) -ScriptBlock { $args[0],$args[1],$args[2] }

     

    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?

     

    vor 7 Stunden schrieb tesso:

    Liste der Dateien erstellen und dann foreach.

    Ich sehe den Sinn im Job an der Stelle nicht. 

     

    Evtl. noch mit einer Liste der Computer und invoke-command

    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 :lool:

     

    vor 6 Stunden schrieb daabm:

    Ich steuere auch noch etwas Senf bei :-)

     

    Stand oben schon mal - "Push" auf eine Freigabe wäre besser als Pull. Push ist fast immer besser als Pull. Was spricht dagegen?

    Wie man den Push dann genau gestaltet - da gibt es viele Möglichkeiten. Hängt stark davon ab, wie dieses Zip entsteht. Mir persönlich würde da ein scheduled Task "at Startup" einfallen, der nen FS-Watcher initialisiert und das Zip dann sobald es auftaucht auf nen Share kopiert.

     

    Was in der Frage des TO völlig fehlt: Was ist das "eigentliche" Ziel?  Einsammeln von ZIPs sicher nicht :-)

    Um hier eine für mich sinnvolle Lösung vorzuschlagen, fehlt mir zu viel Wissen über das Environment.

    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. :grins2::thumb1:

     

    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 :scream:

     

    Was in der Frage des TO völlig fehlt: Was ist das "eigentliche" Ziel?

    Mir gehts um´s Prinzip!!! :lol2:

    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 :shy:

     

    EDIT: Sry für den langen Text!

  7. vor 13 Minuten schrieb Dukel:

    Wie ist denn jetzt der aktuelle Stand? Was hast du? Funktioniert oder nicht? Gibt es Fehlermeldungen?

     

    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 :lool:

     

  8. vor 10 Stunden schrieb Dukel:

    Wieso möchest du das als Job machen? Wegen paralellisierung?

     

    Wenn du das verstehen möchtest kannst du die Hilfe & Beispiele anschauen:

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/start-job?view=powershell-7.1#examples

     

    z.B.:

    Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad

     

    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" :lool:

     

    vor 9 Stunden schrieb MurdocX:

    Hallo,

     

    die Herangehensweise kann man auch umdrehen. Du könntest ein kleines Skript schreiben welches die Datei(en) auf eine Freigabe kopiert. Das Skript lässt du über die Aufgabenplanung auf den jeweiligen PCs regelmäßig ausführen. Damit würdest du auch das Problem der "delegated Credentials" umgehen, falls du den Kopiervorgang auf eine Freigabe starten möchtest.

     

    Schöne Grüße

     

    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).

  9. 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.

  10. 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?! :lool:

     

    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...