Python中如何远程查看Windows目录下的日志文件?
大家好,最近需要写一个 windows 的巡检脚本 ,想用 python 远程批量查看 windows 下的日志。请问怎样实现? 查过 wmi 只能查看进程信息,不能操作目录文件。 也不想用 powershell . 请问大家有好的办法吗?一起讨论一下
Python中如何远程查看Windows目录下的日志文件?
fabric
用Python远程查看Windows日志,最直接的方式是使用paramiko库通过SSH连接。不过Windows默认没有SSH服务,需要先启用它。
启用Windows SSH服务:
- 设置 → 应用 → 可选功能 → 添加功能 → 安装“OpenSSH服务器”
- 管理员权限运行PowerShell:
Start-Service sshd并Set-Service -Name sshd -StartupType 'Automatic'
Python代码示例:
import paramiko
from io import StringIO
def read_remote_logs(hostname, username, password, log_path):
"""
远程读取Windows服务器日志文件
参数:
hostname: 远程主机IP或主机名
username: 用户名(如:Administrator)
password: 密码
log_path: 日志文件路径(如:C:/logs/app.log)
"""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 建立SSH连接
client.connect(hostname, username=username, password=password)
# 执行命令读取日志(tail查看最后100行)
command = f'Get-Content "{log_path}" -Tail 100 -Encoding UTF8'
stdin, stdout, stderr = client.exec_command(command)
# 读取输出
logs = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
if error:
print(f"错误: {error}")
return None
return logs
except Exception as e:
print(f"连接失败: {e}")
return None
finally:
client.close()
# 使用示例
if __name__ == "__main__":
logs = read_remote_logs(
hostname="192.168.1.100",
username="Administrator",
password="your_password",
log_path="C:/ProgramData/MyApp/logs/app.log"
)
if logs:
print("=== 日志内容 ===")
print(logs)
替代方案:
如果不想启用SSH,可以用wmi库(需要Windows管理权限):
import wmi
c = wmi.WMI(computer="192.168.1.100", user="Administrator", password="password")
for line in c.query(f"SELECT * FROM CIM_DataFile WHERE Name='C:\\\\logs\\\\app.log'"):
# 处理文件内容...
总结: 推荐用SSH方案,更通用安全。
谢谢您的回复。 但 fabric 不能远程登录并操作 windows 吧? 我知道用它操作 linux 是完全没问题
使用客户端的方式呗,客户端使用 wind 的 API 写功能
ansible?
像楼上说的用 ansible 和 fabric 之类的比较简单能实现吧。它们会和 powershell 通讯,通过相应模块完成你的需求。
谢谢大家的回复。 我研究一下
谢谢大家的回复哈,我找到办法解决了。 用 winrm 模块就可以了。方法如下:
1.安装 pip pywinrm
2.import winrm
然后:
winServer = winrm.Session('http://192.168.1.168:5985/wsman’,auth=(‘administrator’,xxx’)) #url 地址就是服务器地址,auth 里面的就是系统的账号和密码
checkLog=winServer.run_cmd('type D:\monitorServer\error.log|find /i /c “error”) #括号里面就是要执行的 dos 命令。
用法非常简单, windows server 一般默认都会开启 winrm 服务,如果有开启防火墙记得把 5985 端口开放一下。 这模块远程操控 windows 非常方便。。 更多用法大家百度 winrm 就可以了。 如有疑问,请留言一起探讨
winrm 的方式需要先在 windows 机器上开启 winrm 服务。 有些 zf 或者医院的 windows 设备没法开启服务还有别的方式连接吗?

