PowerShell中的Push-Location命令无法识别新创建的驱动器名称

时间:2014-09-15 18:34:26

标签: powershell powershell-v2.0

我在通过脚本创建新的驱动器标签时遇到了一些问题。我已将问题分解为几行以重现问题。

首先,创建一个名为Test.ps1的文件:

New-PSDrive -name Foo -PSProvider FileSystem -root "C:\Code"
Set-Location Foo:\

您可以使用任何存在的目录更改C:\Code

接下来,在PowerShell命令行上,运行:

.\Test.ps1

其次是:

Push-Location Foo:\

我得到的错误是:

Push-Location : Cannot find drive. A drive with the name 'Foo' does not exist.
At line:1 char:14
+ Push-Location <<<<  Foo:\
    + CategoryInfo          : ObjectNotFound: (Foo:String) [Push-Location], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.PushLocationCommand

enter image description here

就好像Push-Location堆栈在初始化shell时缓存所有驱动器标签,而New-PSDrive命令不会更新该缓存。有没有办法解决这个bug,或者强制这个陈旧数据更新?谢谢!

2 个答案:

答案 0 :(得分:1)

找到解决方案:

New-PSDrive -name Foo -PSProvider FileSystem -root "C:\Code" -Scope Global

设置-Scope Global可解决问题。

答案 1 :(得分:1)

通常,调用的脚本或函数在新作用域中运行,因此在该作用域中定义的变量,函数和驱动器在外部作用域中不可访问,除非它们被明确添加到全局作用域。

您可以使用New-PSDrive上的Scope参数,将驱动器显式添加到全局范围,如您所述。有几个cmdlet和函数具有scope参数。使用get-help * -Parameter Scope查找它们。

另一种选择是使用点源表示法在当前作用域中运行脚本:

. .\Test.ps1