PowerShell中使用Open-Device执行远程命令无法捕获输出求助
解决Open-Device连接远程设备后无法捕获cmdd命令输出的问题
问题原因
cmdd命令是在Open-Device建立的交互会话中直接向控制台输出内容,并未通过PowerShell的标准输出流传递,因此常规的Out-String、变量赋值、重定向等方法无法捕获输出。
可行解决方案
1. 远程生成文件后拉取
先让cmdd把输出写入远程设备的本地文件,再通过工具的文件传输命令将文件拉回本地读取:
# 连接远程设备 Open-Device <Device Serial Number> # 在远程设备执行dir并将输出写入临时文件 cmdd dir > C:\temp\dir_output.txt # 将远程文件拉到本地(假设工具提供Get-DeviceFile命令) Get-DeviceFile -Path C:\temp\dir_output.txt -LocalPath .\local_dir_output.txt # 读取本地文件内容到变量 $output = Get-Content .\local_dir_output.txt
2. 使用会话对象捕获(若工具支持)
如果Open-Device返回可操作的会话对象,尝试通过会话管道传递命令并捕获输出:
# 建立会话并保存到变量 $deviceSession = Open-Device <Device Serial Number> # 通过会话执行命令并捕获输出 $output = $deviceSession | cmdd dir
3. 转录控制台输出提取内容
用PowerShell的Start-Transcript记录整个会话的控制台输出,再从日志中提取目标命令的输出:
# 开始转录会话输出到日志文件 Start-Transcript -Path .\device_session.log # 连接设备并执行命令 Open-Device <Device Serial Number> cmdd dir # 停止转录 Stop-Transcript # 从日志中提取dir命令的输出(根据实际输出调整过滤规则) $output = Get-Content .\device_session.log | Where-Object { $_ -match "Directory of|^\s+[0-9/]+ [0-9:]+ " }
内容的提问来源于stack exchange,提问作者Santhosh Kumar
相关产品推荐
相关产品推荐

