[Powershell] Делаем using конструкцию

by Темных Сергей 15.03.2009 20:45:00

В C++ и в C# есть очень хорошая концепция - автоматическая очистка ресурсов по выходу из блока. В умолчательном powershell-е очень не хватает конструкции, которая бы делала тоже самое.

 Но умные люди уже все придумали за нас. Adam Weigert придумал функцию using, которая по синтаксису и семантике очень близка к C#-ному using-у.
http://weblogs.asp.net/adweigert/archive/2008/08/27/powershell-adding-the-using-statement.aspx

Но в исходном скрипте есть неточность, он не работает, если IDisposable был реализован явно, например, для класса XmlTextWriter. В данном скрипте эта неточность устранена.

function Try
{
param
(
[ScriptBlock]$Command = $(throw "The parameter -Command is required."),
[ScriptBlock]$Catch   = { throw $_ },
[ScriptBlock]$Finally = {}
)
& {
$local:ErrorActionPreference = "SilentlyContinue"
trap
{
trap
{
& {
trap { throw $_ }
&$Finally
}
throw $_
}
$_ | & { &$Catch }
}
&$Command
}
& {
trap { throw $_ }
&$Finally
}
}
function using {
param (
[System.IDisposable] $inputObject = $(throw "The parameter -inputObject is required."),
[ScriptBlock] $scriptBlock = $(throw "The parameter -scriptBlock is required.")
)
Try {
&$scriptBlock
} -Finally {
if ($inputObject -ne $null) `
{
[System.IDisposable].GetMethod("Dispose").Invoke($inputObject, $null)
}
}
}

Оценок нет

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Похожие записи

Powered by BlogEngine.NET 1.3.1.0
Theme by Mads Kristensen

Ñåðãåé Òåìíûõ

Ìîäóëÿòîð


Calendar

<<  Апрель 2018  >>
повтсрчепясуво
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

View posts in large calendar

Страницы

    Последние комментарии

    Категории

    None


    Disclaimer

    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2018

    Sign in