我有以下的PowerShell 2.0脚本:
function getFreeDrive { [char[]]$driveLetters = @([char]'E'..[char]'Z') foreach ($d in $driveLetters) { if(!(Test-Path -Path "$d`:" -IsValid)) { return $d } } } $drive = getFreeDrive subst "$drive`:" T:\temp ls "$drive`:\" # just a dummy command subst "$drive`:" /D
我想要脚本
脚本运行良好,当我第一次运行它。 如果我在同一个shell中再次运行该脚本,则会从ls命令中得到一个错误,指出找不到该驱动器。 如果我打开一个新的shell并运行脚本,它再次运行良好。
我的脚本有什么问题,我怎样才能让它在同一个PowerShell实例中运行多次?
或者,也许有替代命令的替代? 我尝试使用PowerShell驱动器,但它不适用于其他Windows程序(如devenv.exe)。
我可以像你一样复制完全相同的行为,甚至在一个PowerShell窗口中,我甚至不能CD到它创建的驱动器,但如果我打开一个全新的窗口,我可以CD到它就好了。
行为似乎在这里概述:
解决方法可能是使用上面提到的PSDrives,或者只是不映射,然后取消映射,然后尝试在同一个会话中重新映射相同的驱动器。
一个替代方案是使用PSProviders和更准确的PSDrives(看看获得帮助about_providers ):
PS > New-PSDrive -Name "tr" -PSProvider filesystem -Root "c:\temp" Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- tr 28,15 FileSystem C:\temp PS > ls tr:*.c Répertoire : C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 01/08/2012 05:28 994 test.c PS > Remove-PSDrive -Name "tr"
麻烦的是这些驱动器不能与shell explorer.exe一起使用。
我有完全相同的问题,我的解决方法 – 注意我正在使用版本3 – 是在进入新映射的驱动器之前调用Get-PSDrive
:
$drive = getFreeDrive subst "$drive`:" T:\temp Get-PSDrive | Out-Null ls "$drive`:\" # just a dummy command subst "$drive`:" /D