Test-Path未找到新安装的卷

时间:2016-09-05 10:12:31

标签: powershell mount

我在函数中使用此代码来本地挂载加密容器(使用VeraCrypt来标记I)并通知用户它是否成功。使用Start-Process成功安装后,循环中的Test-Path始终会失败,即使在另一个打开的控制台中尝试使用相同的Test-Path返回True也是如此。完成脚本并再次运行Test-Path 'I:\'后,它将返回True

为什么Test-Path没有看到新安装的卷?

# mount I:\
Start-Process $veraCrypt '/q /v C:\Users\myuser\container.tc /tc /l I'

# wait 60seconds for mounting
for ($i = 0; $i -lt 60; $i++)
{
    # if I mounted, do other things
    if (Test-Path 'I:\')
    {
        "mounted!"

        break;
    }
    else
    {
        # if not yet mounted, wait
        "not yet... $($i)/60"

        Start-Sleep -Seconds 1   
    }
}

1 个答案:

答案 0 :(得分:0)

也许安装只需要比你等待的时间更长(虽然我希望60秒就足够了)。如果异步执行不是必需的,我可以通过添加参数Start-Process $veraCrypt '/q /v C:\Users\myuser\container.tc /tc /l I' -Wait

来同步运行命令
& "$veraCrypt" /q /v C:\Users\myuser\container.tc /tc /l I

或使用call operator

for

如果你想坚持异步执行,$limit = (Get-Date).AddMinutes(5) do { Start-Sleep -Seconds 5 } until ((Test-Path 'I:\') -or (Get-Date) -gt $limit) 循环并不是预先知道循环次数的最佳方法。做这样的事情通常会更好:

{{1}}