You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义PowerShell Provider实现CopyItem能否跨提供商复制?

问题解答

背景

我正在使用Google Cloud SDK,它为存储服务实现了Google Cloud Storage PowerShell Provider。该Provider下可正常使用gci、cd命令,但执行cp命令将存储桶对象复制到本地文件系统(模拟gcloud storage cp <bucket item> <local path>的下载操作)时,触发错误:

Copy-Item: Source and destination path did not resolve to the same provider.

问题分析

PowerShell的Copy-Item底层确实存在跨Provider复制的限制:SessionStateInternal类的CopyItem内部方法会检查源和目标是否属于同一Provider,不满足则抛出上述错误,这个逻辑定义在SessionStateContainer.cs中,错误提示文本来自SessionStateStrings.resx资源文件。

你看到Navigation.cs中Copy-Item的定义没有提到限制,是因为该cmdlet的核心逻辑委托给了SessionStateInternal处理,限制是在底层会话状态层面实现的,而非cmdlet本身的直接检查。

结论与解决方案

在自定义Provider中实现CopyItem方法无法绕过这个底层限制,因为跨Provider复制的检查是在SessionStateInternal的CopyItem方法中提前执行的,会在触发Provider的CopyItem实现之前就抛出错误。

如果你想实现跨端复制,有两种可行方案:

  • 自定义一个专门的cmdlet(比如Copy-GcsItemToLocal),直接封装Google .NET客户端库的下载逻辑,绕过Copy-Item的限制。
  • 借助PowerShell的管道,结合Get-Content(如果Provider支持读取内容)和Set-Content来实现文件传输,但这种方式对大文件不友好。

内容的提问来源于stack exchange,提问作者Blaisem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:40:10