簡體   English   中英

powershell腳本和subst命令

[英]powershell script and subst command

我有以下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

我想要腳本

  • 找到第一個未使用的驅動器號
  • 用subst創建一個新的驅動器
  • 在這個驅動器上做點什么
  • 用subst刪除驅動器

當我第一次運行它時,腳本運行正常。 如果我在同一個shell中第二次運行該腳本,我會從ls命令收到錯誤,指出無法找到該驅動器。 如果我打開一個新shell並運行該腳本,它會再次正常運行。

我的腳本有什么問題,如何讓它在同一個PowerShell實例中多次運行?

或者也許替代subst命令? 我嘗試使用powershell驅動器,但它不能與其他Windows程序(例如devenv.exe)一起使用。

另一種方法是使用PSProviders和更准確的PSDrives(看看get-help 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

我可以復制與你完全相同的行為,即使在一個Powershell窗口中我甚至無法cd到它創建的驅動器,但如果我打開一個全新的窗口,我可以cd到它就好了。

行為似乎如下所示:

http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/2e414f3c-98dd-4d8b-a3a3-88cfa0e7594c/

解決方法可能是使用如上所述的PSDrives,或者只是不映射,然后取消映射,然后嘗試在同一會話中重新映射相同的驅動器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM