PowerShellポケットリファレンスを買ってみた

久々に古本屋でない本屋へ行ってみたら、PowerShell関係の新刊が出ていましたので思わず購入してしまいました。
↓これ
Windows PowerShell ポケットリファレンス 牟田口大介著 技術評論社

PowerShellとはWindowsのコマンドプロンプトに代わる、.NETベースの新しいコマンドシェルです。
コマンドプロンプトにはシーケンス処理としては貧弱なバッチ機能しかありませんでしたが、PowerShellには充分なスクリプト言語機能が用意されており、強力なコマンド群と併せてCOMオブジェクトや.NETライブラリも利用できます。
現状ではXP、Vistaともにインストールを行わないと利用できないため、あまり普及していませんが、今後Windowsに標準搭載されるとWSHに代わっていくものになるかもしれません。
今までもPoweShellに関する書籍は何冊かありましたが、コマンド・スクリプト両面においてまとめられたものはなく、また、ポケットサイズのものもありませんでしたので、自分を含めてこういう本がほしかった人は多いと思います。
内容は基礎・コマンドレット一覧・.NETクラス一覧の3部構成で、コマンドレットはもちろん、基礎の部にスクリプト文法に関してもしっかり書かれているので、スクリプトを作るのにも不足はないと思います。特に.NETクラスに関してはスクリプト作成には必須といったあたりが簡潔にまとまっているいるので重宝しそうです。
なんか気持ち悪いくらいほめていますが、あえて文句を言うなら厚くならない程度で実用的なスクリプトのサンプルがあればとも思いました。
あと、入門書ではないのでPowerShellに関してまったく予備知識のない人(他のコマンドシェルを使い慣れている人も)が読むとピンとこない部分もあります。最低限PowerShellに付属のファーストステップガイドを読んでPowerShellの考え方(とクセ)を理解しておくことをお勧めします。
私自身は当分PowerShellスクリプトを仕事で作ることはないと思いますが、プライベートなスクリプトはなるべくPowerShellで作って今後に備えていこうかと。


Excelでチェックボックスもどき

通常Excelでチェックボックスを使いたい場合は、チェックボックスコントロールを配置してセルとリンクさせますが、大量にある場合は面倒ですし(そういう場合にこそVBAマクロの使いどころですが)、セルに連動して動いてくれるわけでもないですので使い勝手もいまいちです。
そこでチェックボックスとは違いますが、VBAマクロを使ってセル内でそれっぽい動作をさせる「チェックボックスもどき」を紹介します。

とりあえずExcelを起動したら、ツール→マクロ→Visual Basic Editor(Alt+F11)でVBAのエディタを開き、左上のプロジェクトの中の「チェックボックスもどき」を使いたいシート(例えばSheet1)のアイコンをダブルクリックして、開いたウインドウに以下のコードを貼り付けてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Select Case Target.Value
        Case “■”
            Target.Value = “□”
        Case “□”
            Target.Value = “■”
    End Select
    
End Sub

下のような画面になればOKです。
VBE画面

エディタの画面を閉じて、ワークシート上で「■」または「□」のみが入ったセルを作れば、ダブルクリックするたびに「■」と「□」が入れ替わります。ダブルクリックというのがちょっと面倒ですが、これをチェックボックス代わりに使うのが「チェックボックスもどき」です。
もちろん上のコードの「■」と「□」を変更すれば別の記号や文字も使えます。別のセルにIF関数を使って数値やTRUE/FALSEに置き換えたものを入れておけば集計にも使えるでしょう。

Excel画面

サンプルファイル

chkboxsamp.lzh


お気に入りの文房具(1)-DUX インク瓶型鉛筆削り

PC関係の話ばかりもなんですので、不定期ではありますが、趣味の文具コレクションの中からお気に入りを紹介していきたいと思います。
第1弾はとりあえず机の上で一番先に目についた、DUXのインクボトル型鉛筆削りです。DUXはドイツのメーカーでなんと鉛筆削り専門メーカーらしいです。
一見すると色モノにも思えるこの鉛筆削りですが、道具として非常によくできています。
この瓶のサイズと形状が握りこむと妙にフィットして、片手で瓶を握りこんでもう片手で鉛筆を差し込んで回す形で削ると非常に削りやすいです。
削り味(?)も目立ってよいというわけではありませんが、まあスムーズで心地よいです。もちろん削りかすは瓶の中にたまりますので合理的でもあります。
インク瓶型なので机の上においたまま上から鉛筆を差し込んで削りたいところですが、これは芯が折れやすいのでお勧めできません。
値段も手ごろで、何より机の上にあるだけで雰囲気がいいので愛用しています。
新宿の伊東屋で600円ほどで購入。


スパムメールは減ったけど…

私がプライベートで使っているメールアドレスは、一時公開していたせいもあってスパムメールの量がハンパない状態だったのですが、先月ぐらいからばったりと件数が減りました。
いったいどうしたんだろうと思ったんですが、とある記事のことを思い出して、現在作成中のメールフォームからためしに自分のアドレスに送信してみると、やはりsendmailに-fオプションを付けないで送信すると届きません。
PHPだとこんな感じです。

mb_send_mail($mailto, $subject, $body, $header, ‘-f ‘ . $mailfrom); →届く

mb_send_mail($mailto, $subject, $body, $header); →届かない

このsendmailの-fオプションというのは、メールの送信者を指定するのですが、これを指定しないとヘッダで送信元(From:)を指定しても、送信エラー等が起きた際の差し戻し先(Return-Path:)は元のままなので、レンタルサーバーなどでドメインを取っている場合にはFromとReturn-Pathのドメインが異なってしまうことがあります。

スパム送信者の中にはレンタルサーバーを利用している者も多く、スパムメールにはこのFromとReturn-Pathのドメインが違うものが多いため、メールサーバーの中は、このようなメールはスパムとして判断してしまうものがあるようです。

私の使っているプロバイダもこのルールを採用したみたいですね。
でも、これってちょっと強引すぎません? 本来届くべきなのに届かないメールが結構ありそうな…

ちなみにスパムに困っている人にはPOPFileがオススメです。インストールはちょっと面倒で、学習効果が出てくるまでちょっと時間がかかりますが、効果絶大です(^^


WSHでのファイルの最終更新日の変更

スクリプト作成の仕事をしていると、WSHからファイルの最終更新日を変更しなくてはならないことが、ごくたま~にですがあります。

ですが、よく使われているFileSystemObjectのDateLastModifiedプロパティは読み取り専用ですので、変更することができません。そのためWSHではファイルの更新日の変更はできないと思われているのですが、実はShellオブジェクト内のModifyDateプロパティを利用すると変更することができます。

この方法、結構前から知られていたと思うんですが、つい最近になって公式サイトに載りました。

 http://technet.microsoft.com/ja-jp/magazine/cc194399.aspx

検索するといくつか出てくる割には書籍とかでは全く扱われていないので、保証外の利用法なのかと思っていましたが、これで安心して利用できます(これまでも使っていましたが)。


IEのお気に入りの整理って

私はとにかくブックマークしたがる性格なので、IEのお気に入りがすぐにあふれ返ってしまうのですが、IEの「お気に入りの整理」は、狭いわ複数選択できないわで使いにくいこと極まりないので、普段は「お気に入り」フォルダのショートカットでエクスプローラを起動するようにしていたわけですが、

お気に入りをエクスプローラから手早く整理

Shiftキーを押しながら「お気に入りの整理」でエクスプローラが開くんですか。今まで知らなかった自分って一体( ;´Д`)

ちなみにショートカットをリンク先「%windir%\explorer.exe /e, %HOMEPATH%\Favorites」で作っておくと、ショートカットを開いた時点でフォルダバーが開いた状態になってますのでちょっとだけ便利です。


ちょっとだけデザイン変更

なんとなく上のほうがさびしかったので、私が大好きな夕焼けの画像をバナーにしてみました。

一応ながら独立を目す事業のブログに黄昏というのは、我ながらいかがなものかとも思いますが。まあいいです。好きなんです。夕焼け。

ついでなのでもう一枚。ちゃんとしたデジカメも持っているんですが、こういう写真はケータイで撮ったものばかりです。最新型ではないんですが、結構よく写るんで重宝してます。

夕焼け 

WordPress2.5にしてから初めてのアップロードでしたが、アップロード時にエラーが出るので検索したらIE特有の問題みたいです。

パッチのファイルに差し替えたら問題なくなりました。ふう。


WordPress2.5ショートコードタグで遊んでみる追記

先の記事でソースのヘッダに実際にタグ名が入っていますが、これをタグと認識させないために以下のようなショートコードを定義しています。

// [addsb]content[/addsb]
// contentにスクエアブラケットを追加します
function addsb_func($atts, $content='') {
  return @"[" . $content . "]";
}

つまり上のソースのコメントの1行目は[addsb]addsb[/addsb]content[addsb]addsb[/addsb]となっているわけです<ますます分かんない?

ところで2.5のエディタなんですが、HTMLモードではフルスクリーンは使えないんですね。
というかサイズ変更もできなくなってる(;´Д`)・・・ソースコードを貼り付ける時とか、結構HTMLモードも使うのでこれは何とかしてほしいです。


WordPress2.5のショートコードタグで遊んでみる

WordPress2.5の新機能であるショートコードタグですが、使い方がだんだんわかってきました。

基本的としては、phpで関数を記述(記述場所はテンプレートのfunctions.phpが適当)して、その関数をadd_shortcodeで登録しておけば、記事内にて、[タグ名 属性名="属性"]または[タグ名]…[/タグ名]といった形で、記事内にオリジナルの機能を持ったタグを追加できるというものです。
wp-includes/shortcodes.php内にサンプルの記述がありましたので、それを参考に遊びでタグを作ってみました。

// [randomface id="number"]
//idに対応した顔文字を表示(idなしの場合はランダム)
function randomface_func($atts) {
  extract(shortcode_atts(array(
    'id' => '0',
  ), $atts));
  $faces=array('', '(・∀・)', '(´∀`)', '(´・ω・`)',
    'Σ (゚Д゚;)', 'ヽ(;´Д`)ノ', '(*´Д`*)', '_| ̄|○');  
  if($id =='0'){
    return @$faces[rand(1, count($faces) -1)];
  } else {
    return @$faces[intval($id)];
  }
}
add_shortcode('randomface', 'randomface_func');

簡単に説明しますと、タグ内の属性はfunctionの引数として配列で渡されます。つまりこの場合は$atts['id']にnumberの値が入ります。次のextract…は配列を変数に展開するもので、これを通すと先ほどの属性値が$idで参照できるようになります。この中で使われているshortcode_attsですが、1番目の配列に2番の配列を上書きするような動作をするようで、これによってid属性が指定されなかった場合のデフォルト値を設定できるようになります。つまりこの場合はidが指定されていない場合は最初に指定された配列の値が有効になるので0になるといった具合です。
それ以降はテンプレート内とほぼ同様にテンプレートタグやphpが利用できます。ただしループ内でしか利用できないタグはうまく動かないものがあるようです。
こうして関数を定義したら、最後にadd_shortcode(’タグ名’,'呼び出される関数名’)と記述すれば、それ以降は記事内でタグが利用できるようになります。

上のタグを実際に記事内に入れるとこんな感じです。
(´∀`)

テンプレートタグとショートコードタグを組み合わせると、これまでの記事では難しかった動作を簡単に指定することができます。
例えば以下のようなショートコードを定義しておくと、シングルページでしか表示しない部分を投稿編集画面から簡単に指定することができます。上のものと違ってこれはタグで囲い込む形ですが、これもひな形として覚えてしまえばいいと思います。残念ながらショートコードタグは入れ子構造には対応していないみたいです。

// [issingle]content[/issingle]
// 個別記事ページの場合のみタグ内を表示します
function issingle_func($atts, $content='') {
  if(is_single()){
    return @$content;
  }
}
add_shortcode('issingle', 'issingle_func');

↓ここにシングルページでしか表示されないテキストがあります

以下は上の応用で、GoogleMapsを読み込むJavaScriptですが、表示が重くなるのを避けるためシングルページのみで表示されるようになっています。
個別記事表示にするとマップを表示します


WordPress2.5へアップデート

ついこの間日本語版2.3.3にアップデートしたばかりですが、相変わらずのタイミングで、その直後に2.5が正式リリースされましたのでアップデートしました。アップデート方法に関しましてはこれまでのバージョンと同様で、前回と同じくこちらの記事を参考にしてすんなりとアップデートできました。

2.5になって管理画面周りのデザインがかなり変わっています。自分はwordPressを使ってあまり経っていないのですんなり対応できましたが、長く使っている人はかなり違和感を感じるかも。レスポンスは以前とよりもやや良くなっている気がします。

個人的に気に入っているのはテキストエディタのフルスクリーンモード。これだけでもアップデートした甲斐がありました。

あとちょっと試してみたいのがショートコードタグ。投稿記事に[tag]…[/tag]みたいな形でphpで作成したオリジナルのタグを埋め込めるようです。


    サイト内検索

    プロフィール

  • 顔絵
  • kotani(こたに)

    30台後半になって突然脱サラ。フリーのスクリプト系プログラマーとして独立を目論む謎のおやぢ。東京都在住。趣味は古本屋巡り、文具いぢり、機械いぢり、B級グルメ探索等々多岐にわたる。PCを使う作業に関しては何でもかんでも自動化したがる自動化オタク。