2016-11-09

PowerShellでPDFファイルを結合する

PDFファイルは様々な場面で登場します。
複数のPDFファイルを1つにまとめたいと思ったことがある方は非常に多いのではないでしょうか。

巷にはPDFファイルを操作するフリーソフトはたくさんありますが、わざわざダウンロードしなくてもPowerShell(とiTextSharp)があれば簡単な操作は可能です。

ここでは「PowerShellでPDFファイルを結合する方法」をご紹介します。

※事前に iTextSharp.dll を入手しておく必要がありますので、各自ダウンロードをお願いします。
以下、スクリプトです。
## PowerShellからiTextSharpを使用したPDFファイルの結合

# iTextSharpの読み込み
[System.Reflection.Assembly]::LoadFrom("D:\itextsharp.dll")

# pdfファイルの指定
$pdf1 = New-object iTextSharp.text.pdf.pdfreader("C:\Users\user001\Desktop\001.pdf")
$pdf2 = New-object iTextSharp.text.pdf.pdfreader("C:\Users\user001\Desktop\002.pdf")

# 新しいPDFファイル
$new_pdf = New-Object System.IO.FileStream("C:\Users\user001\Desktop\new_pdf.pdf", [System.IO.FileMode]::OpenOrCreate)

# 結合後ファイルに読み込んだpdfファイルのコピーを追加する
$copy = New-Object iTextSharp.text.pdf.PdfCopyFields($new_pdf)
$copy.AddDocument($pdf1)
$copy.AddDocument($pdf2)

# 後片付け
$copy.Close()
$new_pdf.Close()
$pdf1.Close()
$pdf2.Close()

続いて解説です。

2016-08-01

[PowerShell] 変数に変数を使う

PowerShellだけでなく、どんなプログラムでも変数は必ず使用します。

PowerShellでは事前の宣言なく使用できる変数ですが、時折、連番で変数を取りたい場合があります。

(例)
$hensu01
$hensu02
$hensu03
$hensu04
  …

今回は上記のような「変数を連番で取る方法」をご紹介します。

以下、スクリプトです。
For ( $i = 1 ; $i -lt 10 ; $i++)
{
    # testで始まる連番の変数を作成する
    Set-Variable -Name ("test0" + $i) -Value ($i)
}

# 作成したtestが付く変数を全て取得する
Get-Variable -Name test*
上記内容をコピーし、PowerShell ISEに貼り付け後、実行するとコンソール部分に作成した変数が表示されるはずです。

続いて解説をしていきます。

2016-06-20

PowerShellでマウスポインタの座標を取得する

PowerShellでユーザーフォームを作っていると、ふと、マウスポインタの座標を取得したくなることがあります。

例えば、「コンテキストメニューを表示させるために座標を取得する」といった場合が当てはまります。

よって今回のテーマは「PowerShellでマウスポインタの座標を取得する」です。

<今回の完成品>


今回の完成品は、ボタンのみで構成されたフォームを使用します。
ボタンをクリックすると1秒ごとにマウスポインタの現在座標を取得し、コンソールに出力します。
10回取得を繰り返したところで終了します。

以下がスクリプトとなります。

2016-06-11

PowerShellでxmlファイルを操作する - 書き込み(保存)編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - 設定ファイル 書き込み(保存)編 -」です。

以前の記事で設定ファイルを読み込む方法をご紹介致しました。
PowerShellでユーザーフォームを作る - 設定ファイル 読み込み編 -

しかし、設定ファイルの内容は読み込むばかりではなく、書き込んでナンボですね。

よって、今回は「読み込み編」で使用したものを流用し、新しい内容を書き込み(保存)まで行う方法をご紹介していきます。

使用するxmlファイルの内容は前回と同じく下記の通りです。

 [ setting.xml ]
<?xml version="1.0" encoding="utf-8"?>
<root>
    <name>山田太郎</name>
    <userid>t_yamada</userid>
    <path>C:\Users\t_yamada\Desktop</path>
    <color>lightblue</color>
</root>
 続いてスクリプトを記述していきます。

2016-05-11

PowerShellでxmlファイルを操作する - 読み込み編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - 設定ファイル 読み込み編 -」です。

あなたが作成したユーザーフォームを、例えば同じ社内の人が複数人で使用していたりしませんか?

そして、使用する人(パソコン)によってフォルダのパスが違ったり、ファイル名が違ったり、文字色が違ったりと、十人十色の状況になっていませんか?

使う人が2~3人と少ないような場合は、「スクリプト内でユーザーIDなどから処理を分岐させる」「一人ずつスクリプトを作る」などの方法でも問題ないかもしれませんが、それが10人、20人となってくると大変です。

そういった場合に使用するのが「設定ファイル」です。

設定ファイル内には個別の情報を予め入力しておく必要があります。
その設定ファイルとスクリプトファイルを同じフォルダ内に格納しておき、スクリプトを実行したときに設定ファイル内を読み込むことで、それぞれの設定が反映されます。

<今回の完成品>


設定ファイルではiniファイルやxmlファイルがよく使われますが、今回はxmlファイルを使ってご紹介していきます。

まず先にxmlファイルを準備します。

今回使用するxmlファイルの内容は次のようになっています。

- - - [ setting.xml ] - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<?xml version="1.0" encoding="utf-8"?>
<root>
    <name>山田太郎</name>
    <userid>t_yamada</userid>
    <path>C:\Users\t_yamada\Desktop</path>
    <color>lightblue</color>
</root>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

続いて、スクリプトを記述していきます。

2016-03-25

PowerShell ドラッグ&ドロップでListViewの項目を移動させる

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は以前ご紹介したリストビューを少し発展させて、ドラッグ&ドロップで項目を移動できるようにしたいと思います。

リストビューについて詳しく知りたい方はPowerShellでユーザーフォームを作る - リストビュー編 -をご参照ください。

<今回の完成品>


早速スクリプトを記述していきます。
少々長いですが、ご了承ください。

2016-03-24

PowerShellでユーザーフォームを作る - ツリービュー編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - ツリービュー編 -」です。

ツリービューはリストボックスやリストビューなどと同じ「リスト系コントロール」のひとつです。


ツリービューの代表的な使用例といえば、上記のようなフォルダの階層表示が有名です。

<今回の完成品>

展開時と折り畳み時

それではスクリプトを記述していきます。

2016-03-23

PowerShellでユーザーフォームを作る - トグルボタン編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - トグルボタン編 -」です。

トグルボタンとはいわゆる「スイッチ」のようなもので、ONの状態とOFFの状態を見た目で判別できるようになります。

<今回の完成品>


上記の「はい」と書いてあるボタンがトグルボタンです。
ボタンを1度押すと次のように変化します。


それではスクリプトを記述していきます。

2016-03-22

PowerShellでユーザーフォームを作る - サブフォーム編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - サブフォーム編 -」です。

サブフォームは子フォームと言ったりもしますが、メインフォームとは別に表示させるフォームのことです。

サブフォームは開く方法や閉じる時などにいくつかの注意点があります。
その辺りについても詳しく、かつ分かりやすくご紹介していきたいと思います。

<今回の完成品>


ボタンも何もない方がサブフォームです。
メインフォームの「フォーム表示」ボタンを押すと表示されるようになっています。

それではスクリプトを記述していきます。

2016-03-19

PowerShellでユーザーフォームを作る - データグリッドビュー編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - データグリッドビュー編 -」です。

データグリッドビュー(DataGridView)はリストビューと似ていますが、どちらかと言うとOfficeソフトのExcelに近いと思います。

データグリッドビューの特徴は、
1.並び替え機能が付いていること
2.手動でアイテムを追加できること
3.行の高さや列幅を変更できること
4.行の表示/非表示が簡単であること などが挙げられます。

今回はそんなデータグリッドビューの基本的な部分をご紹介していきます。

<今回の完成品>



Excelのように見える部分がデータグリッドビューです。

それではスクリプトを記述していきます。

2016-03-12

PowerShellからクリップボードを扱う

PowerShellで実行した処理結果を、クリップボードに送りたい場合があります。・・・よね?

今回はPowerShellからクリップボードへの送信方法と、クリップボードからの取得方法をご紹介していきます。


1.処理結果をクリップボードへ送信する方法 その1

コマンドの実行結果をクリップボードへ送る方法を2つご紹介します。

まず1つ目はパイプを使用する方法です。

下記に簡単なサンプルスクリプトを記述します。
# クリップボードへの送信 その1
Get-ChildItem | Clip
以上です。・・・と終わってしまっては身も蓋もないですね。

まず、お馴染みの「Get-ChildItem」コマンドレットで、カレントディレクトリ内のアイテムを取得しています。

そしてパイプを使用して「Clip」と記述します。

実際、これだけで、コマンド結果がクリップボードに送信されています。
試しに、上記を実行後、メモ帳などを開いて貼り付けを行ってみてください。
コマンド結果が貼り付けられるはずです。

しかしここで問題が発生している方もいらっしゃるのではないでしょうか。

そうです、日本語の部分が文字化けし、「????」となってしまいます。
(問題ないという方は読み飛ばしてください)

2016-03-07

PowerShellでユーザーフォームを作る - リンクラベル編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - リンクラベル編 -」です。

リンクラベルというのは、その文字列をクリックすると指定されたページにジャンプしたりする、よくWEBサイト上で使われているものです。

今回は、そのリンクラベルをフォーム上に設置し、クリックすると指定フォルダを起動するよう設定します。

<今回の完成品>


フォーム内の、色と下線がついている部分がリンクラベルです。

それではスクリプトを記述していきます。

PowerShellでユーザーフォームを作る - カラー選択ダイアログを使用する -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - カラー選択ダイアログを使用する -」です。

色というのは些細なことのようで、意外と重要な役割を持っているんじゃないかと筆者は考えています。

例えば、デフォルトでは背景が白っぽい色で、文字が黒になっています。
白というのは光を多く放っている=目に悪いというようなイメージがあり、長時間見続けていると、眼精疲労などにつながってしまうかもしれません。(あくまで個人的な意見です)

さらに個人の好みという問題もあります。
貴殿が作成したオリジナルソフトを、同じ部署のみんなで使用する場合などは、背景を黒にしたい人、文字は赤にしたい人なども出てくるでしょう。

今回の内容は、そんな場合に備えてぜひ知っておいて欲しいものです。

<今回出てくるダイアログ>


誰でも一度は見たことがあるものだと思います。

それではスクリプトを記述していきます。

2016-03-04

PowerShellでユーザーフォームを作る - ドラッグ&ドロップの実装 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - ドラッグ&ドロップの実装 -」です。

不特定多数の人が使うようなフォームを作成する場合、一番に考慮しなければいけないのはその操作性で、「誰でも簡単に使える」ようなものにする必要があります。

そんな時に欠かせない機能のひとつが「ドラッグアンドドロップ」です!

データを取得するときに、「ファイル選択ダイアログを開いて…フォルダの階層を辿って…このファイルと、このファイルと、このファイルと・・・」なんて作業をする必要が無くなります!

<今回の完成品>

ドロップしたところ

前置きはこの辺にして、早速スクリプトを記述していきます。

2016-03-03

PowerShellでユーザーフォームを作る - プログレスバー編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - プログレスバー編 -」です。

プログレスバーとは、容量の大きいデータを移動した時などに表示される、進捗状況をユーザーに明示するものです。

以前、Write-Progressコマンドレットを使用したプログレスバーについての記事を投稿しましたが、今回は.NETを使用したプログレスバーとなります。

<今回の完成品>


※画像は、処理が終了したところ。(バーが全て埋まったところ)

それではスクリプトを記述します。

2016-03-02

PowerShellでユーザーフォームを作る - コンテキストメニュー編 -

 PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - コンテキストメニュー編 -」です。

コンテキストメニューとは、ショートカットメニューとも呼ばれており、フォーム上のアイテム(ボタンなど)をクリックしたときなどにポップアップ表示されるメニューのことを言います。


<今回の完成品>


それではスクリプトを記述します。

2016-03-01

[PowerShell] スクリプトファイルの実行方法について

今回は「コンソール画面を出さずにスクリプトファイルを実行する方法」をご紹介します。

その方法とは、バッチファイルを下記のように記述するだけです。
powershell -WindowStyle Hidden -command "C:\Powershell\hoge.ps1"
上記一文をテキストファイルに貼り付け、拡張子をbatで保存すればできあがりです。

作成したバッチファイルをダブルクリックすれば、一瞬だけコンソール画面が表示されますが、すぐ非表示になり、スクリプトファイルが実行されます。

このWindowsStyleは次の4つから選択することができます。
  ・Normal (通常)
  ・Minimized (最小化)
  ・Maximized (最大化)
  ・Hidden (非表示)

今回はスクリプトファイルのパスをフルパスで記述していますが、バッチファイルとスクリプトファイルが同階層(同じフォルダ)にある場合は、次のようにパスを省略することができます。

2016-02-29

PowerShellでユーザーフォームを作る - タブコントロール編

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - タブコントロール編 -」です。

タブをググると次の検索結果が出てきました。

「タブ」とは、コンピュータのディスプレイ上に表示されている1つのウィンドウの中で、複数の画面を切り替えて使用する際の。それぞれの見出しのことです。」

1つのフォーム内に複数の機能を付けたいときにこのタブを使用すると見栄えがよくなり、使い勝手が向上します。

<今回の完成品>


「タブ1を選択した場合」の画像と「タブ2を選択した場合」の画像を表示しています。

それではスクリプトを記述します。

2016-02-18

[PowerShell] KeyDownイベントを設定する

今回は、キーボードで何らかのキーを押したときに発生するKeyDownイベントの記述方法をご紹介致します。

マウスを押したときに発生するイベントについては、過去記事をご覧ください。
   参照 → http://letspowershell.blogspot.jp/2015/09/powershell_21.html


早速スクリプトを記述致します。

なお、今回はフォーム上にあるテキストボックス$Textboxに、KeyDownイベントを設定するという想定で、KeyDownイベント部分のみを記述し、その他の部分は省略していますのでご注意ください。
# KeyDownイベントの記述方法
$Event = {
  $PushKey = $_.KeyCode
  [System.Windows.Forms.MessageBox]::Show("押されたキーは:${PushKey}です", "結果")
}
$Textbox.Add_KeyDown($Event)

それでは解説していきます。