linux - Lukning af Windows-netværk ved hjælp af Bash

Indlæg af Hanne Mølgaard Plasc

Problem



Her er min nuværende kode, som fungerer, men er langsom


for i in {1..255..1}; do
  for j in {1..255..1}; do
    ip="10.8.$i.$j"
    sudo net rpc shutdown -I $ip -U Username\%Password -t 1 -f
    echo $ip
  done
done


Jeg vil gerne kunne gennemgå disse IP'er og forsøge at lukke dem ned. Men hvis der ikke er en pc på den IP, skal den vente på det til timeout, før du forsøger den næste. Så hvordan kan jeg finde og lukke alle Windows-pc'er på et netværk? (de har alle samme legitimationsoplysninger)

Bedste reference


En triviel løsning er at bare køre en bunke af dem parallelt:


for i in {1..255..1}; do
  for j in {1..255..1}; do
    ip="10.8.$i.$j"
    sudo net rpc shutdown -I $ip -U Username\%Password -t 1 -f &
    echo $ip
  done
  wait
done


Dette kører 255 ad gangen og venter på, at alle er færdige. Smartere og mere fleksibel parallelisering kan findes via xargs, sem eller parallel, hvis Windows understøtter det.