Excel から直接 PowerShell が可能になる VSTO アドイン Excel PowerShell Tool (=PS Tool) を公開します。
ダウンロード ↓↓↓
ExPSTool-0-5-0-0.zip (1.42 mb)
(2013/05/28) 新バージョンできました!! → Excel PowerShell Tool Version 1.0
Windows は基本的に GUI 操作で、大抵の作業はそれで間に合います。
しかし、バッチ処理的な作業には不向きなので、unix のシェル使いからは常に批判の的でした。
その様な状況で MS が出した回答が PowerShell です。
PowerShell はパイプラインをオブジェクトの配列が流れるのが特徴で、
unix のそれがテキストを扱うのとは基本思想が違います。
どちらが優れているかは一長一短ですが、私は PowerShell を勉強して目から鱗が落ちました(本当)
PowerShell はオブジェクトの「配列」がパイプラインを流れます。
配列≒表→Excel という発想で、Excel と PowerShell の融合を試みました。
初めは PowerShell の出力を Excel に取り込むのが目的でしたが、
Excelテーブル≒CSV → PowerShell という流れも制御できるようになりました。
その結果、Excel から ActiveDirectory の管理等が可能になる PS Tool が生まれました。
PowerShell コンソールで Get-Service を実行すると、
こんな感じの出力になりますが、 PS Tool で実行すると。
各項目が自動的にセルに配置されている事がわかります。
PowerShell では、「書式ファイル」による暗黙のフィルターがあります。
PS Tool ではある程度の解析を行っていますが、不明な点も残っています。
この様な場合も、Format-Table / Format-List コマンドレットを使えば、コンソールと同じ出力が得られるようになっています。
※画面サイズに制限がなく、出力が潰れない点では Format-XXX より優れているかも?
この様に、PowerShell の出力を簡単に Excel に取り込む事ができます。
現場にいるとよく聞くのが、データを効率よく Excel に読み込みたいという意見です。
多くの場合、(古の)CSVファイルでやり取りするわけですが、文字コードやデータ型の問題で結構苦労します。
XMLにでもすれば解決する・・・とは行きません。 XMLはユーザーが編集するには敷居が高いのです。
PS Tool を使えば、CSVファイルに関する多くの問題が解決します。
Excel の文字コードは Unicode なので、PowerShell との相性が良いです。
セルは時刻型を直接受け取れるので、時刻と文字列の変換も不要です。
セルを文字列にしておけば、0詰め数字の問題も気になりません。
得られたデータをテーブル化する事で大きな恩恵が得られます。
それは、テーブルを Import-Csv を使う感覚で、PowerShell に渡す事が出来るからです。
例として、ActiveDirectory の新規アカウントを一気に登録する場合を想定してください。
これは、TableUserNew という名のテーブルに、新規アカウントに必要なデータを登録した例です。
TableUserNew を指定して、new-user.ps1 という登録用のスクリプトを実行した結果です。(スクリプトはインストーラーにサンプルとして附属しています)
ちゃんと登録できました。
必要なスクリプトを用意すれば、多くの環境で Excel が管理ツールになるわけです。
(01/21 new-user.ps1 ソース追加)
# Get-ADUserにてADUserObject Import-Csv形式の情報がパイプで流れてくるので、それを順次処理する
# $inputはパイプを示す予約変数
$input | foreach {
try {
# New-ADUserを使って必要なPropertyを設定していく
# -PassThru でADUser Objectを拾う -ErrorAction は try-catch に必要
$res = New-ADUser -name $_.Name -SamAccountName $_.SamAccountName `
-Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName `
-Path $_.Path `
-PassThru -ErrorAction stop
# パスワードの設定
$res | Set-ADAccountPassword -Reset `
-NewPassword (ConvertTo-SecureString -AsPlainText $_.Password –Force)`
-ErrorAction stop
# アカウントの有効化
$res | Enable-ADAccount -ErrorAction stop
"OK"
}
catch {
$Error[0].ToString()
}
}
PowerShell は大変優れたシェル環境ですが、どうも認知度が低い感じがします。
PS Tool が PowerShell の普及に役立てば幸いです。
動作は、 Win7/8、 Server 2008R2/2012、 Excel 2010/2013 で確認しています。
ご意見、ご感想等お待ちしています。