找不到路径,因为它不存在

Cannot find path because it does not exist

PS D:\> cd gs:\
cd : Cannot find drive. A drive with the name 'gs' does not exist.
PS D:\> Get-GcsBucket
PS D:\> cd gs:\mybucket

为什么我不能在 Get-GcsBucket 之前将驱动器更改为 gs:\?

PS gs:\mybucket> mkdir NewFolder
PS gs:\mybucket> cd .\NewFolder
cd : Cannot find path 'gs:\mybucket\NewFolder' because it does not exist.
PS gs:\mybucket> ls
Name          Size ContentType TimeCreated Updated
----          ---- ----------- ----------- -------
NewFolder

为什么我不能更改目录?

我猜这是 Cloud Tools for PowerShell 模块中的错误。

当您启动 PowerShell 时,它会加载一个 manifest 文件 (GoogleCloud.psd1),该文件为模块包含的每个 cmdlet 提供声明。这允许 PowerShell 延迟加载实际的 cmdlet 程序集,直到实际需要它为止。从而大大加快了启动时间。

在模块中找到的 cmdlet 的实际列表是作为构建和发布过程的一部分确定的。一些信息 here.

无论如何,该清单并未声明 Cloud Storage PowerShell 提供程序的存在(cd gs:\ 位。)因此 PowerShell 在加载 GoogleCloud PowerShell 模块之前不知道它的存在,即在您调用 Get-GcsBucket(或者我假设模块中的任何 cmdlet)至少一次后完成。

为什么我不能在 Get-GcsBucket 之前将驱动器更改为 gs:\?

与 Cmdlet 和函数不同,在将它们所属的模块导入当前 PowerShell 会话之前,无法发现提供程序和它们添加的驱动器。这可以使用 Import-Module 显式完成,也可以通过调用可发现的 Cmdlet 或函数隐式完成,例如 Get-GcsBucket.

为什么可以发现 Cmdlet 而不能发现驱动器?因为模块清单列出了 Cmdlet,但没有驱动器条目,还因为 Cmdlet 名称存储在程序集元数据(作为属性)中,可以在不加载程序集的情况下读取,而驱动器直接来自代码,可以仅在加载程序集后 运行。

为什么我不能更改目录?

这看起来像是一个错误,但我无法重现它。如果您可以提供更多信息,我鼓励您在 Google Cloud Powershell issues page.

上提交问题