2017-02-08 1 views
7

In Power Shellを使用してどのように書き込むことができますか? powershellでのusingステートメントの実装方法は?

この

は(動作しない)私はPowerShellで同じ必要

using (var conn = new SqlConnection(connString)) 
{ 
    Console.WriteLine("InUsing"); 
} 

C#での例を働いている:

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

    Write-Warning -Message 'In Using';   
} 

それが働いている使用せず:

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

をいただき、ありがとうございます助けて。ここで

+0

*動作していません*>問題は何ですか? –

+0

'System.Data.SqlClient'を削除しますか? – DaImTo

+0

usingステートメントmake suresすべてのリソースは、SqlConnectionオブジェクトのDisposeを呼び出すことで解放されます。したがって、代わりにPowerShellのClose()でDispose()を呼び出すことができます。 – Viru

答えて

10

は、ソリューションです:

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() 
     } 
    } 
} 

私は、このソリューションHereを発見し、私のためにそれが働きました。

しかし、基本的にfinallyブロック内にdisposeを実装しています。

+0

ありがとうございます。 $ ErrorActionPreferenceの意味を教えてください。 – Raskolnikov

+1

デフォルトでは、$ ErrorActionPreferenceはContinueに設定されていますが、try catchでは重大なエラーだけがトラップされます。 (実際には現在のフローを停止させるエラーだけをトラップする) -erroractionを使用すると、コマンドレットでエラーアクションを無効にすることができます。 ここで間違いを犯しました。キャッチブロックを使用しないので、エラーアクションの設定を調整する必要はありません。 私は答えを編集します! –

関連する問題