Кажется, что самый буквальный перевод
listServers.sh | <some commands to filter servers> | commandToApplyToEachServer.sh
было бы как:
Get-content listServers.txt | Where-Object {*attributes and whatever} | CommandToRun
С PowerShell и трубопроводами все зависит только от того, как вы получите что-то и что сможете. Например, я хочу перезагрузить все мои серверы с именем MAILSERVERxxxx:
Get-QADComputer -name * | where-object {$_.Name -Match "$MAILSERVER"} | Restart-Computer -ComputerName $_.Name
можно было бы сделать, но в большей степени в соответствии с практикой PowerShell, вы часто можете справиться с этим совершенно по-другому:
Get-QADComputer -Name "MAILSERVER*" | Restart-Computer $_.Name
Несколько заметок:
- PowerShell очень гибкий
- PowerShell предназначался для доведения командной строки Windows до уровней полезности BASH.
- Синтаксис также гибкий
- Get-QADComputers - это командлет от Quest и теперь Dell
Вы также можете использовать C-подобный синтаксис для выполнения многих одних и тех же задач, что еще больше расширяет возможности PowerShell.
Если вы хотите, например, прочитать файл, построить и массив на основе критериев соответствия, а затем сделать что-то, прежде чем двигаться дальше:
$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 } }
Надеюсь, это поможет.