熟悉c#的朋友们,你会不会抱怨PowerShell中没有Using语句自动调用Idisposable接口中的Dispose方法,来释放资源呢?不要悲伤,PowerShell强大的兼容性可以让你做类似的事情。那就是scriptblocks脚本块。下面的函数会接受一个实现Idisposable方法的变量,然后把它交给脚本块去执行,在脚本块内部,可以通过 $_来访问它。
function use-var([idisposable]$instance, [scriptblock]$scriptblock) { try { $instance | % $scriptblock } finally { $instance.dispose() } }
使用的时候也很简单:
use-var (new-object system.io.memorystream 40) { $_.writebyte(40); $_.writebyte(20); $_.toarray(); $_.close(); }
要让这个函数变得高大威猛起来,需要点时间,但是思路已经清晰了。
参考链接 Karl (USING for PowerShell?)
本文链接: https://www.pstips.net/using-for-powershell.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
为什么标题叫using呢?我觉得更想说Idisposable in POwershell
因为在C#中大家都约定俗成不提Idisposable,使用Using(Var v=new Var()){}这样的结构,调用会在结束时,自动调用dispose方法。比如数据库连接,数据流等非常实用。
应该叫 using 语句(http://msdn.microsoft.com/zh-cn/library/yh598w02.aspx),因为 C# 里还有个 using 指令(http://msdn.microsoft.com/zh-cn/library/sf0df423.aspx)
感谢提醒!我竟然把使用频率超高的using指令给忘记了。那就把文章标题改成:“PowerShell中能用Using语句吗?”