diff --git a/blair-sync-rustdesk-via-ga.sh b/blair-sync-rustdesk-via-ga.sh index 2d7771b..864e3f8 100644 --- a/blair-sync-rustdesk-via-ga.sh +++ b/blair-sync-rustdesk-via-ga.sh @@ -38,6 +38,8 @@ GUEST_READ_PATHS = [ ] PS_READ_ID = r''' +$ProgressPreference = 'SilentlyContinue' +$ErrorActionPreference = 'SilentlyContinue' $paths = @( 'C:\ProgramData\Blair\rustdesk-report.json', 'C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml', @@ -145,16 +147,36 @@ def decode_exec_payload(st: dict) -> tuple[str, str]: return out, err +def clean_exec_text(text: str) -> str: + if not text: + return '' + text = re.sub(r'#< CLIXML.*', '', text, flags=re.DOTALL) + return text.strip() + + +def extract_id_from_exec(out: str, err: str) -> str | None: + combined = '\n'.join(filter(None, (clean_exec_text(out), clean_exec_text(err)))) + for line in combined.splitlines(): + line = line.strip() + if re.fullmatch(r'\d{6,12}', line): + return line + match = re.search(r'\d{6,12}', combined) + return match.group(0) if match else None + + def parse_exec_result(st: dict) -> tuple[str | None, str | None]: try: exitcode = int(st.get('exitcode', 1)) out, err = decode_exec_payload(st) + rid = extract_id_from_exec(out, err) + if rid: + return rid, None if exitcode != 0: - return None, err or out or f'guest exit {exitcode}' - match = re.search(r'\d{6,12}', out) - if not match: - return None, f'no id in exec output: {out!r}' - return match.group(0), None + brief = clean_exec_text(err) or clean_exec_text(out) or f'guest exit {exitcode}' + if len(brief) > 120: + brief = brief[:120] + '...' + return None, brief + return None, f'no id in exec output: {out!r}' except Exception as exc: # noqa: BLE001 return None, f'exec decode error: {exc}' @@ -258,7 +280,7 @@ def guest_exec_powershell(vmid: int) -> tuple[str | None, str | None]: enc = powershell_encoded(PS_READ_ID) return guest_exec_text( vmid, - ['powershell.exe', '-NoProfile', '-EncodedCommand', enc], + ['powershell.exe', '-NoProfile', '-NonInteractive', '-EncodedCommand', enc], timeout=120, )