WindowsPowerShellについてのメモ#1

プログミング

最近使う機会が多いのでメモしておく。

google検索しても一発で引っ掛けづらい物も含めてメモ。

たまに使うけど微妙に忘れてしまう事

数値や文字列から、書式を指定して日付型に変換する方法

$d = [DateTime]::ParseExact($targDate, "yyyyMMdd", $null )

yyyyMMddの所の書式を弄る事で色々対応する。
変換に失敗すると例外が発生する為注意は必要だけれど、わざわざスラッシュ編集して文字列を変換するよりは

PowerShellからOracleのSQL-Plusへファイルを渡して実行する

SQLPLUS -s USER/PASS@CON `@query.sql
SELECT * FROM USER_TABLES;
SELECT * FROM USER_INDEXES;

こんな感じで複数のSQL文を一気に流すことが可能。パッチクエリをsqlファイルに書いておいてゴッソリ流すとかに。
「`」(グレイヴ・アクセント または バッククォート)が「@」の前に必要な事が注意点。
忘れがち。

ファイル検知で待ち続ける

指定したファイルが存在する、または存在しない間は後続処理に流れないように待ち続ける。

function Wait4DetectingTheFile
{
	param(
		[string]$target,
		[string]$waitType
	)
	$exists = $waitType -eq ''

	while( (-not (Test-Path($target))) -eq $exists )
	{
		write-host "Waiting...[$target]"
		sleep 3
	}
}

### 処理1

### 処理を待ちたい場所でコールする
Wait4DetectingTheFile "C:\tmp\wait.dat"

### 処理2

処理1と処理2の間で、全くの別プロセスからのファイル受信を検知してから後続処理へ制御を流す時などに使う簡易制御。
第一引数に、ファイル検知対象のフルパスを指定する。
第二引数を省略すると、ファイルが未存在の場合は処理を待ち続ける。
第二引数になんでも良いので設定すると(e.g. Wait4DetectingTheFile “C:\tmp\wait.dat” 1)ファイルが存在する間処理を待ち続ける。手抜き。
sleepの時間やwrite-host等については適時調整する。

まれにかなり便利。

PowerShellからOracleDataBaseをバックアップ(expdp)

$today=get-date -format "yyyyMMdd_hhmmss"
expdp USER/PASS@LOCAL directory=USER_DIR dumpfile=$today.dmp logfile=$today'_expdp.log schemas='SRC'

switch ( $LastExitcode )
{
	0
	{
		# エラー無しで正常終了
	}
	5
	{
		# エクスポートは成功したが、一部エラーが発生
		# ログを設定していればログファイルにエラー内容は出力される
	}
	1
	{
		# 致命的なエラーが発生し、エクスポート失敗
		# ログを設定していればログファイルにエラー内容は出力される
		# ただし、ログファイルが開かれるより前にエラーとなった場合はログ出力はされない
	}
	default
	{
		# expdp の戻り値以外のコードが帰ってきている。本来ありあえない。
	}
}

expdpについては省略。Oracleのデータポンプである。
一点だけ注意しておくと、ディレクトリオブジェクトの実際のパスに2バイト文字が含まれていると、致命的なエラーとして戻り値5が返される。
謎エラーとしてハマったので記載しておく。
戻り値は「$LastExitcode」に入ってくるので適当に事後処理を書くこと。


ちょっと少ないけどココまで。
メモね。メモ。

タイトルとURLをコピーしました