Jump to content

Probleme mit foreach


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

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
)

Geschrieben

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.

Geschrieben

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}

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...