0
我非常喜欢在Powershell脚本中使用try..catch
语句(特别是在调用外部程序/ COM对象等时),然后使用自动的$error
变量进行错误处理。
我的问题是,我发现,当在模块中封装这些方法时,$error
变量不再起作用。我想这与你在模块内调用某个函数时实际运行的调用有关,但它无论如何都是令人生气的。这里有人知道为什么,甚至更好:有解决方案吗?
我的确有一个解决方法:使用Invoke-Expression
和-errorVariable
参数来进行任何外部呼叫,但这是相当复杂的 - 并不总是万无一失的。
Works,kind of: 'New-Module MyMod {function div {param([int] $ i)try {10/$ i} catch {Write“'$ _:$ _”;写$错误[0] .exception}}}' 原来$ _是本地化的(我在瑞典语中有一个“错误”)。它仍然缺少$错误功能。 – 2011-03-25 07:19:56
不,发生了什么是你正在转换$ _(一个异常对象)为一个字符串,所以你只能得到消息。试试'$ _ |得到-member'。 – JasonMArcher 2011-03-30 19:13:44
谢谢,这工作! 'New-Module MyMod {function div {param([int] $ i)try {10/$ i} catch {if($ _ -match“zero by divide”){Write“不能被零除,愚蠢!” }}}}' – 2011-04-05 08:24:18