neuling26
Goto Top

Powershell - Skript funktioniert nicht

Hallo zusammen,

ich möchte folgenden Powershell Befehl ausführen:

Aus einer Textdatei, in der mehrere Server mit FQDN Namen eingetragen sind, möchte ich von einem Server Remote per Powershell einen gesonderten Befehl abrufen und den Output speichern.

Mit Get-Content kann ich die Textdatei auslesen. Mit ForeachObject kann ich die einzelnen Server in der Textdatei durchgehen. Mit Invoke-Command kann ich den Befehl auf den Remoteservern ausführen. Leider klappt es trotzdem nicht. Hat jemand eine Idee, welcher Befehl hier noch fehlt?

Ich bin noch recht neu im Powershell-Skripting.

Vielen Dank.

LG

Content-Key: 447014

Url: https://administrator.de/contentid/447014

Printed on: April 20, 2024 at 00:04 o'clock

Member: XN04113
XN04113 May 02, 2019 at 08:04:39 (UTC)
Goto Top
meinst Du nicht es wäre sinnvoll Dein Script zu posten?
Member: mayho33
mayho33 May 02, 2019 at 08:14:46 (UTC)
Goto Top
In den meisten Fällen liegt es daran, dass Services ala WinRM nicht laufen, aber wenn du es nicht mal für nötig hältst zumindest eine Fehlermeldung mitzuposten....
Member: SomebodyToLove
SomebodyToLove May 02, 2019 at 08:20:59 (UTC)
Goto Top
Meine Glaskugel saget:

Out-File

face-smile
Member: Nathaniel
Nathaniel May 02, 2019 at 08:32:39 (UTC)
Goto Top
kann mich den anderen nur anschließen.
Schwierig bis unmöglich zu sagen solange wir deinen Code nicht kennen.
Member: Neuling26
Neuling26 May 02, 2019 at 09:34:30 (UTC)
Goto Top
Hallo Zusammen,

sorry, natürlich fehlt mein Skript (bitte nicht lachen, da ich noch nicht viel Erfahrung habe in PS.

Skript:

$comp = Get-Content C:\Test\server.txt

foreach ($comp in $Computer)

{

Invoke-Command -FilePath c:\test\test.ps1 -ComputerName $comp >c:\test\"$env:computername.$env:userdnsdomain".txt

}

In meiner test.ps1 steht folgender command drinnen:

dxdak list; --> ist ein spezieller CMDlet für eine Applikation.

Ich hätte nun erwartet, dass aus meiner server.txt die Server ausgelesen werden und mit Invoke Command dxdak list ausgeführt wird und unter c\test\FQDN.txt abgespeichert wird. Funktioniert leider vorne und hinten nicht. Wo liegt der Denkfehler?
Member: AnkhMorpork
AnkhMorpork May 02, 2019 at 09:59:36 (UTC)
Goto Top
Versuchs mal so rum:

$Computer = Get-Content C:\Test\server.txt

foreach($Comp in $Computer)

...
Member: SomebodyToLove
SomebodyToLove May 02, 2019 at 10:00:47 (UTC)
Goto Top
Hiho,

bekommst du denn irgendeine Fehlermeldung?

Das Script fürst du mit entsprechenden Credentials aus welche auch Berechtigt sind deinen Befehl auszuführen?

WinRM hast du auch sauber konfiguriert?
Member: Neuling26
Neuling26 May 02, 2019 at 10:11:35 (UTC)
Goto Top
WinRM funktioniert sauber, habe ich schon getestet.

Der Fehler ist, dass er den Befehl "dxdak list;" aus dem test.ps1 nicht anerkennt, weil er das CMDlet nicht kennt.
Der Server auf dem ich dies ausführe ist ein Adminserver, der vollen Zugriff hat auf alle anderen Server. Die Applikation, die ich mit dxdak list abrufen will, ist aber auf diesem Server nicht installiert. Daher fehlt das CMDlet.

Aber der Befehl funktioniert auf meinem Adminserver, wenn ich es direkt ausführe.
Member: Neuling26
Neuling26 May 02, 2019 at 10:19:27 (UTC)
Goto Top
update:

$computer = Get-Content C:\Test\server.txt

foreach ($comp in $Computer)

{

Invoke-Command -ComputerName $comp -ScriptBlock {dxdak list}

}

Der Befehl geht jetzt ohne ein weiteres Script auszuführen. In meiner server.txt habe ich gerade zwei Testserver drinnen. Das Kommando geht durch, leider kann ich im Output nicht erkennen, was welcher Server ist. Wo sollte ich den Computernamen Parameter hinzufügen, damit ich es im Output erkennen kann?
Member: mayho33
mayho33 May 02, 2019 updated at 14:01:16 (UTC)
Goto Top
Zitat von @Neuling26:

Der Fehler ist, dass er den Befehl "dxdak list;" aus dem test.ps1 nicht anerkennt, weil er das CMDlet nicht kennt.
...
Invoke-Command -ComputerName $comp -ScriptBlock {dxdak list}

Das CmdLet erkennt PS schon. Es wirft nur einen Fehler. Syntaktisch ist es nicht ganz richtig was du da schreibst. Du verwendest hier keine Variablen oder Pfade. Woher also soll PS wissen was du willst?

richtig wäre es so (beistrich nicht vergessen):
#Die auszuführende Datei meistens eine exe
$dxdax = "C:\Windows\System32\notepad.exe"  
#die Argumente für die exe
$list = "Der\Pfad\zu\einer\datei.txt"  

Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock {$dxdax, $list}

du kannst sowas einfaches aber auch so ausführen. Beachte dazu das vorangestellte kaufmännische "&":
&$dxdax $list


die Hilfe ist auch immer ein heißer Tipp:
Get-Help -Full Invoke-Command