如何仅通过WinRM端口使用PowerShell远程递归列出文件?
递归获取远程目录文件列表(WinRM替代SMB方案)
Got it!既然SMB共享用不了,咱们完全可以借助WinRM的PowerShell远程执行能力来实现需求。下面是两种实用的方案,你可以根据场景选择:
方案一:直接远程执行并返回结果
用Invoke-Command远程调用目标主机的Get-ChildItem命令,递归列出指定目录下的所有文件:
# 基础版,使用当前登录的凭据访问远程主机 Invoke-Command -ComputerName "远程主机名/IP" -ScriptBlock { Get-ChildItem -Path "C:\你的目标目录" -Recurse -File | Select-Object FullName }
如果需要用特定账号访问(比如当前账号无权限),先获取凭据再执行:
$remoteCred = Get-Credential -Message "请输入远程主机的授权账号信息" Invoke-Command -ComputerName "远程主机名/IP" -Credential $remoteCred -ScriptBlock { Get-ChildItem -Path "C:\你的目标目录" -Recurse -File | Select-Object FullName }
小提示:-Recurse负责递归遍历所有子目录,-File只筛选文件(排除文件夹),Select-Object FullName输出完整文件路径,方便你直接查看或后续处理。
方案二:将结果保存到本地文件
如果需要把远程文件列表持久化到本地电脑的文件中,直接在命令后追加导出逻辑即可:
Invoke-Command -ComputerName "远程主机名/IP" -ScriptBlock { Get-ChildItem -Path "C:\你的目标目录" -Recurse -File } | Select-Object FullName | Out-File -FilePath "C:\本地保存路径\远程文件列表.txt" -Encoding UTF8
关键注意事项
- 确保远程主机已开启WinRM服务:管理员可在远程主机上执行
Enable-PSRemoting -Force完成配置(首次执行会自动配置防火墙规则,允许WinRM端口)。 - 你的账号需要拥有远程主机的远程执行权限:通常是管理员组,或者Remote Management Users组的成员。
- 防火墙放行WinRM端口:默认HTTP端口是5985,HTTPS是5986,确保本地和远程主机的防火墙都允许这两个端口的流量。
内容的提问来源于stack exchange,提问作者Freddie
相关产品推荐
相关产品推荐

