Upravljanje modernim poduzetničkim okruženjem može izazvati znojenje čak i najtežih IT ratnika – pogotovo kada morate ponovo pokrenuti flotu tvrdoglavih krajnjih tačaka.BarbaricBoot, alat za masovno ponovno pokretanje zasnovan na Pythonu, dizajniran za administratore koji nemaju vremena za monotoniju klikom po kliku. Kao pravi Barberion, on seže kroz vašu listu strojeva sa brzinom, snagom i nultom strpljenjem za prepreke.
Šta je barbarski brod?
BarbaricBootje Python skript zapovjednog reda koji čita listu imena računara i otvara paralelne reboote na njima, prijavljujući svaku pobjedu i poraz na putu.shutdown
Svaki neuspešan reboot je zabeležen – svaki uspješan reboot je još jedna pobjeda.
Zašto barbarski brod?
- Učinkovitost: Ponovno pokreće stotine mašina za nekoliko minuta, a ne sati.
- Jednostavnost: Jedna datoteka, jedna komanda, minimalno podešavanje.
- Odgovornost: povratne informacije u realnom vremenu o uspjesima i neuspjesima.
- Barbarski duh bez gluposti: Samo ponovo pokrenite sve – bez izgovora, bez milosrđa.
Kako funkcioniše
- Uvod: Spustite imena mašina (jedan po redu) u pcs.log.
- Izvršenje: BarbaricBoot napade koristeći Python concurrent.futures za pokretanje do 20 paralelnih rebootova odjednom.
- Povratne informacije: Dobijate brojeve uspjeha i neuspjeha u realnom vremenu - plus detaljne dnevnike bilo koje mašine koja odbija vašu naredbu.
Kako instalirati i koristiti BarbaricBoot
Zahtevi
- Python 3.6 ili noviji
- Windows privilegiji administracije (za prava daljinskog isključivanja)
- Pcs.log datoteka na kojoj se nalaze ciljani strojevi (jedan po liniji)
postavljanje
- **Save the Script
\ Copy the complete
BarbaricBoot.py
code (provided below) to your admin machine. - **Prepare Your Targets
\ Create a plain text file called
pcs.log
in the same directory as your script, listing each machine to be rebooted. - **Run BarbaricBoot \ Open a terminal and execute: “Python BarbericBoot.py“
Kompletni kod
#Another /\_[]_/\
# fine |] _||_ [|
# ___ \/ || \/
# /___\ ||
# (|0 0|) ||
# __/{\U/}\_ ___/vvv
# / \ {~} / _|_P|
# | /\ ~ /_/ []
# |_| (____)
# \_]/______\ Barberion
# _\_||_/_ Production
# (_,_||_,_)
#
import concurrent.futures
import subprocess
import logging
from threading import Lock
# Set up logging for failed reboots
logging.basicConfig(filename='failed_reboots.log', level=logging.INFO)
# Lock for thread-safe printing and updating counters
print_lock = Lock()
def reboot_machine(machine_name, success_counter, failure_counter):
try:
subprocess.run(['shutdown', '/r', '/t', '0', '/m', f'\\\\{machine_name}', '/f'],
check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with print_lock:
success_counter[0] += 1
print(f"\rTotal successful reboots: {success_counter[0]}, Total failed reboots: {failure_counter[0]}", end='')
except subprocess.CalledProcessError as e:
with print_lock:
failure_counter[0] += 1
print(f"\rTotal successful reboots: {success_counter[0]}, Total failed reboots: {failure_counter[0]}", end='')
logging.error(f"Failed to reboot {machine_name}: {e}")
def main():
with open('pcs.log') as file:
machines = file.readlines()
total_hosts = len(machines)
print(f"Total hosts in file: {total_hosts}")
# Shared counters for successful and failed reboots
successful_reboots = [0]
failed_reboots = [0]
# Use ThreadPoolExecutor for parallel execution
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
futures = [executor.submit(reboot_machine, machine.strip(), successful_reboots, failed_reboots) for machine in machines]
# Wait for all tasks to complete, i suppose you can comment out for rapid fire.
concurrent.futures.wait(futures)
# Final print to ensure the last count is displayed correctly
print(f"\nFinal count - Total successful reboots: {successful_reboots[0]}, Total failed reboots: {failed_reboots[0]}")
if __name__ == "__main__":
main()
Tipovi za personalizovanje
- Povećanje ili smanjenje paralelnosti: Uklonite max_workers=20 za više ili manje paralelnih napada, ovisno o toleranciji vašeg okruženja.
- Logiranje: Svi neuspješni pokušaji se pohranjuju u failed_reboots.log za kasniju reviziju.
- Opcija brzog požara: Komentirajte concurrent.futures.wait(futures) liniju ako želite da se skript ugasi i pomakne
Završne misli
BarbaricBoot nije za sramežljive. Koristite ga odgovorno, koristite ga mudro i zapamtite: sa velikom snagom dolazi velika odgovornost. Neka vaši rebooti budu brzi, vaši dnevnici čisti, a vaši krajnji rezultati uvek u skladu!