Es scheint, dass die wörtlichste Übersetzung von
listServers.sh | <some commands to filter servers> | commandToApplyToEachServer.sh
wäre wie:
Get-content listServers.txt | Where-Object {*attributes and whatever} | CommandToRun
Mit PowerShell und Piping liegt es wirklich an Ihnen, wie Sie irgendetwas bekommen und herumleiten. Angenommen, ich möchte alle meine Server mit dem Namen MAILSERVERxxxx neu starten:
Get-QADComputer -name * | where-object {$_.Name -Match "$MAILSERVER"} | Restart-Computer -ComputerName $_.Name
Das könnte man tun, aber mit den PowerShell-Praktiken können Sie dies oft ganz anders verhalten:
Get-QADComputer -Name "MAILSERVER*" | Restart-Computer $_.Name
Ein paar Anmerkungen:
- PowerShell ist sehr flexibel
- PowerShell sollte die Windows-Befehlszeile auf die BASH-Dienstebenen bringen
- Die Syntax ist auch flexibel
- Get-QADComputers ist ein Cmdlet von Quest und jetzt von Dell
Sie können auch eine C-ähnliche Syntax verwenden, um viele der gleichen Aufgaben auszuführen. Dadurch wird die Leistungsfähigkeit von PowerShell noch weiter erhöht.
Wenn Sie zum Beispiel eine Datei lesen möchten, erstellen Sie ein Array mit Übereinstimmungskriterien und tun Sie etwas, bevor Sie fortfahren:
$someArray = @() Get-Content "H:\SomeFile.txt" | ` Foreach-object { if ($_ -MAtch "$MAILSERVER") { $someArray += $_} } $someArray | foreach-Object { if (Test-Connection "$_") { $Version = (Get-WmiObject -ComputerName "$_" -Class "Win32_OperatingSystem").Version } }
Ich hoffe das hilft.