wethy 10 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 Hallo, ich habe eine Liste mit Rechnern für welche ich gleichzeitig ein Script aufrufen möchte. Die "Liste" ist eine normale ".txt", in welcher die Daten untereinander aufgelistet sind. Für dieses Vorhaben habe ich den Befehl "foreach-object" gefunden. Leider werden keine Parameter übergeben. Kann mir jemand sagen, wo mein Fehler liegt? ForEach-Object -InputObject blabla\winlist.ps1 start-job -scriptblock {blabla\killwin.ps1} ps: Eigentlich wollte ich nur diese Zeile in Powershell umschreiben for /f %%Q in (blabla\winlist.txt) Do ( call blablal\kill_win.cmd %%Q ) Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 Im Batch hast du .txt und .cmd und im Powershell jeweils .ps1. Ist das so gewollt? Zitieren Link zu diesem Kommentar
wethy 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 Nein, das war nicht geplannt. Habe schon einiges geändert und getestet... Die Parameter werden aber auch bei ".txt" nicht übergeben. Die CMD-Datei wurde umgeschrieben und läuft nun auch als ps1 Script. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 Der killwin.ps1 wird ja kein Parameter übergeben! Für Deinen Einzeiler weiß ichs grad nicht auswendig, aber als Mehzeiler könnte das so gehen: $winlist = Get-Content blabla\winlist.txt ForEach ($winitem in $winlist) {blabla\killwin.ps1 $winitem} Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 10. Mai 2012 Melden Teilen Geschrieben 10. Mai 2012 Du kannst doch daraus einfach einen einzeiler machen: ForEach ($winitem in (Get-Content blabla\winlist.txt)) {start-process -FilePath blabla\killwin.cmd -ArgumentList $winitem} Zitieren Link zu diesem Kommentar
wethy 10 Geschrieben 10. Mai 2012 Autor Melden Teilen Geschrieben 10. Mai 2012 So läuft es =) vielen vielen Dank! Zitieren Link zu diesem Kommentar
wethy 10 Geschrieben 11. Mai 2012 Autor Melden Teilen Geschrieben 11. Mai 2012 Ich habe noch eine weitere Frage: Warum werden in dieser Zeile die Parameter nicht übergeben? start-job {blabla\psexec.exe \\$winitem shutdown -s -f -t 1} lässt man allerdings die geschweiften Klammern und das "start-job" weg, funktioniert alles ohne Probleme. Da dieser Befehl aber sehr oft ausgeführt wird, können die Prozesse nicht sequentiell ausgeführt werden, sondern sollen als Prozess im Hintergrund laufen, da sonst zu viel Zeit verloren geht. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. Mai 2012 Melden Teilen Geschrieben 11. Mai 2012 Mit der klammer sieht start-job alles als ein Parameter. Du brauchst aber min. 2 Parameter. Btw. statt psexec kannst du dir PS-Remoting anschauen. PS kann das mitlerweile nativ. Außerdem bei Shutdown kannst du den Zielrechner direkt angeben, dann brauchst du nicht mal mehr eine Remote Ausführung. Zitieren Link zu diesem Kommentar
wethy 10 Geschrieben 11. Mai 2012 Autor Melden Teilen Geschrieben 11. Mai 2012 Ein ganz anderer Ansatz der aber sehr gut läuft. Stop-Computer -computername $winitem -AsJob -Force kürzer geht es wirklich nicht mehr... Powershell gefällt mir immer besser. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.