Datei mit IP Adressen per Powershell einlesen und abarbeiten
Hi,
Ich möchte per Powershell Script ein Update-Script auf mehreren Servern ausführen lassen. Das ganze wollt ich mit psexec in Powershell machen, was auch soweit für einen Server im test funktioniert.
Nun möchte ich gern eine Textdatei haben, die von der Powershell eingelesen wird, in der die IP-Adressen aller betroffenen Server untereinander eingetragen werden können und die dann im Powershell-Script nacheinander in einer Schleife geupdated werden.
Da sich die zu updatenden Server imme rmal wieder ändern, dachte ich per anpassbarer textdatei ist das am Einfachsten.
Wie lautet denn das Kommando um z.B. "D:\serverlist.txt" einzulesen und dann per
Ich möchte per Powershell Script ein Update-Script auf mehreren Servern ausführen lassen. Das ganze wollt ich mit psexec in Powershell machen, was auch soweit für einen Server im test funktioniert.
Nun möchte ich gern eine Textdatei haben, die von der Powershell eingelesen wird, in der die IP-Adressen aller betroffenen Server untereinander eingetragen werden können und die dann im Powershell-Script nacheinander in einer Schleife geupdated werden.
Da sich die zu updatenden Server imme rmal wieder ändern, dachte ich per anpassbarer textdatei ist das am Einfachsten.
Wie lautet denn das Kommando um z.B. "D:\serverlist.txt" einzulesen und dann per
param (
[Parameter(Mandatory=$true)][String]$new_version
)
$computers = @("Rechner1",'Rechner2','Rechner3')
$computers |%{
Write-host "Starte Skript auf PC '$_'" -ForegroundColor Green
# Script auf Remote-PC ausführen (mit psexec)
& PsExec "\\$_" /s -i "powershell" "D:\powershell_tools\update_wizard.ps1" $new_version
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 9946139982
Url: https://administrator.de/contentid/9946139982
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
ausgehend davon, dass die IPs untereinander gelistet sind:
get-content liest eine Datei zeilenweise in ein Array ein. Jede Zeile ist ein Element des Arrays.
hth
Erik
ausgehend davon, dass die IPs untereinander gelistet sind:
PARAM (
$list = "x:\woauchimmer\ips.txt"
)
$ips = get-content $list -encoding UTF8 #Oder welche Kodierung auch immer
foreach($ip in $ips) {
Write-host "Starte Skript auf PC '$ip'" -ForegroundColor Green
# Script auf Remote-PC ausführen (mit psexec)
& PsExec "\\$ip" /s -i "powershell" "D:\powershell_tools\update_wizard.ps1" $new_version
}
get-content liest eine Datei zeilenweise in ein Array ein. Jede Zeile ist ein Element des Arrays.
hth
Erik
Zitat von @aqui:
Sinnfrei die Antwort in den Codeblock gepostet...aber egal!
Und...man muss auch nicht immer überflüssigerweise alles zitieren...wir können alle lesen!
Sinnfrei die Antwort in den Codeblock gepostet...aber egal!
Und...man muss auch nicht immer überflüssigerweise alles zitieren...wir können alle lesen!
Gut, dass Du das sagst. Ich hatte mich schon gewundert, warum der TO meinen Code unkommentiert zitiert.
$body = "" #Muss vor der Schleife stehen!
foreach($ip in $ips) {
$body += "Starte Skript auf PC '$ip`n"
try {
# Script auf Remote-PC ausführen (mit psexec)
& PsExec "\\$ip" /s -i "powershell" "D:\powershell_tools\update_wizard.ps1" $new_version
$body += "$ip erfolgreich aktualisiert.`n`n"
}
catch {
$body += "$ip wurde nicht erfolgreich aktualisiert.`n`n"
}
}
# Ergebnis der Suche nach "Mit der Powershell Mails verschicken" ;-)
Edit: Zeilenumbrüche korrigiert (`n)