Parece que a tradução mais literal de
listServers.sh | <some commands to filter servers> | commandToApplyToEachServer.sh
seria como:
Get-content listServers.txt | Where-Object {*attributes and whatever} | CommandToRun
Com o PowerShell e a tubulação, tudo depende de como você obtém e canaliza tudo. Por exemplo, digamos que eu queira reinicializar todos os meus servidores com o nome MAILSERVERxxxx:
Get-QADComputer -name * | where-object {$_.Name -Match "$MAILSERVER"} | Restart-Computer -ComputerName $_.Name
poderia ser feito, mas mais em linha com as práticas do PowerShell, muitas vezes você pode lidar com isso de maneira muito diferente:
Get-QADComputer -Name "MAILSERVER*" | Restart-Computer $_.Name
Algumas notas:
-
O
- PowerShell é muito flexível
- O PowerShell foi criado para trazer a linha de comando do Windows para os níveis BASH de utilitário
- A sintaxe também é flexível
- Get-QADComputers é um cmdlet da Quest e agora da Dell
Você também pode usar uma sintaxe semelhante a C para fazer muitas das mesmas coisas, e isso amplia ainda mais o poder do PowerShell.
Se você quiser, por exemplo, ler um arquivo, criar e criar uma matriz com base nos critérios de correspondência e, em seguida, fazer algo antes de prosseguir:
$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
}
}
Espero que isso ajude.