fc2ブログ

社内SEの徒然なる日記

Oracleでテーブルに列を追加してみた

テーブルへの列の追加

列の追加は、ALTER TABLE で行います。
下記は、TRSPテーブルに新しい列「CDDLC」を作成するサンプルです。

/*
* TRSPテーブルへのCDDLC列の追加
* 省略時は"000"、必須入力
*/

ALTER TABLE TRSP ADD (CDDLC VARCHAR2(3) DEFAULT '000' NOT NULL);

書式は見ての通り、『 ADD ( 追加する列名 型 省略時の値 制約 )』 です。

次は、複数の列を追加するサンプルです。

ALTER TABLE TPRM ADD
(
PRCCTLFG VARCHAR2(001) DEFAULT '0' NOT NULL
,STTFG VARCHAR2(001) DEFAULT '0' NOT NULL
,STRDATE DATE DEFAULT SYSDATE
,MSGID VARCHAR2(015)
,URL VARCHAR2(200)
);


書式で言えば 「 ALTER TABLE テーブル名 ADD (追加する列1, 追加する列2, .....) 」って感じかな?
カンマの場所が次行の先頭なのは、単なる私の癖です。

スポンサードリンク

PageTop

大福堂でわらび餅とchocoわらびを食べてみた

札幌の南郷通りに一久大福堂っていう和菓子屋さんがあります。
店名の通り、メインは大福で、あと串団子なんかも置いてます。

それはそれで美味しいのですが、少し前に、実家に帰省する時の手みやげとして「わらび餅」と「チョコレートわらび」なる商品を購入しました。

いや、これが思ってたよりずっと美味しくてビックリです。

わらび餅


商品の外観はこんな感じ。
IMG_0568.jpg

包装をとってみます。
わらび餅にきな粉をかけているようですね。
IMG_0570.jpg

さらに、黒あん(別売り)を掛けてみます。
このまま食べても美味しいのですが、冷蔵庫に入れて少し待つとあんがわらび餅に溶け込んでさらに美味しくなります。
IMG_0571.jpg

いやぁ、恥ずかしながら、わらび餅ってスーパーで売ってるようなのしか食べた事なかったんですけど、ちゃんとしたお店で買うと美味しい物なんですね。
そんなに高くないので、和菓子好きの方にはおすすめです。

chocoわらび


そして、次は「チョコレートわらび」なる商品です。
こちらは、上のやつのついでに買ったんですけど、なかなか面白かったです。
IMG_0557.jpg

蓋を取ってみます。
粉チョコレートがかかっていて、これだけだと、わらび餅には見えないですね。
IMG_0558.jpg

とりあえず、包丁で真っ二つ。
どうやら、わらび餅の中にチョコレートを仕込んでいるようです。
IMG_0560.jpg

食べてみると、とろけるような食感で、わらび餅とは思えません。
「とろけるチョコ」とか言われたら、信じてしまいそうです。
甘さも控えめで、飽きがきづらいです。

季節商品のようなので、時期が合わなければ手に入らないですが、他の商品も美味しいのでオススメです。

一久大福堂のホームページ:http://www.daifukudo.co.jp/

...ちなみに、店名は「いちきゅうだいふくどう」と呼ぶのですが、この記事を書くまで「かずひさろくふくどう」だと信じていました。
だって、macのことえり(日本語入力ソフト)で「いちきゅう」じゃ変換してくれないし、ポイントカードの大の字が六にしか見えないんだもん。

スポンサードリンク

PageTop

powerShellから他の処理を実行して見た

powerShellから、他のプログラムを起動してみます。
できれば、powerShellで完結させたいんですけど、出来ないことも結構ありますからね。

■ 投捨て型

先頭に&(アンパサント)を付けてやります。
下記は、ttpmacro.exeをパラメータwork.ttlを渡して起動しています。


& "C:\Program Files (x86)\teraterm\ttpmacro.exe" "C:\work.ttl"


この方法の場合、単純に処理を実行するだけです。
powerShell側の処理は続行されます。


■ 終了まで待機する

後続の処理で、外部プログラムの実行結果を使用したい場合には、Start-Processコマンドレットを使用します。
-Waitパラメータを指定すると、処理終了まで待機します。
-ArgumentListでパラメータを指定することもできます。


Start-Process -FilePath "C:\Program Files (x86)\teraterm\ttpmacro.exe" -ArgumentList "C:\work.ttl" -Wait


やってることは同じで、ttpmacro.exeをパラメータwork.ttlを渡して起動しています。
-Waitパラメータによって、ttpmacro.exeが終了するまでpowerShellは待機します。

■ 待機中に別のことをしたい

「単純に待つのはいや。まってる間に別の処理をしたい」というなら-PassThruをパラメータを使用します。
-PassThruパラメータを設定すると、戻値を取得することが出来ます。
この戻値を使用して、Wait-Processコマンドレットで処理終了まで待機します。


Write-Output "teraTerm開始します" | out-file "C:\work.log" Default
$teraWait = Start-Process -FilePath "C:\Program Files (x86)\teraterm\ttpmacro.exe" -ArgumentList "C:\work.ttl" -PassThru
Write-Output "teraTerm実行中" | out-file "C:\work.log" Default -append
Wait-Process -Id ($teraWait.id)
Write-Output "teraTerm終了しました" | out-file "C:\work.log" Default -append


ttpmacro.exeの実行直後に「teraTerm実行中」とログに出力し、そのままteraTerm側の処理が終了するまで待機します。
処理が終了したら、「teraTerm終了しました」とログに出力しています。

スポンサードリンク

PageTop

powerShellでPingをTeraTerm経由で打ってみた

やること

死活監視のために、あるサーバ(運用サーバ)から複数の機器へPing(Test-Connectionコマンドレットを使用)を実行していたのですが、なぜか稼働中なのにPingが通らない(タイムアウトになる)サーバがありました。
ん?と思い調べてみたところ、ルータ側でPingを発行している運用サーバがあるセグメントからの通信を通らないようにしていました。

確かに、通常は運用サーバがあるセグメントからアクセスする必要はないサーバなので、セキュリティを考えると止めるのが正解なので、単純に通るようにするわけにもいきません(とうかルータの設定変更が面倒)。
どうしようか悩んでいたんですが、ふと閃きました。

対象の機器に通信が通るサーバーにTeraTermで接続、そこからPingを実行して、そのログを解析すればいいんじゃね?

   ※ 後で考えると、他にも解決策はいろいろあるとは思うのですけどねぇ...

要するに、別のサーバを踏み台にしてやろうってことですね。
まぁ、やってみましょう。

作ってみた

とりあえず、こんな感じですかね。

# teraTerm用のマクロファイル
[System.String]$teraTTLFile = 'D:\AAA\teraTarmMacroTTL.ttl'

# teraTerm用のログファイル
[System.String]$teraLog = 'D:\AAA\teraTarmMacroLog.log'

# Tera Term 用マクロ実行プログラム
[System.String]$teraMacroExe = "C:\Program Files\teraterm\ttpmacro.exe"

# teraTerm用のマクロファイルの出力
Write-Output ("connect `' /I 10.110.12.30:23 /nossh /T=1`'") | out-file $teraTTLFile Default
Write-Output "wait `'login:`'" | out-file $teraTTLFile Default -append
Write-Output "sendln `'root`'" | out-file $teraTTLFile Default -append
Write-Output "wait `'Password:`'" | out-file $teraTTLFile Default -append
Write-Output "sendln `'infrateam`'" | out-file $teraTTLFile Default -append
Write-Output "wait `'#`'" | out-file $teraTTLFile Default -append
Write-Output ("logopen `'" + $teraLog + "`' 0 0") | out-file $teraTTLFile Default -append
Write-Output "sendln `'ping 10.110.11.60`'" | out-file $teraTTLFile Default -append
Write-Output "wait `'#`'" | out-file $teraTTLFile Default -append
Write-Output "logclose" | out-file $teraTTLFile Default -append
Write-Output "sendln `'exit`'" | out-file $teraTTLFile Default -append

# teratermでPingを実行して、結果をログ出力します。
Start-Process -FilePath $teraMacroExe -ArgumentList $teraTTLFile -Wait

# teraTarmのログを取得して、文字列検索(Pingの実行結果)を行います。
$teraLogGrepAlive = @(Get-Content $teraLog | Select-String "10.110.11.60 is alive" -quiet)

# 文字が見つかった場合
if ($teraLogGrepAlive -eq $True) {
Write-Host "10.11.11.1 Ping成功"
# 文字が見つからなかった場合
} else {
Write-Host "10.11.11.1 Ping失敗"
}

出力パスとかは長いので変数にしています。
teraTermマクロファイルをpowerShellから作成しているのは、処理が終わった後に削除したいからです。
上記のサンプルには、削除処理は付けてないですけどね。

teraTarmMacroTTL.ttl


実際に作成された「teraTarmMacroTTL.ttl」はこちら。
接続先はunix(Solaris)。
10.110.12.30にポート23で接続して、10.110.11.60にpingを実行して終了させています。
途中にlogopen を付けることで、pingの実行結果を「teraTarmMacroLog.log」に吐きだします。

connect ' /I 10.110.12.30:23 /nossh /T=1'
wait 'login:'
sendln 'root'
wait 'Password:'
sendln 'infrateam'
wait '#'
logopen 'D:\AAA\teraTarmMacroLog.log' 0 0
sendln 'ping 10.110.11.60'
wait '#'
logclose
sendln 'exit'


connectに /I オプションを付けるとこで、teraTarmの画面が表示されなくなります。
手動で実行するなら、teraTarmの画面が表示された方が良いでしょうが、タスクとかでスケジュール実行させるなら、表示させない方が無難です。
ちなみに、私の場合「Systemwalker Operation Manager」というソフトで実行させたかったのですが、そのためには /I を付けないと動作してくれませんでした。

実は、teraTarmのマニュアルからこのオプションを発見できなくて、google先生のお力で探し出しました。
teraTarmのマニュアルのどこに書いてるんだろ?

Pingの実行

上記で作成されるマクロファイルを引数として、Start-ProcessコマンドレットでteraTarmを実行します。
-Waitを付けて、teraTarmマクロが終了するまで待機させます。
上手く行けば「teraTarmMacroLog.log」にPingの実行結果が書き込まれるはずです。

ログの解析

Pingが成功していたら、ログには「10.110.11.60 is alive」という文字が出力されるはずです。
(もしかしたら、環境によって出力内容は違うかも)

そこで、Get-Contentコマンドレットを使用して、ログ内に「10.110.11.60 is alive」という文字が存在するか判定します。
まぁ、要するにgrepですよね。

後は、上記の結果を判定して成功時と失敗時のそれぞれの処理を書いてやるだけです。
サンプルでは画面にメッセージを出すだけですけど、失敗時はメールを送信するとか、いろいろ楽しめると思います。

感想


いやぁ。意外となんとかなりましたね。
今回はTeraTarmとPingの連携でしたが、他にも応用できそうですね。

スポンサードリンク

PageTop

powerShellからpowerShellを読み込んでみた

本職がJavaとかCOBOLを使うプログラマーなので、共通で使う変数とか関数とかを外部のファイルに保存しておいて、実行するpowerShellはそれを読み込んで使用する(COBOLでいうCOPY句)ということがやりたくなりました。

■ とりあえず読み込んでみる

先頭に . を付ければ読み込んでくれるようです。
下記では、commonShell.ps1というシェルを読み込んでいます。


# 共通の変数、関数を読み込みます。
. 'D:\\script\commonShell.ps1'


■ 相対参照で読み込んでみる

共通のpowerShellの置き場が、実行中のpowerShellと同じ、あるいは近くにある時には「実行中のスクリプトのパス」を取得してやります。

まず、スクリプトのパスを「 $myInvocation.MyCommand.path 」で取得します。
さらに、Split-Pathコマンドレットを使用してパス部分を取得します。
んで、その結果を文字列結合してやれば...


# 共通の変数、関数を読み込みます。
. (@(Split-Path $myInvocation.MyCommand.path) + '\commonShell.ps1')


って感じでですかね?


■ 最後に一言

「$myInvocation」って変数には、コマンド呼び出しに関する様々な情報が格納されているらしいのですが、はっきり言ってさっぱり分りません。
この他に私が知ってるのは「 $myInvocation.MyCommand.name 」とすると、スクリプトの名前を取得できるってだけです。

一昔前は「自分が理解できないものを使うな」とよく言われたものですが、現在では複雑すぎて理解しきれずに使っているモノが多くなってきましたね。
実際問題、細かく追っていくと時間が掛かりすぎて納期に間に合わないですし、しょうがないですかね。

スポンサードリンク

PageTop

powerShellでディスク容量を調べてみた

■ ディスク容量

「ディスクの空き容量が閾値(しきいち)をより少ない場合は、処理を停止する」って処理が欲しくなりました。

これは、以前に調べた事がありますね。たしか、Oracleのバックアップ(エクスポートのダンプファイル)を実行する時に、必要なディスク容量が確保できているのかを知りたかったんでしたっけね。

ドライブの情報を取得するにはGet-PSDriveコマンドレットを使用すれば良いようです。

■ 使用量を取得する

使用量は、(Get-PSDrive ドライブ名).Used で取得できます。
下記は、Dドライブの空き容量を取得しています。

PS C:\script> (Get-PSDrive D).Used
26913046528


結果は、Byteで戻ってきます。
MBとかGBにしたいなら、適当に編集してあげて下さい。

■ 空き容量を取得する

空き容量は、(Get-PSDrive ドライブ名).Free で取得できます。
下記は、Dドライブの空き容量が50GB以下の場合に強制的にエラーを発生させるサンプルです。

# 50GB以下の場合は処理を終了する。
if ((Get-PSDrive D).Free -lt 53687091200 ) {
  throw 'ディスク容量不足のため、処理を停止します。'
}


投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

自己紹介

■自己紹介

初めまして、私はハリコフといいます。
とある会社のシステム部門に勤務しています。いわゆる社内SEってやつですね。
年は、そうですね。2012年現在で、社歴が10年を超えていますね。ここから察して下さい。
最近は、頭髪が薄くなってきたのが気になって、高価な育毛剤やマッサージを試しています(案外効果があるようなので、喜んでます)。

写真は、恥ずかしいので勘弁して下さい。
人に見せる程、よい顔じゃないので...。

投稿記事はこちらからどうぞ : 投稿記事一覧


■ブログを始めた目的

ある日唐突に「システム部門に勤務してるのに、ブログとかホームページとかの作成経験がないってどうなの?」とか思って試してみました。
実験的な意味合いが強かったので、三日坊主になる予定だったんですけど、やってみると面白くて続いてしまいました。なので、この自己紹介や記事一覧も結構後になってから作ってます。
元々の目的がこんなのなので、投稿内容はかなり適当です。こった事をする予定はありません。

■出来る事

仕事の関係では広く浅くいろいろやってます。
使える言語(簡易言語も含む)は「Java、cobol、javaScript、powerShell、bat、sql、VBA」他にもアセンブラやC言語も書いた事はあるんですけど、遊びレベルです。
特技は、SQLチューニング。これは、当社の基幹システム(スクラッチ開発したやつ)で度々発生した遅延障害に対応するため必死にOracleの勉強をした結果、いつのまにか特技になってました。今では、会社における私の存在価値の半分以上がこの特技によるものです。どの程度かっていうと、データベーススペシャリストっていう試験を受けたら、特に勉強しなくてもあっさり合格出来た位です。
まぁ、資格試験なんてのは実践で使えるものではないので、参考程度ですけどね。

私人としては、グッピーの育成、サイクリング、写真撮影を趣味としています。
最近では、このブログ自体が趣味になってきました。

スポンサードリンク

PageTop

歯ぐきの水ぶくれの治療が大事になりました

2ヶ月位前から、歯ぐきに結構大きな水ぶくれが出来ました。
こんな感じ。気持ちの悪い写真でごめんなさい。
IMG_0576_convert_20120825145138.jpg

放っておくと勝手に潰れて、しばらくするとまた膨らみます。
一度、自分で思いっきり引っ掻いて潰して見たりもしたんですが(この時は、流石に流血した)、しばらくすると同じ症状になる。
別に痛くも痒くもないので、最初の内は「いつもの口内炎かな?」とか余裕で構えていたんですけど、いつまでたっても治らないのでちょっと焦ってきました(変な病気じゃないだろうな)。
そこで知人や主治医(高血圧の治療中)、google先生とかに相談してみていろいろ試してみました。

試したのはこんな感じ。
IMG_0589_convert_20120825145204.jpg

ビタミン不足が原因ではないかと疑い、近所のドラッグストア(ツルハドラッグ)でビタミン剤を買い、口内炎・歯槽膿漏の塗り薬と使ってみたりしたんですが、一向に変化が無い。
google先生によると、似た症状として「唾液腺が詰まって起きる事がある」対策は「切り取るかレーザーで焼く」という情報があったので、これを元に病院を探してみることにしました。
検索条件を「札幌 白石区 レーザー」でググってみると、北都歯科クリニックという病院でレーザー治療を行っているらしい。診療内容も口腔外科と書いているし、予約して行ってみました。

  リンク:北都歯科クリニック

予約したのが前日だったので、結構待たされるかと思ったんですが、そう待たずに診察室に通されました。
そこから看護師(なのかな?)の女性の方が問診と検査を実施。
この検査、頼んだ場所だけかと思ったら、全部の歯と歯ぐきの状態まで確認してました。最近の歯医者さんは、どこもこんな感じなんですかね?
肝心の水ぶくれの箇所ではレントゲンを撮影。この時点では「水ぶくれでレントゲンとるの?」とか思っていたんですよね。

んで、少し待ってたら先生が登場。そして、衝撃の原因が......。
もう20年近く前に、ひどい虫歯になって差し歯にしていたんですが、どうやらこれが歯ぐきの中でポッキリと折れているらしいんです。そして折れた部分が細菌感染して水ぶくれになっているということです。
これは、全くの想定外(そもそも差し歯ということすらレントゲンを見るまで忘れていた)。
思わず「うぐぉ」とか呻いてしまいました。

頭を抱えながら、先生に治療方針を伺うとこんな回答になりました。
 1. 中折れしている差し歯を抜く
 2. 1の抜いた後の穴を埋める
 3. 1の歯の両隣の歯を削り、3連の差し歯を作成。

健康な両隣の歯を支え用の差し歯にして、駄目な歯を支えるようにするってことですかね?
...簡単に考えていたのに、なんか大事になってきました。
とりあえず、今日の所は歯の方を取ってもらって終わり、次回は、歯を削って(痛いのやだなぁ)仮歯にするらしいです。
さて、どうなることやら。

次回:歯ぐきの水ぶくれの治療が大事になりました No2

■ 後書き

最後に、この北都歯科クリニックの感想を書いときます。
まず、建物は外観も内装も小ぎれいです。診察台がパーティションで区切られていた、他の患者さんの状況は見えません(待合室は共同なので、秘密制ってわけじゃないです)。
基本は予約制のようですが、急診も対応してくれるようですね。少なくても前日予約でねじ込むことは出来ましたし。スタッフも自分があった人たちは礼儀正しかったです。
技術については、まだ治療前なので、はっきりと分かりませんね。ただしかなり丁寧に診察してくれます。今回も、仮歯を作るのに歯の型を取ったのですが、なぜか上の歯だけでなく下の歯の型も取っていましたしね。
支払いはクレジットカード可(ただし、一回払いのみ)です。

総評としては、かなりの好評価ですね。
次回の診察が楽しみです。


スポンサードリンク

PageTop

目次

投稿した記事の目次です。
最初は三日坊主になると信じてたので作らなかったんですけど、意外と続いたので作成しました。
...結構大変でした。なんにでも言える事ですけど、最初が適当だと後々まで祟りますね。

【2013年11月18日】
ブログ上に目次を作るのも変なので、ホームページを作って移動しました。
下記のリンクから参照できます。

社内SEの徒然なる日記(目次)


--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道路を走ってみた(芸術の森〜滝野すずらん丘陵公園)

本当は、違う所に行くつもりだったんですけど、前回(2012年8月17日)の雨による撤退が悔しかったので、再度チャレンジする事にしました。

んで、今日の天気はこんな感じ。とりあえず雨は降らなさそう。
IMG_0420_convert_20120824204743.jpg

yahooの天気予報でも1日中曇りで、降水確率は0%。
「docomo&yahooよ、お前を信じていいのか?」

まぁ、行ってみましょう。
サクッと芸術の森に到着。今日もレストランでお食事です。

スープカレーです。
IMG_0422_convert_20120824205328.jpg

カボチャの蓋をあけてみると、中にスープが入ってます。
IMG_0424_convert_20120824205411.jpg

カボチャの中のスープがカレーで、外のスープはなんか別のスープ(鶏ガラあたりか?)。混ぜあわせると、ちょうどいい味になります。
結構美味しかったんですけど、量が多い(写真では分かりにくいかもしれませんけど)。
結局、カボチャを半分程残してしまいました。

さて、一休みを終えて再び出発。
前回撤退した滝野霊園を超えると、下り坂になってきました。
しばらく進むと、標識が見えてきます。
IMG_0432_convert_20120824210047.jpg

右手に行くと「滝野の森口」なるところに行くらしいです。さて、真っすぐか右か?
とりあえず、右に入ってみたんですけど直ぐに自転車道がなくなりました。これ以上は事故の危険があるので(というか、あきらかに道を間違えている)もとの道に戻って真っすぐ進みます。

途中、階段付きの坂とか専用道路みたいな(さびれてるけど)のがあるので、道は大丈夫な模様。
そして......
IMG_0441_convert_20120824210112.jpg

キター!
念願の「滝野すずらん丘陵公園」に到着です。やったね。
(余談ですが、丘陵を”きょうりょう”と読むと勘違いしてて、「何で変換できないんだよ!」とか声を荒げていたりします。正解は”きゅうりょう”ですよね。)

時間がまだある(撤退予定は3時で今は12時45分)ので、見学して行く事にしました。
とりあえず、案内板とか見てみると結構立派な公園であることがわかります。
なんか、キャンプとか出来るし、子供を遊ばせられる川とか、釣り堀、ジンギスカンと一通りの施設が揃ってます。なんか実家(滝川)の方にある砂川の”子供の国”とかを思い出しますね。

この時点の気温は、22度(温度計付きの時計があちこちにある)位だったんですけど、このあたりから急に晴天になってきました。天気予報は今日も外れたというべきですね(まぁ雨よりは良いけど)。
なんか、滝が4つ位あるらしいので見学してみます。

公園の右手の道を進んで行くと、左右への分かれ道にぶつかります。
左手が「不老の滝」右手が「アシリベツの滝」というそうです。
まずは、右手に行きます。ちょっといくと、自転車進入禁止と標識があるので、徒歩で進みます。
(距離的にはかなり短いです)。
これが、「アシリベツの滝」です。
IMG_0468_convert_20120824212006.jpg

遠景から撮ってるので分かりづらいでしょうが、かなり立派な滝です。
これは一見の価値がありますよ(近景の見やすい写真もあるんですけど、自分の目で見てほしいなぁと)。
なんか、心が洗われる感じです。実際、木々の影と滝の影響でかなり涼しいですし。
ちなみに、10月の9:30〜10:00の晴れたには虹が見えるらしいです。またこようかな?

といい気分で駐輪場まで戻ると、私の自転車が封鎖されていました。
中央の奥にあるのが私の自転車です。他にスペースはあるのに、わざわざ2台がかりで封鎖され、しかも1台にはにもつもあるので、どかそうとすると自転車が重さで倒れ込んでくる。
IMG_0474_convert_20120824212031.jpg

頭きてケリでも入れようかとも思ったんですが、私もいい年になってきてるので自重しました。まぁ我慢できなかったのでここにのせてるんですけどね。

気を取り直して、今度は左手の「不老の滝」に向かいます。こちらは最初から徒歩になります。
これが「不老の滝」?「アシリベツの滝」と比べると異様に小さい。
なんかがっかりです。まぁここに来るまでの道で、人っ子一人出会わなかったので嫌な予感はしていたんですけどね。
IMG_0482_convert_20120824212059.jpg

さらに気を取り直して、道を戻り「白帆の滝」なる場所を目指します。
太陽がさんさんと降り注ぐなか、えっちらおっちら坂を上り到着。
IMG_0495_convert_20120824212124.jpg

...........え?滝?道、間違えた?
でも一本道だったし、これなんだよなぁ。どう見ても岩から水が漏れてるだけにしか見えないのだが。

さて、入り口にあった案内図によると「鱒見の滝」(ますみのたき)なるのがあるらしい。
公園内に道があるらしいのだが、よく分からなかったので一度公園を出て、さらに真っすぐ進んでみました。

どうやら、ここがサイクリングロードの真のゴールらしいですね。
自転車を貸し出しする施設もあるし、間違いないでしょう(まぁ、自転車は公園内で使う為のものでしょうけどね)。
IMG_0500_convert_20120824214538.jpg

とりあえず、左手の道の色が赤っぽくなってる坂道を上ってみます。
他の滝と同様に、途中で自転車進入禁止になっているので、徒歩でさらに進みます。
なんか勘違いして引き返していた人もいましたけどね。

そしてこれが「鱒見の滝」です。
これはすごいです。先ほどの「アシリベツの滝」より立派なんじゃないでしょうか。
IMG_0508_convert_20120824214606.jpg

この滝は、かなり至近距離まで侵入できます。
というか、滝まで到達できそうです(しませんけどね)。
IMG_0512_convert_20120824214632.jpg

札幌近郊にお住まいなら、この「鱒見の滝」と「アシリベツの滝」は見ておいて損は無いと思いますよ。

というわけで、4つの滝を制覇したので、ここから帰宅です。
途中の道に「レンゲショウマ」なる花が咲いていました。花の事はよく分からないですが、なんか説明文とかあったから有名(または珍しい)花なのかも知れませんね。
IMG_0521_convert_20120824214653.jpg

この辺りで、撤退予定の3時になりました。
さて、帰りますか。今日は、良いお出かけ日和でした。
IMG_0527_convert_20120824214715.jpg

ところで、このシリーズ。いままでずっと「滝野上野幌自転車道」ってタイトルにしてましたけど、本当は「滝野上野幌自転車道」ですよね。”路”が抜けてました。

前回:芸術の森 〜 滝野霊園

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

powerShellでファイル操作をしてみた

■ 基本

powerShell関係の小話も、結構な数になってきましたが、基本的な事って何も書いてないですよね。んで、今更ですがファイル(フォルダ)の作成、コピー、削除、存在確認の方法を書きました。

■ ファイルやフォルダを作成する

作成は、New-Itemコマンドレットを使用します。
フォルダを作成する時は、こんな感じになります。
# フォルダの作成
New-Item -path フォルダを作成するパス -name 作成するフォルダ名 -type directory

# これでも作れます。
New-Item 作成するフォルダのフルパス -ItemType Directory


ファイルの場合は、type パラメータにfileを設定します。
forceパラメータを指定すると、既存ファイルを空のテキストで上書きします。
# maeda.txtファイルを作成します。
New-Item d:\aaa\maeda.txt -type file -force


valueパラメータで、文字を追加することも出来ます。
# maeda.txtファイルを作成します。
New-Item d:\aaa\maeda.txt -type file -force -value "この文字を先頭に書き込む"


■ ファイルをコピーする

Copy-Itemコマンドレットでコピーできます。フォルダの場合は、Recurseを指定すると指定したフォルダの子要素もコピーしてくれます。逆に言うと、付けないと指定したフォルダが空の状態でコピーされます。
# maeda.txtファイルをCドライブ直下にコピーします。
Copy-Item d:\aaa\maeda.txt c:\

# aaaフォルダをCドライブ直下にコピーします。
Copy-Item d:\aaa c:\ -Recurse


Copy-Itemコマンドレットは、他にもたくさんのパラメータが指定できます。例えば、特定の条件に合致する項目を除外する、とかが可能なようです。

上手く使えば、バッチのxcopyみたいなことも出来そうですね。

■ 削除

削除は、Remove-Itemコマンドレットを使用します。Recurseパラメータを付けると、子要素(サブフォルダとか)も一緒に削除してくれます。
# フォルダを削除
Remove-Item 'C:\NAVIDIC\naviadmin\RN.bac\ALL' -Recurse

# aaaフォルダ以下の全てのファイル、フォルダを削除
Remove-Item ('d:\aaa' + '\*') -Recurse

# maeda.txtファイルを削除
Remove-Item d:\aaa\maeda.txt


■ 存在確認

ファイルやフォルダの存在確認は、Test-Pathコマンドレットを使用します。Trueで存在する、Falseで存在しないです。
# maeda.txtファイルが存在する場合は削除します。
if ((Test-Path d:\aaa\maeda.txt) -eq $True) {Remove-Item d:\aaa\maeda.txt}

# aaaフォルダが存在する場合は削除します。
if ((Test-Path d:\aaa) -eq $True) {Remove-Item d:\aaa -Recurse}


■ 後書き

サンプルでは、単純にファイルとフォルダの存在確認のみをしましたが、実はかなり強力な機能です。Microsoftのホームページによると、指定したフォルダ以下の要素まで含めて一致しているか確認したりできるようですね。

バックアップの結果検証とかで使えるかな?

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(芸術の森 〜 滝野霊園)

目指すは、滝野すずらん国立公園。
足はママチャリ(ホーマック製の1万切るやつ)。
前回までの最大到達点は石山緑地で、その先の地理はよく分かっていません。
...どうなることやら。

前日に雨が降ったせいか、川の水が濁っています。
IMG_0346_convert_20120822211143.jpg

天気自体も、あまりよくはないんですよね。
yahooの天気予報を信じるなら、降水確率は10%くらいだし大丈夫だと思うんですけどね。

そんなこんなで、道程はサクッと飛ばして「芸術の森」なる場所に到達しました。
(ここまでの道程は、過去のブログを見てくださいね)

入り口から中を覗いた感じです。
IMG_0358_convert_20120822211203.jpg

水筒の中のスポーツドリンクもそろそろ心許ないので、ちょっとより道しました。
まず、園内を右手に進行。すると、アクエリアス(350ml)を売っている自動販売機を見つけたのですが、現状小銭が無く、1000円札はつり切れで使えず、電子マネーは非対応。
ウーム、お腹もすいてるので、どっかで食事して小銭を作りましょうかね。

レストランがあるらしいので、今度は園内を左手に進行。
なにやら階段を上ってみると、こんな光景が見えてきました。
IMG_0373_convert_20120822211235.jpg

人口滝ですね。まぁこの手の施設としては、らしいちゃらしいですよね。
写真にはないですが、左手には小さな池があって、アメンボと怪しげな影(おそらくエゾサンショウウオの幼生)が見えます。
生憎、天気が悪いので見栄えも悪かったのですが、晴れていれば奇麗なのかもしれないですね。

滝を超えると、目的の建物を発見。ここの2階にレストランがありました。
IMG_0383_convert_20120822211357.jpg

ここは、いわゆる食券方式なんですけど、少し変わっていたので紹介します。
まず、食券制ではあっても券売機はありません。入り口のカウンターにいる店員さんに注文をしてお金を払うと食券を渡されれました。スーパー銭湯とかみたいに、厨房とかに食券の半券を渡すのかと思ってそれらしい場所を探して見たんですけど、特に見当たらない。仕方ないので、適当に空いている席に座っていると、別の店員さんがお冷やを持ってきてくれて、食券の半券を持って行きました。あとは普通にご飯が出てきました。

なんか凄い違和感を感じるのって私だけですかね?
どう考えても効率的とは思えないんですけど、あるいは長年の経験から最適化された方式なんですかね?

ちなみに注文したのは「パリパリドームのTomatoめん」(期間限定メニューらしい)。
IMG_0381_convert_20120822211301.jpg

殻を割るとこんな感じです。
IMG_0382_convert_20120822211325.jpg

イメージとしては、薄味のトマトパスタっていうのが一番近いですかね?
タバスコをちょっと掛けて、割った殻と一緒に食べるとなかなか美味しかったです。
余談ですが、半券には手書きで「トマトラーメン」、レシートには「麺」の一文字。なんだかとってもシュールです。

さて、お腹も膨れて小銭も出来たのでアクエリアスを階に戻ろうとしたら、レストランのある建物の入り口に、こんな自動販売機が...
IMG_0387_convert_20120822220012.jpg

結局、電子マネーで買いました。まぁ、いいんだけどね。

なお、ここで衝撃の事態が発生。なんと雨が降ってきました。
雨具?そんなのありません。あわててdocomoの携帯で天気を確認すると曇/雨で「パラパラふる程度」という予報。
しばらく待っていると、小降りになってきたので、このまま進む事にしました。

芸術の森を出て、道なりに進むとこんな分かれ道にぶつかりました。
おそらく、左手が目的の方角で、右手が支笏湖方面に抜けると思われるので、左手の道を進みます。
IMG_0400_convert_20120822211417.jpg

この先はほとんど上り坂です。しかも、雨が強くなってきている気がする。
この辺りで、進むのを迷い始めてます。まぁ結局進むんですけどね。
IMG_0402_convert_20120822211437.jpg

んで、坂を上りきると滝野霊園に到着。
既に、大雨になりつつあり(どこかの天気予報を信じた俺が馬鹿だった...)、雨宿りできる場所を求めて中に入ってみます。
IMG_0404_convert_20120822211456.jpg

結構、大きな施設だったから屋内休憩所みたいなものを期待したんですけど、なんか見あたらないんですよね。
なんか、大きめのテント(学校の運動会とかで拠点に使うようなやつ)が見えたので、仕方なくここで雨宿りする事にしました。
IMG_0408_convert_20120822211515.jpg


どうやら、ここまでのようですね。諦めて、撤退する事にしました。
んで、びしょ濡れになりながら帰っていると、自宅近くで雨は止み、豊平川沿いではマラソンやテニスに勤しむ人々の姿が散見されます。
この胸にわき上がる気持ちは一体なんだろう...

前回:No7
次回:芸術の森 〜 滝野すずらん丘陵公園

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

powerShellでエラーを処理をしてみた

エラートラップ!

powerShellでの死活監視も、今まで書いてきた内容を組み合わせてると、そこそこ動くようになってきました。(まぁ、実際には既に稼働してるんですけど)

んで、テストしてる時に困ったのがエラーが発生した時にpowerShellのウィンドウ自体が消えてしまって、エラーの内容が分からない事が多々あったんです。というわけで、エラートラップの方法を調べてみました。

エラートラップは、trap { … } で拾えました(trapの記述箇所は同一スコープ内ならどこでもOKらしい)。

問題は、PowerShellには「終了するエラー」と「続行するエラー」があり、通常は終了するエラーしか拾えないらしいです。確証はないのですが、おそらく「続行するエラー」とは、ユーザーに動作方法を問い合わせるようなエラーのことじゃないでしょうか?

対話方式でならそれでも良いが、バッチ処理で自動実行する場合はそれじゃぁまずい(応答が返せない)。さらに調べると、自動変数「$ErrorActionPreference」に"Stop"と設定してやると、全てのエラーを拾ってくれるようにるとのことです。ちなみに、こいつの初期値は"Continue"の模様。

やりたいのは、”全てのエラーをトラップする”です。結果、こんなソースになりました。
# エラートラップの設定
$ErrorActionPreference = "Stop"   # Stop(停止), Inquire ( 問い合わせ ), Continue ( 続行 )

・・・ 何らかの処理 ・・・

# エラートラップ
trap {
$Error[0]
}


実際には、エラー発生時には、以前に書いたログ出力関数でログにエラーを吐くようにしてます。

ちなみに、サンプルの $Errorには、過去に発生したエラー(例外)のリストが自動的に格納される自動変数です。直前に発生した例外は、$Error[0] に入っています。

エラーを強制発生

もうひとつ必要だったのが、強制的にエラーを発生させる方法です。これは、throwを使うことで実現する事が出来ました。
throw 'ディスク容量不足のため、処理を停止します。'


サンプルのメッセージからも分かると思いますが、特定の条件を満たさない場合にはエラーとしたかったんです。

基幹システムとかで作る時は、強制的にエラーを発生させるのは、完全に想定外のシステムエラーを捉える時だけなので、こういう使い方は違和感があるんですけど、スクリプト言語なので、処理分岐とか複雑になるようなことはしたくなかったんですよね。

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)No7 終わり

真駒内公園に入ったあたりから、奇妙な岩が道沿いにあるんですよね。
そう、↓な感じです。
IMG_0172_convert_20120820222002.jpg

一体、何なんだろう。
なんたら小学校とか中学校とか書いてるから、学校の寄贈品とかなんだろうか?
それにしたって、岩はないと思うのだが...

とか考えている内に、普通の自動車道路に出てきた。
右手に橋があったので、とりあえず渡ってみると交差点にぶつかりました。
IMG_0180_convert_20120820222106.jpg

ふむ、道が分からん。とか思ってると、標識を発見。
なるほど、こっち(進行方向から見て左手)に行く訳か。
IMG_0179_convert_20120820222034.jpg

ちょっと進むと、右手に石山緑地なる公園?に到着。
IMG_0184_convert_20120820222133.jpg

中に入ってみると展望台がありました。
なんか、今ひとつですね。紅葉の時季になればもっと奇麗に見えるのかな?
IMG_0187_convert_20120820222208.jpg

この時点で3時を過ぎました。
最初から、3時で引き返す予定だったので下見はここまでにします。
次からは、ようやく本番ですね。

前回:No6
次回:芸術の森 〜 滝野霊園

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)No6

真駒内公園に到着!
IMG_0142_convert_20120816182224.jpg

道も、好みの感じになってきました。
こういう自然の中に道や橋があるっていうのが好きなんですよね。
IMG_0148_convert_20120816182247.jpg

分かれ道とかあって進行方向に迷いました。標識はあるんですけど、こいつ正しい道を選んだ直後に設置されてるんですよね。結局、勘をたよりに道を選択するしか手段がない。

なんとか真駒内公園を抜けた直後に広がっている光景がこれ。
写真が掛けていますが。左手には道路沿いに道が続いています。そして標識には「終り」の文字が。
IMG_0159_convert_20120816182308.jpg

以前に、これをみて「サイクリングロードはここで終わりか」とか思って引き返したんですよね。
今回は、右手の道(公園の中)に飛び込んでみました。

中は、こんな感じです。
地面をよく見ると、結構でこぼこ。自転車だと走りにくい。
IMG_0161_convert_20120816183506.jpg

公園の出口がこれ。...どうやら、道の選択を誤ったようです。
道を塞ぐ鉄壁の防御が屹立しています。自転車が通る隙間もありません。
IMG_0168_convert_20120816182328.jpg


..........とりあえず、力ずくで突破しました(壊したり傷つけたりはしてませんよ)。
大抵の問題は、力技で片付けます。

前回:No5
次回:No7

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)No5

目を横見向けると、トンボの姿がありました。
そろそろ出てくる時期ですね。
IMG_0067_convert_20120816174640.jpg

ぶらぶらと走り続けると、そろそろお昼になってきました。
当初は、コーチャンフォーのミスドで食べるつもりだったんですけど、ビッグハウスが目に入ったので、そこのフードコート(ピーターパンという店名)でお昼を頂きました。
IMG_0100_convert_20120816174720.jpg
まぁ、フードコートだけあって味は今ひとつですけど、むしろそれが良い日もあるんですよね。

ご飯を終えて、サイクリングロードに復帰(実は、戻る道が分からなくて手間取りました)。
んで、ちょっと進むとこんな光景が...
IMG_0112_convert_20120816174739.jpg
ゴール! ってそんなわけないから。
どうやら道を間違えたようです。すこし戻ると川沿いから上に戻る道があるようで、これがサイクリングロードの続きの模様。...いや看板くらい出しとこうよ。

んで、上に上がったら看板が出ていた。
...ここじゃ遅いだろ。
IMG_0116_convert_20120816180654.jpg


まぁ、愚痴ってもしょうがないので、ゆっくりママチャリを進めます。
すると、右手に「さけ科学館」が見えてきました。ここでイトウを見ながら一休みですね。
IMG_0122_convert_20120816174820.jpg

この時点で、出発から約3時間。
あちこちで写真をとったり、横道をふらふらしているせいで、遅々として進みませんね(まぁ、反省はしないんですけど)。

前回:No4
次回:No6

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

powerShellで時間を操作してみた

■ powerShellの動作を指定した時間止める

いわゆる非同期処理を実装したくて、一定時間処理を停止する方法を探してみました。昔は、自力で作った物ですけど、今は1行で済むんですね。
# 3秒待機します(ザ・○ールド)。
[Threading.Thread]::Sleep(3*1000)


...せっかく調べたんですけど、実際にはtart-Processコマンドレットを使う事になったのでお蔵入りです。いつか使う機会があればいいなぁ。

■ 日時の基本操作

日時は、Get-Dateコマンドレットで取得できます。
PS C:\> Get-Date
2012年4月5日 11:21:47


書式も変えられます。
PS C:\> Get-Date -format yyyyMMdd_HHmmss
20120405_112221


結果を変数に格納することもできます。
[System.String]$OpeDate = Get-Date -format yyyyMMdd_HHmmss


■ 日時の加減算

現在の時刻から1時間後を取得します。

PS C:¥> (Get-Date).AddHours(1)
2012年4月5日 12:24:05


他にも色々出来るようです。

(Get-Date).AddYears(1)                 # 年
(Get-Date).AddDays(1)    # 月
(Get-Date).AddMonths(37)    # 日
(Get-Date).AddHours(1)    # 時
(Get-Date).AddMinutes(37)   # 分
(Get-Date).AddSeconds(37)    # 秒
(Get-Date).AddMilliseconds(37)   # ミリ秒


投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)No4

出発してから30分位の景色です。
マラソンしてるおじいさんより遅いくらいゆっくり走ってるので、距離は進んでないですね。
右手には豊平川、正面に立派な橋が見えます。
札幌市内を流れる川だけあって、これ以外にもたくさんの橋が架かってます。

IMG_0053_convert_20120809195742.jpg

ふと足下を見てみると、ハトがいました。
札幌のハトは人に慣れているのか、近づいても全然警戒しませんね。
IMG_0054_convert_20120809195807.jpg

...ここまで堂々とされると、何やらいじってやりたくなります(まぁ、やりませんけどね)。

前回:No3
次回:No5

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)No3

道ばたを見てみると、植物が植えられていますね。
この暑さのせいか、やや元気が無く見えます。
IMG_0042_convert_20120808195254.jpg

↓ よく見かけるけど、なんて名前だっけ?
IMG_0045_convert_20120808195321.jpg

向かって右手には豊平川、左手には結構な広さ(野球が出来るくらい)の草原が広がっています。
広さのわりに、雑草が生えていないので手入れはされているようです。
こんな広い所、どうやってるんだろ?とか思ってたら、ちょうど草刈りの現場に遭遇しました。
IMG_0049_convert_20120808195407.jpg

...なんか車で爆走して草を刈ってます。
なるほど、そういう風に除草してるのね。

前回:No2
次回:No4

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

powerShellで関数を使ってみた

思いつくたびに適当に書いてるもんだから、記事の内容と順序がバラバラですね。まぁ、話している内にどんどん別の話になっていく私にはお似合いかもですね。

では、本題です。PowerShellの関数は、function を使用して定義します。
# ----------------------
# 関数サンプル
# ----------------------

function releaseBackup {
・・・処理内容・・・
}


呼び出す方では、単純に関数名を指定すればOKです。
# releaseBackup関数を呼出
releaseBackup


引数がある関数の場合は、後ろにくっつけます。

powerShellの関数は空白を開けて指定します。下記は2つの引数を渡す例です。ほかの言語に慣れてると、関数名とか引数とかの間にカンマが無いのが不思議な感じしますね。
# releaseBackup関数を呼出
releaseBackup "0" "abc"


んで、引数を受け取る方(つまり関数の側)では受け取り方がいくつかあるようです。

...こんなところで凝らなくても良いと思うんですけどね。

まず、自動変数「$args」を使用する方法です。これは、関数を呼出す方が、一方的に引数を渡す事になります。

testって関数を作って動かしてみました。
PS C:\> function test { Write-Host $args[0]; Write-Host $args[1] }
PS C:\> test 'sakura' 123
sakura
123


自動変数「$args」には、与えた引数が配列として格納されます。サンプルでは、Write-Hostを使用して、コンソールに出力しています。

次に、関数本体の中で引数の受け取り方を指定する方法です。

PS C:\> function test { param($a, $b); Write-Host $a; Write-Host $b }
PS C:\> test 'hikisuu1' 987
hikisuu1
987


関数内でサンプルのようにparamを使用する事で、引数を受け取り事ができます。

関数名の直後に記述する事も出来ます。普段は、javaやvbaを使う機会が多いせいか、この方法が一番しっくりきます。
PS C:\> function test ($a, $b) { Write-Host $a; Write-Host $b }
PS C:\> test 'sora' 'yaha'
sora
yaha


通常の変数宣言と同様に、関数も型を指定できます。
PS C:\> function test ([System.String]$a, [System.Int32]$b) { Write-Host $a; Write-Host $b }
PS C:\> test 'sora' 573
sora
573


変数名の前に[ref]と付ける事で、引数の参照渡しも出来ます。
PS C:¥> function test ([ref]$a) { $a.Value = 'ttt'; Write-Host $a.Value }
PS C:¥> $b = 'abc'
PS C:¥> Write-Host $b
abc
PS C:\> test ([ref]$b)
ttt
PS C:\> Write-Host $b
ttt


最後に、関数の戻り値。

powerShellの戻り値は、出力した値がそのまま戻り値になるらしいです。例えば、下記のような関数にすると戻り値はTrueになるようです。
function test {
 $True
}


ただ、気になるのは「出力した値が全て」戻り値として返されるってことなんですよね。例えば、こんな関数を実行したらどんな戻り値になるだろうか?
function test {
 $False
 $True
}


いっその事、引数に戻り値用の項目を用意して参照渡しでやり取りした方が確実なような気が...

どうでしょうかね?

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)No2

基本的には「無理をしない」なので、のんびりゆっくり走って行きます。
道は、こんな感じ。まっすぐな道って気持ちいいですね。
IMG_0035_convert_20120807183401.jpg

この日は、やたらとカラスを見かけました。近くの林に巣でもあるのかな?
まぁ、カラスってよく見ると貫禄ある鳥なんで、別にいても良いですけどね。
IMG_0037_convert_20120807183430.jpg

んで、ふと横を見るとこんなものが。
IMG_0040_convert_20120807183456.jpg
...野鳥?カラスしか見てないぞ?

前回:(下見)No1
次回:No3

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ママチャリで滝野上野幌自転車道を走ってみた(下見)

運動不足が祟って、お腹の肉が気になりだしたのでサイクリングロードをママチャリで走ってみました。
今回は、道の確認だけの下見ですね。

装備はこんな感じ。
IMG_0029_convert_20120806195901.jpg

左下の青いのは、濡らしておくと気化熱で冷えてくれるタオル?のような布。
左上は、転んだ時の手当用具一式。汗を拭くための体ふきと、最近チェーンが外れるようになってきたので作業用に軍手。
上段真ん中はスポーツドリンク、1本は氷らせておきます。
右側中断のボトルは、青いのが虫除けスプレーで水色が日焼け止め。
まぁ、十分でしょ。

スタート地点はこんな感じ。曇ってるのが気になります。
IMG_0033_convert_20120806195924.jpg

さて、どこまでいけるかな?

次回:No2

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

powerShellでログ出力関数を作ってみた

死活監視のスクリプトに、ログの出力機能が欲しくなりました。バッチで作ってた時は、リダイレクト(>>)を使ってたんですけどpowerShellではどうしようかなぁ。

まず、ファイル出力する方法を調べました。どうやら、Out-Fileコマンドレットを使うことでファイル出力が可能なようです。

下記は、C:\My Documents\test.txt に 'test'を書き込むサンプルです。
'test' | out-file 'C:\My Documents\test.txt'


問題は、文字コードがUnicodeで作成されることです。そこで-Encodingで文字コードを指定します。選択できるのは、Unicode、UTF7、UTF8、UTF32、ASCII、BigEndianUnicode、Default、OEM です。
'test' | out-file 'C:\My Documents\test.txt' -Encoding ASCII


ログ出力なので、追記で書き込みたいです。それは、-appendを指定すれば可能のようです。
'test' | out-file 'C:\My Documents\test.txt' -Encoding Default -append


ここまでの事を踏まえて、ログ出力用の関数を作るとこんな感じになりました。

# ----------------------
# ログ出力用関数
# ----------------------
# 【機能概要】
# メッセージを、画面とテキストファイルに追加書込みします。
# 出力時に日時を追加表示することも可能です。
# 【引数】
# msg 表示するメッセージ
# file 出力するテキストファイルの完全パス
# dspTimeFlag メッセージへの日時に追加出力(0:追加しない, 1:追加する)

function msgOutput([String]$msg, [String]$file, [boolean]$dspTimeFlag) {
 if ($dspTimeFlag) {
  $WkLogTimeMsg = Get-Date -format yyyy/MM/dd-HH:mm:ss
  Write-Host ($msg + ' : ' + $WkLogTimeMsg)
  Write-Output ($msg + ' : ' + $WkLogTimeMsg) | out-file $file Default -append
 } else {
  Write-Host $msg
  Write-Output $msg | out-file $file Default -append
 }
}


んで、使い方はこんな感じ。標準出力とログファイルの両方に出力できるようになりました。
# msgOutput関数で、ログと画面への出力を同時に行います。
msgOutput '□□□□□□□□□□□□□□□□□□□' $LogName $LogDateFalse
msgOutput 'ListWorksのバックアップを開始します。' $LogName $LogDateTrue
msgOutput '□□□□□□□□□□□□□□□□□□□' $LogName $LogDateFalse


投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

ハエトリグサを育ててみた

子供の頃から、食虫植物が好きで、いつか自分で育てたいと漠然と思っていたんですが、この前、近所のホーマックでハエトリグサを売っていたので、思わず買ってしまいました。

こんな感じです。
ハエトリグサ(生)

このたくましいトゲトゲで、ぜひ虫を捕まえて欲しいなぁ。
とか思っていたんですけど、数週間後、こうなりました。

ハエトリグサ(枯死)

うわぁぁぁぁぁ!やってしまった。
敗因は、水のやり過ぎかと。
なんというか、タイトル詐欺ですよね。正しくは「ハエトリグサを枯れさせてみた」ですね。

スポンサードリンク

PageTop

powerShellでコマンドの途中で改行したい

長いコマンドを打つとき、ページ内に収まるようにコマンド途中で改行したいですよね。powerShellの場合、行の終わりにバッククォート ( ` ) を追加すればokです。
# 結果を管理者にメール送信します。
send-mailmessage `
  -from "システム管理者 <1aaaaaa@bbbbbb.co.jp>" `
  -to "システム管理者 <2bbbbbb@bbbbbb.co.jp>" `
  -SmtpServer "101.200.10.1" `
  -Encoding $encoding `
  -subject ("Pingエラー ")`
  -Body (' ping失敗 [ ***.***.***.*** ] ')


投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---



スポンサードリンク

PageTop

濾過器の中のグッピー

グッピーを飼っています。
ちっちゃな水槽で、こんな感じ。
この程度のサイズなら、面倒臭がりな私でも維持できます。

グッピー水槽

しばらく前に、濾過器の中にグッピーの子供が吸い上げられました。
もう、繁殖させるつもりはなかったので、どうしようか迷ったんですよ。殺すのは可哀想だし、このまま水槽に戻しても、親に食べられる。
そこで、濾過器のなかで育てることにしました。

過酷な環境にもめげずに、立派に育ってますね。
濾過器の中のグッピー

スポンサードリンク

PageTop

powerShellでエスケープシーケンス

powerShellで特殊文字を打ってみたい(というかエスケープシーケンスを使いたい)。んで、powerShellでは`(バックスラッシュ)を付けるらしいです。

特殊文字でよく使いそうなのは、こんな所でしょうか。
`b	バックスペース
`n 改行
`r キャリッジ・リターン
`t タブ


もちろん、シングルクォートとかも同じ使えます。

外部のテキストファイルに、文字を出力する例です。
Write-Output "connect `'10.11.16.70:23 /nossh /T=1`'" | out-file $file Default -append


投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

powerShellの変数の宣言方法

新しい言語を覚えるときに、意外と手こずるのが変数の使い方だったりします。当然、powerShellでも苦戦しました(というか、現在進行形で理解しきれていない)。

PowerShellの変数は、頭に$を付けて記述します。さらに先頭に[型]を指定することで、型を指定した変数を使用できます。

実際には、こんな感じでしょうか?
$test = 'aa' 
[System.String]$OpeDate = Get-Date -format yyyyMMdd_HHmmss
[System.String]$LogName = 'D:¥log¥' + $OpeDate + '.log'
[boolean]$LogDateTrue = 1
[boolean]$LogDateFalse = 0


問題は型なんですよね。どれだけ種類があって、いつ、なにを、どう使えばよいのか迷います。

javaとかでクラスを使うならともかく、文字型、数値型、ブール型、あとはせいぜい日付型あたりがあれば、大抵のことは出来ると思うんですけどね。

次に、変数の型を確認する方法です。変数の型を確認するには、GetTypeコマンドレットを使用します。
PS C:\> $aaa.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object

PS C:\> $aaa.GetType().Name
String

PS C:\> $aaa.GetType().FullName
System.String


実際には、powerShell内で使ったことはなくて、デバッグの時に変数の型を調べる時に使ってます。

んで、次は配列です。変数の宣言は “型[] $変数名” で配列に設定する値は@()内にカンマ区切りで値を作ってやります。
# 1次元配列
[string[]]$addressList = @("10.101.120.10", "10.101.106.173")

# 2次元配列
[string[][]]$addressList = @(@("10.101.120.10", "APサーバ1番機" ), @("10.101.106.173", "バックアップサーバ" ) )


関数とかの戻値に対しても使えます。下記は、Test-Connectionの実行結果を配列として取得しています。
[String[]]$addressAp = @('10.101.120.30','10.101.120.10')
$pingAlive = @(Test-Connection -ComputerName $addressAp -Quiet)


なんかもう、へたなプログラミング言語よりいろいろ出来てますよね。出来ることが多いのは良いことだと思いますけど、やり過ぎのような気もするんですよね。

■ 2015.2.10追記

よくよく見ると、変数の型とか宣言とかが書いていなかったので、改めて記事を作成しました。

型については、こちらをどうぞ(PowerShellの良く使う型と宣言方法

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop