Quản lý một môi trường doanh nghiệp hiện đại có thể làm cho ngay cả những chiến binh CNTT khó khăn nhất đổ mồ hôi - đặc biệt là khi bạn cần khởi động lại một đội các điểm cuối cứng nhắc. , một công cụ khởi động lại hàng loạt được cung cấp bởi Python, được tạo ra cho các quản trị viên không có thời gian cho sự đơn điệu nhấp chuột qua nhấp chuột. Giống như một Barberion thực sự, nó cắt qua danh sách máy của bạn với tốc độ, sức mạnh và không có sự kiên nhẫn đối với những trở ngại. BarbaricBoot BarbaricBoot là gì? là một script dòng lệnh Python đọc một danh sách tên máy tính và phát hành khởi động lại song song trên chúng, báo cáo mọi chiến thắng và thất bại trên đường đi. command), nó tận dụng đa threading cho hiệu quả tối đa. mỗi khởi động lại thất bại được ghi lại - mỗi khởi động lại thành công là một trận chiến khác giành chiến thắng. BarbaricBoot shutdown Tại sao BarbaricBoot? Hiệu quả: Khởi động lại hàng trăm máy trong vài phút, không phải hàng giờ. Đơn giản: Một tập tin, một lệnh, cài đặt tối thiểu. Trách nhiệm: Phản hồi thời gian thực về thành công và thất bại. No-Nonsense Barbarian Spirit: Chỉ cần khởi động lại tất cả - không có lời xin lỗi, không có lòng thương xót. Làm thế nào nó hoạt động Nhập: Thả tên máy của bạn (một cho mỗi dòng) vào pcs.log. BarbaricBoot tấn công bằng cách sử dụng concurrent.futures của Python để khởi động lên đến 20 khởi động lại song song cùng một lúc. Phản hồi: Bạn nhận được số thành công và thất bại theo thời gian thực - cộng với các nhật ký chi tiết của bất kỳ máy nào từ chối lệnh của bạn. Cách cài đặt và sử dụng BarbaricBoot Yêu cầu Python 3.6 hoặc mới hơn Quyền quản trị Windows (đối với quyền tắt từ xa) Một tệp pcs.log liệt kê các máy mục tiêu của bạn (một trên mỗi dòng) Thiết lập **Save the Script \ Copy the complete code (provided below) to your admin machine. BarbaricBoot.py **Prepare Your Targets \ Create a plain text file called in the same directory as your script, listing each machine to be rebooted. pcs.log **Run BarbaricBoot \ Open a terminal and execute: “Python BarbericBoot.py“ Mã đầy đủ #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() Tùy chỉnh Tips Tăng hoặc giảm sự song song: Tùy chỉnh max_workers=20 cho nhiều hoặc ít các cuộc tấn công song song, tùy thuộc vào sự khoan dung của môi trường của bạn. Logging: Tất cả các nỗ lực thất bại được lưu trữ trong failed_reboots.log để xem xét sau. Tùy chọn Rapid Fire: Bình luận dòng concurrent.futures.wait(futures) nếu bạn muốn để kịch bản tắt và di chuyển Suy nghĩ cuối cùng BarbaricBoot không dành cho người nhút nhát. Sử dụng nó một cách có trách nhiệm, sử dụng nó một cách khôn ngoan, và hãy nhớ: với sức mạnh lớn đi kèm với trách nhiệm lớn.