# -*- coding: utf-8 -*- """修两处被转义搞坏的 PowerShell 脚本(引号嵌套太深)。 _do_boot_history 和 _do_activation 里的 \\" 变成了裸引号,Python 语法就断了。 改成不需要嵌套引号的写法。 """ from __future__ import annotations import sys from pathlib import Path FEATURES = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows" r"\lanremote\features.py") # 找到 _do_boot_history 整段,替换掉 BOOT_START = " def _do_boot_history(self, params) -> str:" BOOT_END = " def _do_clean_desktop(self, params) -> str:" BOOT_NEW = ''' def _do_boot_history(self, params) -> str: script = ("Get-WinEvent -LogName System -MaxEvents 500 " "-ErrorAction SilentlyContinue | " "Where-Object {$_.Id -eq 6005 -or $_.Id -eq 6006} | " "Select-Object -First 8 | " "ForEach-Object { $_.TimeCreated.ToString('MM-dd HH:mm') }") _code, out = _run(["powershell", "-NoProfile", "-Command", script], timeout=30) lines = [l for l in out.splitlines() if l.strip()] if not lines: return f"读不到开关机记录;本次已开机 {self.actions._uptime()}" return "最近开关机:\\n" + "\\n".join(lines) ''' ACT_START = " def _do_activation(self, params) -> str:" ACT_END = " def _do_disk_health(self, params) -> str:" ACT_NEW = ''' def _do_activation(self, params) -> str: script = ("$a = Get-CimInstance SoftwareLicensingProduct " "-ErrorAction SilentlyContinue | " "Where-Object {$_.PartialProductKey} | " "Select-Object -First 1; " "if ($a) { $a.Name; 'LicenseStatus=' + $a.LicenseStatus } " "else { 'none' }") _code, out = _run(["powershell", "-NoProfile", "-Command", script], timeout=30) lines = [l.strip() for l in out.splitlines() if l.strip()] if not lines or lines[-1] == "none": return "读不到激活信息" text = "\\n".join(lines) if "LicenseStatus=1" in text: text += "\\n(LicenseStatus=1 表示已激活)" return text ''' def main() -> int: text = FEATURES.read_text(encoding="utf-8") for start_mark, end_mark, new_block, tag in ( (BOOT_START, BOOT_END, BOOT_NEW, "_do_boot_history"), (ACT_START, ACT_END, ACT_NEW, "_do_activation")): start = text.find(start_mark) end = text.find(end_mark) if start < 0 or end < 0 or end <= start: print(f" [失败] 找不到 {tag} 的范围 (start={start}, end={end})") return 1 text = text[:start] + new_block + text[end:] print(f" {tag}: 已替换") FEATURES.write_text(text, encoding="utf-8") import ast try: ast.parse(FEATURES.read_text(encoding="utf-8")) print(" features.py: 语法 OK") except SyntaxError as exc: print(f" features.py: 语法错误 {exc}") # 打印出错位置 lines = FEATURES.read_text(encoding="utf-8").splitlines() n = exc.lineno or 0 for j in range(max(0, n - 4), min(len(lines), n + 3)): print(f" {j+1}: {lines[j]}") return 1 return 0 if __name__ == "__main__": sys.exit(main())