none
PS-Script per Trigger von Server A lokal auf Server B starten

    Question

  • Hallo Zusammen,

    ich möchte gern einen Script lokal auf Server B ausführen. Diesen möchte ich durch den Server A triggern/starten so das dieser auch wirklich lokal auf Server B gestartet wird.

    Wie ist das möglich? Habe nun schon folgendes probiert.

    Invoke-Command -ComputerName "ServerB" -FilePath ". \\ServerB\e$\Scripts\Dev\Thomas\CA\CAUserRevokedReport - Copy.ps1"

    Leider funzt das nicht. Hat jemdand eine Idee?

    Viele Grüße
    Thomas

    Tuesday, November 13, 2012 8:38 AM

Answers

  • So lieber Thomas, ich komme leider erst jetzt dazu dir zu Antworten....

    Ich muss mich da an die eigenen Nase fassen und sagen LESE DIE DOKUMENTATION! ;-))
    Zitat PowerShell Doku >>>>>>>

    -FilePath <string>
    Führt das angegebene lokale Skript auf einem oder mehreren Remotecomputern aus.
    Geben Sie den Pfad und den Dateinamen des Skripts ein, oder übergeben Sie einen Skriptpfad über die Pipeline an Invoke-Command.
    Das Skript muss sich auf dem lokalen Computer oder in einem Verzeichnis befinden, auf das der lokale Computer zugreifen kann.
    Geben Sie mit dem ArgumentList-Parameter die Werte von Parametern im Skript an.

    <<<<<<<<<<<Zitat PowerShell Doku

    Soll heissen -FilePath ist hier der falsche Parameter, da er das Skript auf dem Computer sucht auf dem das Invoke-Command ausgeführt wird.
    Der Parameter -Scriptblock mit dem kaufmännischen Und (&) ist dein Freund, wenn du ein Script ausführen willst das auf dem Remote Rechner liegt:

    Getestet:

    Invoke-Command -ComputerName 'ServerB' -ScriptBlock {&'E:\Scripts\Dev\Thomas\CA\CAUserRevokedReport - Copy.ps1'}
    P.S. Ich finde es keine gute Idee in Dateinamen oder Pfaden (die auch noch ausgeführt werden sollen) leerzeichen einzubauen, da stellt man sich zu oft selbst ein Bein wenn man die Anführungzeichen vergisst! ;-))


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Wednesday, November 14, 2012 3:47 PM

All replies

  • Für was ist denn da ein e$?

    The following is my signature:

    Powershell Programmer & Advanced Lua Programmer

    Location: Switzerland

    Beside that, whenever you see a reply, you think is helpful, click "Alternate TextVote As Helpful"! And whenever you see a reply being an answer to the main question of the thread, click "Alternate TextMark As Answer" (if you opened the thread).

    Please contact me, before reporting me, thank you.

    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('577076797174-87661607769657424-8687168065964').substring(($_*2),2))})-replace' '

    Tuesday, November 13, 2012 9:39 AM
  • @Livio
    Die Frage ist berechtigt! ;-)

    @Thomas

    Ich vermute mal das e$ die Administrative Freigabe der Festplatte E:\ ist !?
    Hier müsstest du die einfachen Anführungszeichen oder den Backtick benutzen damit das $ Zeichen nicht als PowerShell Variable Interpretiert wird!
    (Ich nutze für Strings grundsätzlich nur die einfachen Anführungszeichen)

    Der UNC Pfad (mit dem $E)  ist nicht nötig! Da der Befehl Lokal ausgeführt wird!

    So müsste es gehen (ungetestet):

    Invoke-Command -ComputerName 'ServerB' -FilePath 'E:\Scripts\Dev\Thomas\CA\CAUserRevokedReport - Copy.ps1'
    Und genauso steht es auch in der PowerShell Dokumentation; in den Beispielen ;-) !
    Get-Help Invoke-Command -Full


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Tuesday, November 13, 2012 11:18 AM
  • Vorab danke für eure schnellen Infos.

    @ Livio: Wie Peter schon geschrieben hat, handelt es sich um die administrative Freigabe.

    @ Peter ja es wird damit die lokale HDD E:\ gemeint.

    Habe es nun mit dem Code von Peter versuch aber leider ohne Erfolg. Hier der Fehler:

    Invoke-Command : Cannot find drive. A drive with the name 'E' does not exist.
    At C:\Scripts\CA\test.ps1:6 char:1
    + Invoke-Command -ComputerName serverb.test.local' -FilePath 
    'E:\Scripts\Dev\Tho ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~
        + CategoryInfo          : ObjectNotFound: (E:String) [Invoke-Command], Dri 
       veNotFoundException
        + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.Invo 
       keCommandCommand
     
    **********************
    Jemand eine Idee? :-/
    Wednesday, November 14, 2012 8:53 AM
  • So lieber Thomas, ich komme leider erst jetzt dazu dir zu Antworten....

    Ich muss mich da an die eigenen Nase fassen und sagen LESE DIE DOKUMENTATION! ;-))
    Zitat PowerShell Doku >>>>>>>

    -FilePath <string>
    Führt das angegebene lokale Skript auf einem oder mehreren Remotecomputern aus.
    Geben Sie den Pfad und den Dateinamen des Skripts ein, oder übergeben Sie einen Skriptpfad über die Pipeline an Invoke-Command.
    Das Skript muss sich auf dem lokalen Computer oder in einem Verzeichnis befinden, auf das der lokale Computer zugreifen kann.
    Geben Sie mit dem ArgumentList-Parameter die Werte von Parametern im Skript an.

    <<<<<<<<<<<Zitat PowerShell Doku

    Soll heissen -FilePath ist hier der falsche Parameter, da er das Skript auf dem Computer sucht auf dem das Invoke-Command ausgeführt wird.
    Der Parameter -Scriptblock mit dem kaufmännischen Und (&) ist dein Freund, wenn du ein Script ausführen willst das auf dem Remote Rechner liegt:

    Getestet:

    Invoke-Command -ComputerName 'ServerB' -ScriptBlock {&'E:\Scripts\Dev\Thomas\CA\CAUserRevokedReport - Copy.ps1'}
    P.S. Ich finde es keine gute Idee in Dateinamen oder Pfaden (die auch noch ausgeführt werden sollen) leerzeichen einzubauen, da stellt man sich zu oft selbst ein Bein wenn man die Anführungzeichen vergisst! ;-))


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Wednesday, November 14, 2012 3:47 PM
  • Friday, November 16, 2012 8:11 AM
    Owner
  • Hallo Zusammen,

    @ Alex: ich hatte bereits gestern reingeschaut aber komischer Weise die Antwort von Peter nicht gesehen. Sorry, bin aber am Ball. ;)

    An sich ist der Script von Peter völlig richtig! Danke dafür.

    Nun habe ich das Problem, wenn ich das Module "PSPKI" lade bekomme ich die Meldung das mein Remoteserver "ServerB" Powershell 1.0 besitzt und es für das Importieren des Moduls mind. 2.0 benötigt wird??? Beide Server sind 2008R2 und da ist Powershell 2.0 standard.

    Also habe ich mal lokal ein get-host gemacht:

    Name             : ConsoleHost
     Version          : 2.0
     InstanceId       : 755fc3a2-29cf-46c9-bf00-86f9d910664d
     UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
     CurrentCulture   : de-DE
     CurrentUICulture : en-US
     PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
     IsRunspacePushed : False
     Runspace         : System.Management.Automation.Runspaces.LocalRunspace

    und dieser Code auch mit dem Remotescript ausgeführt:

    PSComputerName   : ServerB
     RunspaceId       : 3186d5c9-df97-4c24-9245-563570ee1859
     Name             : ServerRemoteHost
     Version          : 1.0.0.0
     InstanceId       : 593df37a-64ae-45b0-831a-609c28d1c879
     UI               : System.Management.Automation.Internal.Host.InternalHostUserI
                        nterface
     CurrentCulture   : en-US
     CurrentUICulture : en-US
     PrivateData      : 

    Wie ist das denn möglich?? Bug? :-/

    VG
    Thomas




    • Edited by Digiflex Friday, November 16, 2012 8:49 AM
    Friday, November 16, 2012 8:42 AM
  • Leider kommt es immer wieder zu Verwirrungen mit den PowerShell Versionsnummern....
    PowerShell ist sozusagen in 2 Teile aufgeteilt:
    1. die PowerShell Engine die die Befehle ausführt und verarbeitet
    2. der PowerShell Host, ist "nur" das Programm das die Befehle entgegen nimmt diese an die Engine zur Verarbeitung weiter gibt und dann wieder anzeigt.

    Der Host ist ohne Engine also nur eine leere Hülle wie ein Auto ohne Motor!
    Die PowerShell ist der Motor!
    Der Host die Karosserie!
    Mit Get-Host wird dann z.B. die Versionsnummer von PowerGUI oder PowerShell ISE, oder PowerShell Plus abgefragt. Du bekommst also nur die Versionsnummer der Karosserie!

    Hier in deinem Fall ist es der Remoting-Host der abgefragt wird und derhat auch in der PowerShell 3.0 immernoch die Version 1.0 ;-)
    Wenn du die Version der PowerShell Engine wissen willst, dann musst du $PSVersionTable benutzen!

    Schau mal hier vielleicht hilft das ja weiter:
    http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/4cb97940-5312-4d55-b1fe-375c06516fbe

    Der Programmierer des Moduls hat wahrscheinlich denselben Fehler gemacht und den Host abgefragt!?
    Du kannst dich ja mit denen auf der Modulseite auseinandersetzen:
    http://pspki.codeplex.com/
    http://pspki.codeplex.com/discussions?searchText=&size=10&page=1


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Friday, November 16, 2012 9:19 AM
  • Stimmt, dieses Thema hatte uns der Kollege Weltner schon mal näher gebracht..ohh je mein Gedächtniss ^^

    Habe auch gerade die Info gefunden, das diese Art von Remotscripting nur eine eingeschränke Funktion bereithält. Transscript ist z.B auch nicht möglich, leider. Ich werde mal bei codeplex eine discussion zu dem Thema auf machen.

    Danke Peter, für deine Info!


    • Edited by Digiflex Friday, November 16, 2012 10:17 AM
    Friday, November 16, 2012 10:15 AM
  • So ich habe nun die discussion auf codeplex eröffnet. Für alle Interessierten, hier der link:

    http://pspki.codeplex.com/discussions/403465

    @ Peter, ich habe dich darin namentlich erwähnt, ich hoffe das ist okay.


    • Edited by Digiflex Friday, November 16, 2012 10:39 AM
    Friday, November 16, 2012 10:32 AM