12月 2011 - Posts

PowerShell で Open XML ドキュメントを作成する

この投稿は PowerShell Advent Calandar 2011 の15日目の記事です。

前回の投稿 PowerShell でインストール済みのソフトウェアを調査する では、Windows にインストールされているソフトウェアのリストを PowerShell を利用して CSV 形式のファイルへ出力をしました。

今回は、処理の結果を Office Open XML 形式のドキュメントに出力する方法を紹介します。

準備

PowerTools for Open XML を利用すると、Open XML 形式のドキュメントを PowerShell から簡単に扱うことができます。

PowerTools for Open XML は .NET のソースコードとして配布されるため、バイナリーを得るために各自でコンパイルを行う必要があります。

  1. Open XML SDK 2.0 for Microsoft Office をインストール
    PowerTools for Open XML は Open XML SDK 2.0 をベースに構築されるため、予めこの SDK をインストールしておく必要があります。
  2. PowerTools for Open XML をダウンロード
  3. PowerTools for Open XML をコンパイル
  4. System32\WindowsPowerShell\v1.0\Modules フォルダーに “OpenXmlPowerTools” フォルダーを作成
    1
  5. コンパイルして出来上がった “OpenXmlPowerTools.dll” と “OpenXmlPowerTools.dll-Help.xml” を 4. で作成した “OpenXmlPowerTools” フォルダーにコピー
    3
  6. (これが初めての外部コマンドレットの実行であれば)PowerTools for Open XML が提供するコマンドレットの実行を許可するよう Set-ExecutionPolicy Unrestricted を実行
    2
  7. PowerTools for Open XML のモジュールをロードするため Import-Module OpenXmlPowerTools を実行
    4

コード例

Get-WmiObject -Class Win32_product –ComputerName “PC5” | Select-Object Name, Vendor | Export-OpenXmlSpreadsheet -OutputPath c:\InstalledSoftwareList.xlsx

5

解説

Get-WmiObject -Class Win32_product –ComputerName “PC5” | Select-Object Name, Vendor

この部分の解説は前回の記事 PowerShell でインストール済みのソフトウェアを調査する をご参照ください。

Export-OpenXmlSpreadsheet -OutputPath c:\InstalledSoftwareList.xlsx

PowerTools for Open XML が提供する Export-OpenXmlSpreadsheet コマンドレットにより、渡されたプロパティをスプレッドシート、つまり Excel 形式で出力します。
–OutputPath オプションで出力パスを指定できます。

8

出力されたファイルの拡張子を .zip に変更して内部を調査してみると、Open XML 形式となっていることを確認できます。

9

以上です。

Posted by Ryosuke Uemoto

PowerShell でインストール済みのソフトウェアを調査する

この投稿は PowerShell Advent Calandar 2011 の5日目の記事です。

Windows にインストールされているソフトウェアを調査する際に、最も手軽な手段は コントロールパネル –> プログラム –> プログラムと機能 の利用です(Windows 7 の場合)。

1

しかし、この方法では毎度毎度目視による確認が必要となり、作業の省力化は実現できません。

規模の大きな組織であれば、こういったソフトウェア資産管理の自動化・効率化を目的に「資産管理システム」の導入を検討します。
ただ、資産管理システムは高価であることが多く、中小の組織には導入のハードルが高いのも事実です。

そこで、PowerShell を利用して Windows にインストール済みのソフトウェアを再利用しやすいかたちで取得する方法を紹介します。

コード例

Get-WmiObject -Class Win32_product –ComputerName “PC1” | Select-Object Name, Vendor | Export-Csv c:\InstalledSoftwareList.csv -encoding Default –NoTypeInformation

2

解説

Get-WmiObject -Class Win32_product –ComputerName “PC1”

PC1 というコンピュータ名の Windows から、Windows インストーラによってインストールされたソフトウェアに関する情報を取得します。
PC1 では WMI Windows インストーラ プロバイダ が有効になっている必要があります。

Select-Object Name, Vendor

Win32_Product クラスは多くのプロパティを含みますが、Select-Object コマンドレットにより Name プロパティと Vendor プロパティを取得します。

Export-Csv c:\InstalledSoftwareList.csv -encoding Default –NoTypeInformation

Export-Csv コマンドレットにより、取得した Name プロパティと Vendor プロパティとを csv 形式で出力します。
その際、-encoding Default オプションにより、文字エンコーディングがシステム デフォルトとなり、文字化けを防止します。
また、-NoTypeInformation オプションにより、 csv ファイルの1行目に .NET Framework の型名が出力されるのを抑止します。

 

以上です。

Posted by Ryosuke Uemoto