我在通过脚本创建新的驱动器标签时遇到了一些问题。我已将问题分解为几行以重现问题。
首先,创建一个名为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
就好像Push-Location
堆栈在初始化shell时缓存所有驱动器标签,而New-PSDrive
命令不会更新该缓存。有没有办法解决这个bug,或者强制这个陈旧数据更新?谢谢!
答案 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