2011-03-17 50 views
0

我非常喜欢在Powershell脚本中使用try..catch语句(特别是在调用外部程序/ COM对象等时),然后使用自动的$error变量进行错误处理。

我的问题是,我发现,当在模块中封装这些方法时,$error变量不再起作用。我想这与你在模块内调用某个函数时实际运行的调用有关,但它无论如何都是令人生气的。这里有人知道为什么,甚至更好:有解决方案吗?

我的确有一个解决方法:使用Invoke-Expression-errorVariable参数来进行任何外部呼叫,但这是相当复杂的 - 并不总是万无一失的。

回答

1

也许在catch块中使用$ _变量可以吗?

+0

Works,kind of: 'New-Module MyMod {function div {param([int] $ i)try {10/$ i} catch {Write“'$ _:$ _”;写$错误[0] .exception}}}' 原来$ _是本地化的(我在瑞典语中有一个“错误”)。它仍然缺少$错误功能。 – 2011-03-25 07:19:56

+0

不,发生了什么是你正在转换$ _(一个异常对象)为一个字符串,所以你只能得到消息。试试'$ _ |得到-member'。 – JasonMArcher 2011-03-30 19:13:44

+0

谢谢,这工作! 'New-Module MyMod {function div {param([int] $ i)try {10/$ i} catch {if($ _ -match“zero by divide”){Write“不能被零除,愚蠢!” }}}}' – 2011-04-05 08:24:18