pip install psutil pywin32
import psutilimport platformimport socketimport subprocessimport osimport zipfileimport getpassfrom datetime import datetimeimport win32evtlogreport = []# =================================================# 基本情報# =================================================hostname = socket.gethostname()username = getpass.getuser()report.append("========== HELP DESK DIAGNOSTIC TOOLKIT ==========")report.append(f"実行日時: {datetime.now()}")report.append(f"PC名: {hostname}")report.append(f"ユーザー: {username}")report.append(f"OS: {platform.system()} {platform.release()}")# =================================================# ハードウェア情報# =================================================report.append("\n===== HARDWARE STATUS =====")cpu = psutil.cpu_percent(interval=1)report.append(f"CPU使用率: {cpu}%")memory = psutil.virtual_memory()report.append(f"メモリ使用率: {memory.percent}%")disk = psutil.disk_usage('/')report.append(f"ディスク使用率: {disk.percent}%")# =================================================# ネットワーク情報# =================================================report.append("\n===== NETWORK INFO =====")try: ip = socket.gethostbyname(hostname) report.append(f"IPアドレス: {ip}")except: report.append("IP取得失敗")try: hostname_lookup = socket.getfqdn() report.append(f"FQDN: {hostname_lookup}")except: report.append("FQDN取得失敗")# =================================================# ネット接続チェック# =================================================report.append("\n===== INTERNET CONNECTIVITY =====")def ping_test(host): try: subprocess.run(["ping", host, "-n", "2"], capture_output=True) return "OK" except: return "NG"report.append(f"Google接続: {ping_test('google.com')}")report.append(f"Cloudflare接続: {ping_test('1.1.1.1')}")# =================================================# DNS確認# =================================================report.append("\n===== DNS CHECK =====")try: dns = socket.gethostbyname("google.com") report.append(f"DNS解決成功: {dns}")except: report.append("DNS解決失敗")# =================================================# VPN確認# =================================================report.append("\n===== VPN ADAPTER CHECK =====")try: net = subprocess.run(["ipconfig"], capture_output=True, text=True) if "PPP adapter" in net.stdout or "VPN" in net.stdout: report.append("VPNアダプタ検出: YES") else: report.append("VPNアダプタ検出: NO")except: report.append("VPN検出失敗")# =================================================# ルーティングテーブル# =================================================report.append("\n===== ROUTE TABLE =====")try: route = subprocess.run(["route", "print"], capture_output=True, text=True) report.append(route.stdout[:500])except: report.append("ルート取得失敗")# =================================================# Windows Update状態# =================================================report.append("\n===== WINDOWS UPDATE CHECK =====")try: update = subprocess.run( ["powershell", "Get-HotFix"], capture_output=True, text=True ) report.append(update.stdout[:500])except: report.append("Windows Update情報取得失敗")# =================================================# Outlook接続確認(SMTP)# =================================================report.append("\n===== OUTLOOK SMTP CHECK =====")try: smtp_test = subprocess.run( ["powershell","Test-NetConnection smtp.office365.com -Port 587"], capture_output=True, text=True ) if "TcpTestSucceeded" in smtp_test.stdout: report.append("SMTP接続: OK") else: report.append("SMTP接続: NG")except: report.append("SMTPチェック失敗")# =================================================# インストールソフト# =================================================report.append("\n===== INSTALLED SOFTWARE =====")try: program_path = "C:\\Program Files" programs = os.listdir(program_path) for p in programs[:30]: report.append(p)except: report.append("ソフト一覧取得失敗")# =================================================# Windowsイベントログ# =================================================report.append("\n===== WINDOWS EVENT LOG =====")def get_event_logs(log_type): server = 'localhost' log_handle = win32evtlog.OpenEventLog(server, log_type) flags = win32evtlog.EVENTLOG_BACKWARDS_READ | win32evtlog.EVENTLOG_SEQUENTIAL_READ events = win32evtlog.ReadEventLog(log_handle, flags, 0) count = 0 for event in events: if event.EventType in [1,2]: report.append( f"{log_type} | ID:{event.EventID} | Source:{event.SourceName}" ) count += 1 if count >= 10: breakget_event_logs("Application")get_event_logs("System")# =================================================# レポート保存# =================================================report_file = f"helpdesk_report_{hostname}.txt"with open(report_file, "w", encoding="utf-8") as f: for line in report: f.write(line + "\n")# =================================================# ZIPパッケージ作成# =================================================zip_file = f"helpdesk_package_{hostname}.zip"with zipfile.ZipFile(zip_file, 'w') as z: z.write(report_file)# =================================================# 出力# =================================================for line in report: print(line)print("\nレポート保存:", report_file)print("ZIP生成:", zip_file)

コメント