Thursday, May 08, 2008

この記事は

SQL*PLUSもどきを作る その1(PowerShell Tips)
SQL*PLUSもどきを作る その1の説明(PowerShell Tips)
SQL*PLUSもどきを作る その2(PowerShell Tips)
SQL*PLUSもどきを作る その3(PowerShell Tips) 
SQL*PLUSもどきを作る その4(PowerShell Tips) 
SQL*PLUSもどきを作る その5 改訂版(PowerShell Tips)
SQL*PLUSもどきを作る その6(PowerShell Tips)

の続きです。

今回は切断処理を行うDisconnect関数を作成しました。

とはいってもSQL*PLUSもどき(関数PSOracle)は非接続型を採用しているため、実際には切断処理は必要ありません。

しかし、PSOracle関数を実行して、動的に登録された関数やグローバル変数をいつまでも残しておくのは気持ち悪いため、Disconnect関数を作成し、それらを削除するようにしてみました。

#=========================================================================================
# Disconnect: 切断処理の実施
#
# UPDATE: 2008-05-08
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#=========================================================================================
function global:Disconnect
{
    $ret = Read-Host ($OracleConnInfo + " から切断します。よろしいですか?( Y/N )")
    if ( $ret -eq "N" )
    {
        return
    }
    
    #PSOracle用に登録したグローバル変数を削除
    Remove-Item variable:OracleDataSource
    Remove-Item variable:OracleUserID
    Remove-Item variable:OraclePassword
    Remove-Item variable:OracleConnInfo

    #Oracle専用スクリプトファイルを格納しているディレクトリの設定
    $OracleScriptPath = "$([Environment]::GetFolderPath(`"MyDocuments`"))\WindowsPowerShell\Oracle"
    
    #存在するパス?
    if ( Test-Path $OracleScriptPath )
    {
        #PSOracle用に登録された関数の削除(長いので折り返しています。実際には1行        Get-ChildItem $OracleScriptPath -Include "*.ps1" -Recurse -Force | 
% { Remove-Item ("function:" + [System.IO.Path]::GetFileNameWithoutExtension($_.Fullname)) }
    }
    else
    {
        #実行可能なスクリプトがない場合は処理終了
        return
    }
}

使用方法ですが下記のように関数をコールするだけです。

PS > Disconnect

これで、PSOracle関連の関数は使用することができなくなります。

開発ポイント

変数と関数の削除

変数や関数を削除するにはRemove-Itemコマンドレットを使用します。

変数を削除するには Remove-Item Variable:変数名 とします。

たとえば $OracleDataSouurceを削除する場合は変数の$を取って

PS > Remove-Item variable:OracleDataSource

とします。

関数の削除も同様にして、Remove-Item function:関数名 とします。

PSOracleによって登録された関数のリストをどうやって取得するか悩みました。

登録した関数のリストを取得するいいアイディアが浮かばなかったので、邪道だとは思いましたが、ファイル名=関数名.ps1 としているので、ファイル名から拡張子を取ったものをRemove-Itemコマンドレットで削除するように記述し、関数の削除を行っています。

Thursday, May 08, 2008 4:32:32 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: