Benutzer mit den meisten Antworten
PS-Script per Trigger von Server A lokal auf Server B starten

Frage
-
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
Antworten
-
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!- Bearbeitet Peter Kriegel Mittwoch, 14. November 2012 15:47
- Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 15. November 2012 09:34
- Nicht als Antwort vorgeschlagen Digiflex Freitag, 16. November 2012 08:32
- Als Antwort markiert Digiflex Freitag, 16. November 2012 08:33
- Tag als Antwort aufgehoben Digiflex Freitag, 16. November 2012 08:33
- Als Antwort markiert Digiflex Freitag, 16. November 2012 08:50
Alle Antworten
-
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 "
Vote As Helpful"! And whenever you see a reply being an answer to the main question of the thread, click "
Mark 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' '
-
@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!- Bearbeitet Peter Kriegel Dienstag, 13. November 2012 11:19
-
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? :-/ -
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!- Bearbeitet Peter Kriegel Mittwoch, 14. November 2012 15:47
- Als Antwort vorgeschlagen Alex Pitulice Donnerstag, 15. November 2012 09:34
- Nicht als Antwort vorgeschlagen Digiflex Freitag, 16. November 2012 08:32
- Als Antwort markiert Digiflex Freitag, 16. November 2012 08:33
- Tag als Antwort aufgehoben Digiflex Freitag, 16. November 2012 08:33
- Als Antwort markiert Digiflex Freitag, 16. November 2012 08:50
-
Hallo Digiflex,
Ist die Thematik abgeklärt? Wenn ja - bitte markiere den entsprechenden Beitrag "als Antwort".
Viele Grüße,
AlexAlex Pitulice, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
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
- Bearbeitet Digiflex Freitag, 16. November 2012 08:49
-
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=1Please 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! -
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!
- Bearbeitet Digiflex Freitag, 16. November 2012 10:17
-
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.
- Bearbeitet Digiflex Freitag, 16. November 2012 10:39