スナップインクラスの作成
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 : 便利なマイコマンドレット
表示された結果を見ると分かるように、最初に実装したプロパティの値が出力されます。