HIRO's.NET Blog

PowerShellが好き

目次

Blog 利用状況

ニュース

あわせて読みたい

書庫

日記カテゴリ

リンク

データを取得してXMLファイルへ保存する(Oracle) (Windows PowerShell Tips)

Windows PowerShellからOracleへアクセスし、取得したデータをXMLファイルへ落とし込む関数を作ってみました。

Export-OracleDataXml.ps1

#===============================================================================
# Export-OracleDataXml: データを取得してXMLファイルへ保存する(Oracle)
#
# 使用例
#   PS > Export-OracleDataXml
#   PS > DataSource: データソース名
#   PS > User ID: ユーザーID
#   PS > Password: パスワード
#   PS > Query String: クエリ文字列
#   PS > Save Path: 保存先を指定
#
# copyright HIRO's.NET(http://hiro.wankuma.com/)
#===============================================================================
function global:Export-OracleDataXml
{
  #===== 必要情報をユーザーから取得する =====
  $DataSource = Read-Host "Data Source"
  $UserID = Read-Host "User ID"
  $Password = Read-Host "Password" -assecurestring
  $QueryString = Read-Host "Query String"
  $SavePath = Read-Host "Save Path"
  
  #保存先パスに"\"が含まれていない場合(つまりファイル名のみが指定されていた場合)は
  #絶対パスにする(ファイル名のみが指定された場合、カレントディレクトリに保存するため)
  if ( $SavePath.IndexOf("\") -eq -1 )
  {
    $SavePath = $(Join-Path $(Get-Location).Path $SavePath)
  }
  
  #===== newpopsさんのblog参照 http://d.hatena.ne.jp/newpops/20050923/p1 =====
  #SecureStringからパスワード文字列を取得する
  $ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
  $pass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)
  
  #===== Oracleからのデータ取得とファイルへの保存 =====
  [reflection.assembly]::LoadWithPartialName("System.Data.OracleClient")
  $ConnectionString = "Data Source=" + $DataSource + ";User ID=" + $UserID + ";Password=" + $Pass + ";Integrated Security=no;"
  $OraConn = New-Object System.Data.OracleClient.OracleConnection($ConnectionString)
  $dtSet = New-Object System.Data.DataSet
  $OraDa = New-Object System.Data.OracleClient.OracleDataAdapter($QueryString, $OraConn)
  $OraDa.Fill($dtSet)
  $dtSet.WriteXml($SavePath)
}

最初に使用方法ですがコンソールウィンドウに

PS C:\Work> Export-OracleDataXml

と入力します。

つぎに、接続先、ユーザー名、パスワード、データを取得するためのselect文、取得データの保存先を聞かれるので順番に入力していきます。

下記はOracleのサンプルであるscott/tigerのemp表データをすべて取得し、結果をC:\Work\emp.xmlへ保存する例です

PS C:\Work> Data Source: YourServer
PS C:\Work> User ID: scott
PS C:\Work> Password: *****
PS C:\Work> Query String: select * from emp
PS C:\Work> SavePath: C:\Work\emp.xml

 

===== ポイント =====

今回の関数は対話式にしてみました。

1)Read-Hostコマンドレットを使用して、ユーザーからの入力を取得して、変数へ代入しています。

 Read-Hostコマンドレットは

 $a = Read-Host "メッセージ"

 のように使用します。

 この場合は、コンソールに "メッセージ:" と表示され

 ユーザーが[Enter]を押すまでの文字列を$aに代入します。

2)SecureStringでパスワードを*で表示する

 Read-Hostコマンドレットのパラメータに -assecurestring というのがあるんですが、このパラメータを使用すると、ユーザーが入力する文字列が * で表示されます。

 -assecurestringを使用すると、変数の型がSystem.Security.SecureStringになります。

  System.Security.SecureString型のデータはこのままでは使用できません。

 このままでif文などで比較しても正しい結果は得られないので、解読してString型に変換する必要があります。

 newpopsさんのblogにその方法が書かれてありましたので参考にさせていただきました。(http://d.hatena.ne.jp/newpops/20050923/p1

3)System.Data.OracleClientの読み込み

 PowerShell起動時はSystem.Data.OracleClientは読み込まれていません。

 [reflection.assembly]::LoadWithPartialName で System.Data.OracleClientをロードし、OracleClientクラスを使用可能にしています。

4) DataSetを作成する

 取得したデータをXmlへ出力するのに、DataSetのWriteXmlメソッドを使用することにしました。

 New-Obejctコマンドレットを使用してDatSetを作成しています。

5)DataAdapterを作成する

 これもNew-Objetctコマンドレットを使用しています。

6)XMLへ出力する

 4)で述べたとおり、DataSetのWriteXmlメソッドを使用してXMLファイルへの出力を行います。

 



投稿日時 : 2008年1月15日 17:34

コメントを追加

# pc to tv 2013/03/24 7:41 http://ipanks.com/tv-on-a-pc/

I found your weblog website on google and test a couple of of your early posts. Continue to keep up the very good operate. I simply extra up your RSS feed to my MSN News Reader. Looking for forward to studying extra from you later on!…

# stromectol tablets for humans http://stromectolabc.com/
stromectol order online 2022/02/08 2:49 Busjdhj

stromectol tablets for humans http://stromectolabc.com/
stromectol order online

# ivermectin stromectol http://stromectolabc.com/
buy ivermectin cream 2022/02/08 9:37 Busjdhj

ivermectin stromectol http://stromectolabc.com/
buy ivermectin cream

# oral ivermectin cost http://stromectolabc.com/
ivermectin 50 2022/02/08 16:40 Busjdhj

oral ivermectin cost http://stromectolabc.com/
ivermectin 50

タイトル
名前
URL
コメント