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

时间:2017-06-27 10:09:15

标签: google-cloud-powershell

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

为什么我无法更改目录?

2 个答案:

答案 0 :(得分:1)

为什么我无法在Get-GcsBucket?

之前将驱动器更改为gs:\

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

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

为什么我无法更改目录?

它看起来像一个bug,但我无法重现它。如果您可以提供更多信息,建议您在Google Cloud Powershell issues page上提交问题。

答案 1 :(得分:0)

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

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

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

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