在3.0版下运行时,2.0版脚本会导致异常

时间:2014-02-04 18:50:24

标签: powershell-v2.0 powershell-v3.0

WRT this question - 通过将当前的'prompt'函数作为字符串并编写一个定义'prompt'的新.ps1文件,我得到了一些工作。

在编写新函数时,我将要添加的功能放在try/catch块中,并将现有的提示功能写入finally块。

一点也不理想,但它适用于v2.0。当我在v3.0中运行它时,我得到一个例外:

"Control cannot leave a finally block"

有没有办法让脚本向主机询问某个版本的行为?
感谢您的任何见解。

当前'提示'功能包括:
    return " > " 我想在提示函数中添加一些功能,所以我写了一个新的temp.ps1文件。我在try/catch块中添加了我的功能,并将现有内容包含在finally块中 temp.ps1看起来像:

function global:prompt {  
  try {  
    pushd
  }
  catch {
    $errors[0] | fl * -force
  }
  finally {
    return " > "
  }
}  

这在v2中按预期工作,导致V3中的“控制无法离开......”错误。

1 个答案:

答案 0 :(得分:1)

如果您打算继续使用Powershell V3,则不能在finally块中使用return语句。请参阅Windows Management Framework 3.0发行说明的第6页:(不管怎样,您不需要返回值)

http://download.microsoft.com/download/5/2/B/52B59966-3009-4F39-A99E-3732717BBE2A/WMF3%200%20Beta%20Release%20Notes.docx