PowerShell - ps1-Skript auf Remote-Computer ausführen

  • PowerShell

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Adde.

    PowerShell - ps1-Skript auf Remote-Computer ausführen

    Hi,

    ich habe ein Programm das auf mehreren Rechner liegt, die alle im LAN verbunden sind. Nun möchte ich das Programm über einen PowerShell-Command zentral von einem Rechner (gleichzeitig der Server) starten.
    Dafür habe ich ein ps1-Skript geschrieben, welches lokal auf jedem Rechner liegt und das eigentliche Programm startet. Ich schreibe alles zu Hause und teste es über den LAN-Verbund meines Laptops und Desktops, jedoch kann ich das ps1-Skript was auf dem Empfänger-Rechner liegt nicht per Remote starten. Wenn ich das Sende-Skript starte popt ganz kurz das blaue PowerShell Fenster mit einer in rot verfassten Fehlermeldung auf (jedoch so kurz, dass es unmöglich ist diese zu lesen, habe bereits versucht, dass das Fenster offen bleibt über den Press any Key... command, funzt aber nicht :/).

    Naja ich hoffe jemand weiß Rat :D


    Hier der Code des Sender-Skripts:

    Spoiler anzeigen

    Quellcode

    1. Invoke-Command -ComputerName andilap -filepath C:\Kontakte\Listener.ps1


    Und der Code des Emfänger-Skripts (liegt auf der Remote-Maschine):

    Spoiler anzeigen

    Quellcode

    1. C:\Kontakte\Contacts-Export.exe -command start


    Wenn ich die Empfänger ps1-Datei manuell auf dem Laptop starte funktioniert sie einwandfrei :)
    Warum so kompliziert mit zwei Skripten?

    Du kannst in dem Skript das auf dem Server liegt doch alles machen was du brauchts :)

    Quellcode

    1. Invoke-Command -ComputerName DeinPC -ScriptBlock { Start-Process -FilePath "C:\Kontakte\Contacts-Export.exe" -ArgumentList "start" -Wait


    Invoke-Command beendet den Prozess direkt nach ausführen des Befehls... deshalb auch alle Prozesse die von Invoke-Command aufgerufen werden (Denke deshalb funktioniert dein Beispiel auch nicht).
    Bei Start-Process kannst du den Parameter "-Wait" anfügen. Invoke-Command wird dann gezwungen auf Start-Process zu warten, da der Befehl erst abgeschlossen ist, wenn der Process beendet wurde.
    Dein Programm muss sich dann aber auch wieder von selbst beenden, wenn der Export-Vorgang abgeschlossen ist, sonst bleibt die PSSession der PowerShell auf.

    Du kannst bei Invoke-Command auch mehrere ComputerNamen mit "," getrennt angeben... Diese werden dann gleichzeitig abgearbeitet.
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Neuer Stand :)

    musste hinter das -Wait noch eine " } " setzen jedoch beim erneuten ausführen eine Neue Meldung bekommen:

    habe die Meldung in der sichtbaren Skunde mit dem Handy abfotografiert und sie besagt:

    Bei der Vebindung mit andilap ist folgender Fehler aufgetreten : Zugriff verweigert
    Hilfeblablabla.
    + CategoryInfo : OpenError : <andilap:String> [ ], PSRemotingTransportException
    + FullyQualifiedError : Access denied,PSSessionStateBroken

    ich kenne mich mit PowerShell nicht soooo gut aus aber musste man da nicht irgendwelche policies umstellen oder eine Group policy eröffnen oder so

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Adde“ ()

    Ja hab die "}" vergessen ;)

    Für Invoke-Command brauchst du auf dem Remote-PC Adminrechte (glaube ich). Geht am besten innerhalb einer Domäne.

    Auf dem PC auf den du zugreifen willst muss Powershell Remoting aktiviert sein.
    Dazu die Powershell als admin starten und "Enable-PSRemoting -Force" eingeben.

    howtogeek.com/117192/how-to-ru…ands-on-remote-computers/
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Hi, habe nun beide PCs zur der TrustedHosts-Liste des jeweils anderen hinzugefügt. wenn ich nun diesen Command in PowerShell eingebe und ausführe:

    Quellcode

    1. Invoke-Command -ComputerName andilap -ScriptBlock { Start-Process -FilePath "C:\Kontakte\Contacts-Export.exe" -ArgumentList "start" -Wait }


    passiert jedoch weder auf dem Zeil-Pc, noch auf dem PC (von welchem der Befehl ausgeht) etwas ich bekomme auch keine Fehler-Meldung sonder es passiert einfach nichts :/

    in PowerShell von dem Haupt-Pc (welcher den Befehl sendet) springt PowerShell einfach in eine Neue leere Zeile

    weiß noch jemand hier Rat ? :?: