我有以下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实例中多次运行?
或者,除了subst命令之外,还有一种替代方法?我试过使用powershell驱动器,但它不适用于其他windows程序(如devenv.exe)。
发布于 2013-02-26 22:09:11
我可以复制和您完全一样的行为,即使在一个Powershell窗口中,我甚至不能将cd复制到它创建的驱动器上,但是如果我打开一个全新的窗口,我就可以对其进行cd处理。
这里所概述的行为似乎是:
http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/2e414f3c-98dd-4d8b-a3a3-88cfa0e7594c/
解决方法可能是像上面提到的那样使用PSDrives,或者只是不映射,然后取消映射,然后尝试在同一个会话中重新映射相同的驱动器。
发布于 2013-02-26 20:21:45
另一种选择是使用PSProviders和更精确的PSDrives (查看提供者):
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一起使用。
发布于 2015-03-10 16:07:29
我也遇到了同样的问题,而我的解决办法--我使用的是版本3--是在进入新映射的驱动器之前调用Get-PSDrive:
$drive = getFreeDrive
subst "$drive`:" T:\temp
Get-PSDrive | Out-Null
ls "$drive`:\" # just a dummy command
subst "$drive`:" /Dhttps://stackoverflow.com/questions/15093347
复制相似问题