我有一个powershell脚本,可以启动2个不同的Access数据库应用程序。这在志愿者设置中,当计算机首次打开时,启动完成可能需要一两分钟。有时用户会不耐烦并多次点击Powershell脚本的快捷方式,导致Access数据库多次启动。
为了解决这个问题,我认为脚本的第一件事就是创建一个文件。如果由于文件已存在而导致创建失败,则会询问用户是否要继续。如果是,则运行脚本的其余部分,否则退出。问题是"赶上"在"尝试"没有抓到任何东西。我如何解决这个问题和/或人们有什么其他解决方案?
try {New-Item ($dbDir + "lock_file") -type file | Out-Null} # create lock_file. If it exists, another copy of this is probably running and the catch will run
catch
{
$answer = [System.Windows.Forms.MessageBox]::Show("It appears that the database is already starting. Start again?" , "Start Again" , 4)
if ($answer -eq "NO")
{Exit}
}
答案 0 :(得分:1)
Catch
仅适用于终止错误。 catch
不会捕获抛出错误但继续处理的Cmdlet(也称为非终止错误)。更改此行为的一种方法是设置cmdlet的-erroraction
,这对于大多数cmdlet应该是通用的。在你的情况下,我会这样做:
try {New-Item ($dbDir + "lock_file") -type file -ErrorAction Stop | Out-Null}
catch
块现在应该触发。