如何在powershell中实现using语句?

Ras*_*kov 17 c# powershell

如何在power shell中使用?

这是C#中的工作示例

using (var conn = new SqlConnection(connString))
{
    Console.WriteLine("InUsing");
}
Run Code Online (Sandbox Code Playgroud)

我在Powershell中需要相同(不工作):

Using-Object ($conn = New-Object System.Data.SqlClient.SqlConnection($connString)) {

    Write-Warning -Message 'In Using';          
}
Run Code Online (Sandbox Code Playgroud)

它不使用以下工作:

$conn = New-Object System.Data.SqlClient.SqlConnection($connString)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Ber*_*rau 25

这是一个解决方案:

function Using-Object
{
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [AllowEmptyString()]
        [AllowEmptyCollection()]
        [AllowNull()]
        [Object]
        $InputObject,

        [Parameter(Mandatory = $true)]
        [scriptblock]
        $ScriptBlock
    )

    try
    {
        . $ScriptBlock
    }
    finally
    {
        if ($null -ne $InputObject -and $InputObject -is [System.IDisposable])
        {
            $InputObject.Dispose()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这个解决方案在这里,对我来说工作.

但它基本上是在finally块中实现dispose.

  • 默认情况下,$ErrorActionPreference 设置为 Continue,然后在 try catch 中,您将只捕获严重错误。(您实际上只捕获停止当前流的错误)如果您使用 -erroraction,您可以使用命令行开关覆盖错误操作。但是我在这里犯了一个错误,您没有使用 catch 块,因此您不需要调整错误操作首选项。我会编辑答案! (2认同)