如何通过Windows网络(含PowerShell方式)远程访问读取指定用户历史记录文件夹并导出数据
如何通过Windows网络(含PowerShell方式)远程访问读取指定用户历史记录文件夹并导出数据
嘿,既然你手握域管理员权限,要远程访问目标主机上C:\Users\admins\AppData\Local\Microsoft\Windows\History文件夹、读取内容并导出CSV到你的管理电脑,完全可以通过几种高效的方式实现。下面是具体操作步骤和注意事项:
一、先确认前提条件
- 目标主机必须处于开机状态,且能通过网络正常访问
- 确保目标主机的防火墙允许远程管理(WinRM默认端口5985/5986需开放,域内环境通常已配置)
- 你的域管理员账号需具备目标主机的本地管理员权限(一般域admin默认拥有)
二、方法1:PowerShell远程会话(最稳定的方式)
这种方式直接在远程主机上执行命令,能避免网络共享可能出现的权限问题:
- 先检查目标主机是否启用了WinRM(远程管理服务):
如果返回正常的WSMan信息,说明服务已启用;如果没启用,你可以用这条命令远程开启(需域管理员权限):# 替换TargetPC为目标主机的名称或IP地址 Test-WSMan TargetPCInvoke-Command -ComputerName TargetPC -ScriptBlock { winrm quickconfig -quiet } - 远程读取History文件夹并导出到本地CSV:
这里的# 定义目标主机名和用户名 $targetPC = "TargetPC" $targetUser = "admins" # 远程获取文件夹所有内容的详细信息 $historyData = Invoke-Command -ComputerName $targetPC -ScriptBlock { $historyPath = "C:\Users\$using:targetUser\AppData\Local\Microsoft\Windows\History" # 递归读取所有文件/文件夹,包括隐藏和系统属性的内容 Get-ChildItem -Path $historyPath -Recurse -Force | Select-Object FullName, Name, Length, CreationTime, LastWriteTime, Attributes } # 将结果导出到本地CSV文件(路径可以自定义) $historyData | Export-Csv -Path "C:\Temp\Remote_History_Export.csv" -NoTypeInformation -Encoding UTF8-Recurse会遍历所有子文件夹,-Force能读取隐藏/系统级的文件,确保你拿到尽可能多的信息。
三、方法2:通过UNC路径直接访问
利用Windows默认的系统隐藏共享C$,直接通过网络路径访问目标文件夹:
# 替换TargetPC为目标主机名 $uncPath = "\\TargetPC\C$\Users\admins\AppData\Local\Microsoft\Windows\History" # 读取内容并导出CSV Get-ChildItem -Path $uncPath -Recurse -Force | Select-Object FullName, Name, Length, CreationTime, LastWriteTime, Attributes | Export-Csv -Path "C:\Temp\UNC_History_Export.csv" -NoTypeInformation -Encoding UTF8
这种方式更直接,不需要依赖WinRM,但如果目标主机的C$共享被禁用,就没法用了。
四、一些关键注意事项
- 编码问题:导出CSV时一定要加
-Encoding UTF8,否则中文或特殊字符可能会乱码 - 权限排查:如果遇到“访问被拒绝”的错误,确认你的域管理员账号在目标主机的本地管理员组中,或者目标用户的文件夹权限是否允许管理员访问
- 文件完整性:History文件夹里的部分文件可能是系统锁定的(比如正在被使用的历史记录),这种情况下会跳过,属于正常现象
备注:内容来源于stack exchange,提问作者admins akb




