【问题排查】解决 windows平台下,剪贴板有图片,但是iflow提示"未从剪切板中找到图片"

问题已经定位

iflow-cli在windows平台下调用powershell的Get-Clipboard -Format Image 实现对剪贴板图片的获取

由于powershell的版本差异,只有 v5.x 版本支持 -Format Image 接口,若你的机器上使用的非 v5.x
版本的powershell,会导致无论如何都是 “未从剪切板中找到图片”

如何测试

1.查看powershell版本

PS D:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  2673

2.剪贴一张图片到剪贴板

3.尝试使用Get-Clipboard -Format Image 获取图片信息

PS D:\> Get-Clipboard -Format Image


Tag                  :
PhysicalDimension    : {Width=713, Height=316}
Size                 : {Width=713, Height=316}
Width                : 713
Height               : 316
HorizontalResolution : 96
VerticalResolution   : 96
Flags                : 335888
RawFormat            : [ImageFormat: b96b3caa-0728-11d3-9d7b-0000f81ef32e]
PixelFormat          : Format32bppRgb
Palette              : System.Drawing.Imaging.ColorPalette
FrameDimensionsList  : {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
PropertyIdList       : {}
PropertyItems        : {}

若剪贴版没有图片将没有返回

若powershell不支持将报错

Get-Clipboard: A parameter cannot be found that matches parameter name 'Format'.

解决方法,使用 PowerShell 5.1 版(win10自带)

5.x版本应该都是支持的

有什么影响

5.1版本的ps不支持 && 语法,将会导致以下影响

本人就是因为,5版本ps不支持&&语法,iflow大模型又默认会尝试&&语法 所以升级了ps 到7版本

导致无论如何都不能粘贴图片

鱼和熊掌如何兼得?

  1. 魔改ps让它同时支持 &&Get-Clipboard -Format
  2. 魔改iflow源码,将剪贴板图片读取使用的ps硬编码路径为5版本,shell调用的ps硬编码为7版本
  3. 请求iflow运维把上述问题反馈给开发,让开发适配
1 个赞

PS:搞得心累

我这还在写全局的规则约束,让它遇到&&和||,自动替换成PowerShell 5.x兼容的写法呢

结果发现现在似乎官方已经调整过了,现在貌似系统自动执行的语句,就会使用ps 5.x兼容的写法了。

虽然不够那么的”优雅“:face_with_peeking_eye:

不过现在算是”完美“兼容了5.x的命令多层嵌套判断执行逻辑和从剪贴板查看图片?

1 个赞

可能吧,我在留意一下,我还没有粘贴图片的需求,遇到了在调试

是的 这个问题解决过 后面有碰到类似的我们再修吧 难顶

1 个赞

目前Windows平台还不支持截图粘贴

我知道,我截图后自动会复制到剪贴板的,忘说了

1 个赞

&&和||的问题在修了,这周内修完 :smiling_face_with_tear:

1 个赞

请问,iflow开发测试使用的powershell是什么版本
我本地和你们一样,免得出问题

然后如果做了不同版本的powershell 适配的话也说明一下,目前都没有官方说明的,用户排查问题很不方便

目前要针对5.1做一下适配