1
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

为什么我不能更改目录?

4

2 回答 2

1

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

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

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

为什么我不能更改目录?

它看起来像一个错误,但我无法重现它。如果您可以提供更多信息,我鼓励您在Google Cloud Powershell 问题页面上提交问题。

于 2017-06-28T23:08:38.890 回答
0

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

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

在模块中找到的 cmdlet 的实际列表是在构建和发布过程中确定的。这里有一些信息。

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

于 2017-06-28T15:05:17.687 回答