SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Power Shellを拡張するコマンドレットの作成

Windows PowerShell 独自コマンドレットの開発

スナップインの開発とPowerShellへの登録

  • X ポスト
  • このエントリーをはてなブックマークに追加

スナップインクラスの作成

 PSスナップインを作成する場合は、1つのクラスライブラリに1つのスナップインクラスが必要です。スナップインクラスはPowerShellへのインストールとスナップイン登録を行うため機能を提供します。

 はじめに、プロジェクトに「MySnapin.vb」という名前で新規クラスを追加します。
スナップインクラスはPSSnapinクラスの派生クラスとして作成する必要があります。また、属性としてRunInstallerが必要です。

 最初に名前空間System.Management.Automation(PSSnapinクラス用)とSystem.ComponentModel(RunInstaller属性用)をインポートします。

Imports System.Management.Automation
Imports System.ComponentModel

 次にMySnapinクラスに属性<RunInstaller(True)> _を記述し(「Public Class MySnapin」の手前の行に記述)、Inherits PSSnapin(「Public Class MySnapin」の後)と記述して[Enter]を入力すると、自動で下記の3つのプロパティが挿入されます。

 各プロパティを実装し、入力を終えたコードを下記に示します。これらのプロパティは、作成したスナップインをGet-PSSnapinコマンドレットで確認したときに表示される項目となります。  

Imports System.Management.Automation
Imports System.ComponentModel
<RunInstaller(True)> _
Public Class MySnapin
    Inherits PSSnapIn
    ''' <summary>

    ''' スナップインの説明文
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides ReadOnly Property Description() As String
        Get
            Return "便利なマイコマンドレット"
        End Get
    End Property
    ''' <summary>
    ''' スナップイン名称
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides ReadOnly Property Name() As String
        Get
            Return "My.PowerShell.Cmdlets"
        End Get
    End Property
    ''' <summary>
    ''' スナップイン作成者
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides ReadOnly Property Vendor() As String
        Get
            Return "CodeZine"
        End Get
    End Property
End Class

ビルド

 ここまでをビルドしてdllファイルを作成します。メニューから[ビルド]-[ソリューションのビルド]を実行すると、「My.PowerShell.Cmdlets.dll」というファイルが作成されます。

 作成されたファイルはどこに置いても問題ないのですが、できるだけ決めておくことをおすすめします。今回は「C:\Windows\System32\WindowsPowerShell\v1.0」に「MySnapin」というフォルダを作成してそこに配置することにします。

インストール

 スナップインを作成したら「InstallUtil.exe」というインストーラツールを使用してインストールを行う必要があります。

 [スタート]-[プログラム]-[Microsoft Visual Studio 2008]-[Visual Studio Tools]-[Visual Studio 2008 コマンドプロンプト]を起動します(Windows Vistaを使用している場合は「管理者として実行」を行ってください。Visual Studio 2005をお使いの方は[Visual Studio 2005 コマンドプロンプト]を使用してください)。

 InstallUtil.exeは、

InstallUtil.exe "インストールするファイルのパス"

と入力して使用します。

 インストールが正常に完了すると、「トランザクションインストールが完了しました」と表示されます。

 インストールが成功したかどうかを確認するには、PowerShellコンソール上で

Get-PSSnapin -Registered

 と入力します。インストールが成功している場合は、一覧にMy.PowerShell.Cmdletsスナップインが表示されます。

 また、ソースコードを修正しスナップインを再作成した場合は、再度インストールする必要がありますが、再インストールは、一度アンインストールしてから行う必要があります。

 アンインストールするには

InstallUtil.exe /u "アンインストールするファイルのパス"

 と入力します。アンインストールはPowerShellを終了させてから行ってください。

コラム

 実は下記のようにするとPowerShellからもInstallUtil.exeを使用することができます(ただしWindows Vistaでは管理者権限でPowerShellを起動した上で実行する必要があります)。

PS > &"$env:windir/Microsoft.NET/FrameWork/V2.0.50727/InstallUtil.exe" "dllのパス"

 しかし、毎回このように入力するのは大変なので、下記のようなスクリプトを作成してみました(「Install-Snapin.ps1」として保存してください)。

Param([String]$Path, [String]$Option)
&"$env:windir/Microsoft.NET/FrameWork/V2.0.50727/InstallUtil.exe" $Option $Path
 

 上記のスクリプトは、自作スナップインをインストールする場合は

PS > ./Install-Snapin "インストールするファイルのパス"

 アンインストールする場合は

PS > ./Install-Snapin "アンインストールするファイルのパス" /u

 と入力して使用します。そのほか、InstallUtil.exeで使用可能なオプションが指定可能となっていますのでぜひお試しください。

スナップインの登録

 PowerShell上で自作スナップインを登録するにはAdd-PSSnapinコマンドレットを実行する必要があります。スナップインを登録するには

Add-PSSnapin "スナップイン名称"

 と入力します。スナップイン名称にはスナップインクラスに実装したNameプロパティが返す値を指定します(今回は、My.PowerShell.Cmdletsです)。

 スナップインの登録は、PowerShellを起動するごとに行う必要があります。profile.ps1に登録することでこの手間を省くことができます。

 スナップインが登録されたかを確認するには、

Get-PSSnapin "スナップイン名称"

とします。

PS > Get-PSSnapin My.PowerShell.Cmdlets
Name        : My.PowerShell.Cmdlets
PSVersion   : 1.0
Description : 便利なマイコマンドレット

 表示された結果を見ると分かるように、最初に実装したプロパティの値が出力されます。

次のページ
自作コマンドレットの実行

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Power Shellを拡張するコマンドレットの作成連載記事一覧
この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3191 2008/11/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング