Windows远程桌面连接清理工具

查看 2|回复 0
作者:天津SEO   
运行脚本后,您会看到类似以下的输出:
==================================================
Windows远程桌面连接清理工具
==================================================
==================================================
检查最近使用的远程桌面连接记录...
==================================================
找到记录: 104.236.176.123:3389
找到记录: 45.79.28.119:3389
总共找到 2 个最近连接记录
==================================================
检查所有服务器记录...
==================================================
找到服务器: 104.236.176.123
找到服务器: 45.79.28.119
总共找到 2 个服务器记录
==================================================
检查RDP配置文件...
==================================================
找到RDP配置文件: C:\Users\用户名\documents\Default.rdp
文件大小: 2432 字节
==================================================
检查结果汇总
==================================================
最近连接记录数量: 2
服务器记录数量: 2
RDP配置文件: 存在
总共找到 4 条远程桌面连接相关记录
示例记录格式:
最近连接记录示例: 104.236.176.123:3389
服务器记录示例: 104.236.176.123
[ol]
  • #!/usr/bin/env python3
  • # -*- coding: utf-8 -*-
  • """
  • Windows远程桌面连接清理工具
  • 功能:
  • 1. 检查当前保存的远程桌面连接记录
  • 2. 清理所有远程桌面连接历史记录
  • """
  • import os
  • import subprocess
  • import sys
  • from typing import List, Dict, Tuple
  • class RDPCleaner:
  •     """Windows远程桌面连接清理工具"""
  •    
  •     def __init__(self):
  •         self.default_reg_path = r"HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default"
  •         self.servers_reg_path = r"HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"
  •         self.rdp_file_path = os.path.join(os.path.expanduser("~"), "documents", "Default.rdp")
  •         
  •     def run_command(self, command: str) -> Tuple[int, str, str]:
  •         """执行命令并返回结果"""
  •         try:
  •             # 使用cmd执行命令
  •             result = subprocess.run(
  •                 f"cmd /c {command}",
  •                 shell=True,
  •                 capture_output=True,
  •                 text=True,
  •                 encoding='gbk',
  •                 errors='ignore'
  •             )
  •             return result.returncode, result.stdout, result.stderr
  •         except Exception as e:
  •             return -1, "", str(e)
  •    
  •     def check_mru_records(self) -> List[str]:
  •         """检查最近使用的远程桌面连接记录"""
  •         print("=" * 50)
  •         print("检查最近使用的远程桌面连接记录...")
  •         print("=" * 50)
  •         
  •         returncode, stdout, stderr = self.run_command(f'reg query "{self.default_reg_path}"')
  •         
  •         if returncode != 0:
  •             print("未找到最近连接记录或查询失败")
  •             return []
  •         
  •         records = []
  •         lines = stdout.strip().split('\n')
  •         
  •         for line in lines:
  •             line = line.strip()
  •             if line.startswith('MRU') and 'REG_SZ' in line:
  •                 # 解析记录,格式如:MRU0    REG_SZ    192.168.1.1:3389
  •                 parts = line.split('REG_SZ')
  •                 if len(parts) > 1:
  •                     record = parts[1].strip()
  •                     records.append(record)
  •                     print(f"找到记录: {record}")
  •         
  •         print(f"\n总共找到 {len(records)} 个最近连接记录")
  •         return records
  •    
  •     def check_server_records(self) -> List[str]:
  •         """检查所有服务器记录"""
  •         print("\n" + "=" * 50)
  •         print("检查所有服务器记录...")
  •         print("=" * 50)
  •         
  •         returncode, stdout, stderr = self.run_command(f'reg query "{self.servers_reg_path}"')
  •         
  •         if returncode != 0:
  •             print("未找到服务器记录或查询失败")
  •             return []
  •         
  •         servers = []
  •         lines = stdout.strip().split('\n')
  •         
  •         for line in lines:
  •             line = line.strip()
  •             if line and not line.startswith('HKEY_') and ':' not in line:
  •                 # 解析服务器IP或主机名
  •                 server = line.split('\\')[-1]
  •                 servers.append(server)
  •                 print(f"找到服务器: {server}")
  •         
  •         print(f"\n总共找到 {len(servers)} 个服务器记录")
  •         return servers
  •    
  •     def check_rdp_file(self) -> bool:
  •         """检查RDP配置文件是否存在"""
  •         print("\n" + "=" * 50)
  •         print("检查RDP配置文件...")
  •         print("=" * 50)
  •         
  •         if os.path.exists(self.rdp_file_path):
  •             file_size = os.path.getsize(self.rdp_file_path)
  •             print(f"找到RDP配置文件: {self.rdp_file_path}")
  •             print(f"文件大小: {file_size} 字节")
  •             return True
  •         else:
  •             print("未找到RDP配置文件")
  •             return False
  •    
  •     def clean_mru_records(self) -> bool:
  •         """清理最近使用的远程桌面连接记录"""
  •         print("\n" + "=" * 50)
  •         print("清理最近使用的远程桌面连接记录...")
  •         print("=" * 50)
  •         
  •         returncode, stdout, stderr = self.run_command(f'reg delete "{self.default_reg_path}" /va /f')
  •         
  •         if returncode == 0:
  •             print("成功清理最近连接记录")
  •             return True
  •         else:
  •             print(f"清理最近连接记录失败: {stderr}")
  •             return False
  •    
  •     def clean_server_records(self) -> bool:
  •         """清理所有服务器记录"""
  •         print("\n" + "=" * 50)
  •         print("清理所有服务器记录...")
  •         print("=" * 50)
  •         
  •         returncode, stdout, stderr = self.run_command(f'reg delete "{self.servers_reg_path}" /f')
  •         
  •         if returncode == 0:
  •             print("成功清理服务器记录")
  •             return True
  •         else:
  •             print(f"清理服务器记录失败: {stderr}")
  •             return False
  •    
  •     def clean_rdp_file(self) -> bool:
  •         """清理RDP配置文件"""
  •         print("\n" + "=" * 50)
  •         print("清理RDP配置文件...")
  •         print("=" * 50)
  •         
  •         if not os.path.exists(self.rdp_file_path):
  •             print("RDP配置文件不存在,无需清理")
  •             return True
  •         
  •         try:
  •             # 检查文件是否为隐藏文件
  •             is_hidden = os.stat(self.rdp_file_path).st_file_attributes & 2  # FILE_ATTRIBUTE_HIDDEN
  •             
  •             if is_hidden:
  •                 # 删除隐藏文件
  •                 returncode, stdout, stderr = self.run_command(f'del /ah "{self.rdp_file_path}"')
  •             else:
  •                 # 删除普通文件
  •                 os.remove(self.rdp_file_path)
  •                 returncode = 0
  •             
  •             if returncode == 0:
  •                 print("成功清理RDP配置文件")
  •                 return True
  •             else:
  •                 print(f"清理RDP配置文件失败: {stderr}")
  •                 return False
  •         except Exception as e:
  •             print(f"清理RDP配置文件时出错: {str(e)}")
  •             return False
  •    
  •     def verify_cleanup(self) -> Dict[str, bool]:
  •         """验证清理结果"""
  •         print("\n" + "=" * 50)
  •         print("验证清理结果...")
  •         print("=" * 50)
  •         
  •         results = {
  •             'mru_cleaned': True,
  •             'servers_cleaned': True,
  •             'rdp_file_cleaned': True
  •         }
  •         
  •         # 验证MRU记录
  •         returncode, stdout, stderr = self.run_command(f'reg query "{self.default_reg_path}"')
  •         if returncode == 0:
  •             lines = stdout.strip().split('\n')
  •             for line in lines:
  •                 if line.strip().startswith('MRU'):
  •                     results['mru_cleaned'] = False
  •                     print("警告: 仍有MRU记录未清理干净")
  •                     break
  •         
  •         # 验证服务器记录
  •         returncode, stdout, stderr = self.run_command(f'reg query "{self.servers_reg_path}"')
  •         if returncode == 0:
  •             results['servers_cleaned'] = False
  •             print("警告: 仍有服务器记录未清理干净")
  •         
  •         # 验证RDP文件
  •         if os.path.exists(self.rdp_file_path):
  •             results['rdp_file_cleaned'] = False
  •             print("警告: RDP配置文件仍然存在")
  •         
  •         # 显示验证结果
  •         print("\n验证结果:")
  •         print(f"- 最近连接记录: {'已清理' if results['mru_cleaned'] else '未完全清理'}")
  •         print(f"- 服务器记录: {'已清理' if results['servers_cleaned'] else '未完全清理'}")
  •         print(f"- RDP配置文件: {'已清理' if results['rdp_file_cleaned'] else '未完全清理'}")
  •         
  •         return results
  •    
  •     def run_check_only(self):
  •         """仅执行检查操作"""
  •         print("Windows远程桌面连接检查工具")
  •         print("=" * 50)
  •         
  •         mru_records = self.check_mru_records()
  •         server_records = self.check_server_records()
  •         rdp_exists = self.check_rdp_file()
  •         
  •         print("\n" + "=" * 50)
  •         print("检查结果汇总")
  •         print("=" * 50)
  •         print(f"最近连接记录数量: {len(mru_records)}")
  •         print(f"服务器记录数量: {len(server_records)}")
  •         print(f"RDP配置文件: {'存在' if rdp_exists else '不存在'}")
  •         
  •         total_records = len(mru_records) + len(server_records)
  •         print(f"\n总共找到 {total_records} 条远程桌面连接相关记录")
  •    
  •     def run_clean_only(self):
  •         """仅执行清理操作"""
  •         print("Windows远程桌面连接清理工具")
  •         print("=" * 50)
  •         
  •         # 执行清理
  •         mru_success = self.clean_mru_records()
  •         servers_success = self.clean_server_records()
  •         rdp_success = self.clean_rdp_file()
  •         
  •         # 验证清理结果
  •         results = self.verify_cleanup()
  •         
  •         print("\n" + "=" * 50)
  •         print("清理完成")
  •         print("=" * 50)
  •         print("建议重启电脑以确保所有相关缓存完全清除")
  •         print("如需删除保存的登录凭据,请到控制面板 > 凭据管理器中手动删除")
  •    
  •     def run_full_process(self):
  •         """执行完整的检查和清理流程"""
  •         print("Windows远程桌面连接清理工具")
  •         print("=" * 50)
  •         
  •         # 1. 检查现有记录
  •         mru_records = self.check_mru_records()
  •         server_records = self.check_server_records()
  •         rdp_exists = self.check_rdp_file()
  •         
  •         total_records = len(mru_records) + len(server_records)
  •         
  •         print("\n" + "=" * 50)
  •         print("检查结果汇总")
  •         print("=" * 50)
  •         print(f"最近连接记录数量: {len(mru_records)}")
  •         print(f"服务器记录数量: {len(server_records)}")
  •         print(f"RDP配置文件: {'存在' if rdp_exists else '不存在'}")
  •         print(f"\n总共找到 {total_records} 条远程桌面连接相关记录")
  •         
  •         # 2. 询问是否继续清理
  •         if total_records > 0 or rdp_exists:
  •             print("\n" + "=" * 50)
  •             print("准备清理所有记录")
  •             print("=" * 50)
  •             
  •             # 执行清理
  •             mru_success = self.clean_mru_records()
  •             servers_success = self.clean_server_records()
  •             rdp_success = self.clean_rdp_file()
  •             
  •             # 验证清理结果
  •             results = self.verify_cleanup()
  •             
  •             print("\n" + "=" * 50)
  •             print("清理完成")
  •             print("=" * 50)
  •             print("建议重启电脑以确保所有相关缓存完全清除")
  •             print("如需删除保存的登录凭据,请到控制面板 > 凭据管理器中手动删除")
  •         else:
  •             print("\n未找到需要清理的记录")
  • def main():
  •     """主函数"""
  •     cleaner = RDPCleaner()
  •    
  •     if len(sys.argv) > 1:
  •         mode = sys.argv[1].lower()
  •         if mode == "--check":
  •             cleaner.run_check_only()
  •         elif mode == "--clean":
  •             cleaner.run_clean_only()
  •         else:
  •             print("用法:")
  •             print("  python rdp_cleaner.py          # 检查并清理")
  •             print("  python rdp_cleaner.py --check  # 仅检查")
  •             print("  python rdp_cleaner.py --clean  # 仅清理")
  •     else:
  •         cleaner.run_full_process()
  • if __name__ == "__main__":
  •     main()[/ol]复制代码

    配置文件, 服务器

  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部