我在函数中使用此代码来本地挂载加密容器(使用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
}
}
答案 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
for
如果你想坚持异步执行,$limit = (Get-Date).AddMinutes(5)
do {
Start-Sleep -Seconds 5
} until ((Test-Path 'I:\') -or (Get-Date) -gt $limit)
循环并不是预先知道循环次数的最佳方法。做这样的事情通常会更好:
{{1}}