PowerShellモジュールのインポート方法

PowerShellは非常に堅牢なスクリプト言語です。しかし、その潜在能力を引き出すには、適切なモジュールのインポート方法を知っている必要があります。

このチュートリアルでは、プロのようにPowerShellモジュールをインポートするために必要なすべてを学びます。cmdlet、パラメータ、モジュールの深い理解を持つことで、以前よりも速く、効率的で効果的なスクリプトを作成できます。

PowerShellスキルを強化し、スクリプトのゲームを新しい高みに押し上げるために読み続けてください!

前提条件

このチュートリアルは実演形式で行われます。続けるには、PowerShellがインストールされたシステムが必要です。このチュートリアルでは、Windows 10とPowerShell 5.1を例に挙げていますが、同じコマンドはほとんどのWindowsバージョンとPowerShellで動作するはずです。

単一のモジュールのインポート

PowerShellモジュールには、PowerShellスクリプトで使用できる事前に構築されたコードが含まれており、ゼロからではなく事前に構築されたコードを活用します。

Import-ModuleコマンドレットはPowerShellでモジュールをインポートする主要な方法です。単一のモジュールをインポートするのは、このチュートリアルで最初に学ぶ基本的な使用法の一つです。

管理者としてPowerShellを開き、以下のImport-Moduleコマンドを実行してPSDiagnosticsモジュールを検索しメモリに読み込みます。成功した場合、モジュールがインポートされますが、コマンドは出力を生成しません。

Import-Module PSDiagnostics

Install-Moduleコマンドレットを使用してオンラインリポジトリからモジュールをインポートすることは、可能な場合には強くお勧めです。このコマンドレットは依存関係とバージョン管理を自動で処理します。

モジュールをインポートしたら、モジュールのコマンドレットや機能を使用して、問題の診断やトラブルシューティングを行うことができます。Enable-PSTrace コマンドレットは、PSDiagnosticsモジュールによって提供されるコマンドレットの一例です。これにより、PowerShellで診断トレースを有効にできます。

次に、以下のEnable-PSTraceコマンドを実行して、診断トレースを行い、指定した-TraceFilePathC:\\MyTrace.log)に結果を保存します。このコマンドは、結果をファイルにコミットするため、コンソールに出力しません。

Enable-PSTrace -TraceLevel 1 -TraceFilePath C:\MyTrace.log

一部のモジュールでは、使用する前に追加の設定やセットアップが必要な場合があります。モジュールに付属するドキュメントを読んで、前提条件や要件を理解してください。

複数のモジュールを一度にインポートする

単一のモジュールをインポートするのは問題ありません。しかし、頻繁に複数のモジュールを一度にインポートする必要がある場合、そのタスクもImport-Moduleコマンドレットの機能範囲内です。

複数のモジュールをインポートすることは、PowerShellで時間と労力を節約する素晴らしい方法です。しかし、具体的にはどのように行うのでしょうか? モジュール名をカンマで区切って指定します。

以下のコマンドを実行して、複数のモジュール(DismPowerShellGetPSReadline)を検索し、メモリにロードします。単一のモジュールをインポートする場合と同様に、このコマンドは出力を提供しません。

Import-Module Dism, PowerShellGet, PSReadline

モジュールのインポート詳細の表示

前述のように、モジュールのインポートが成功した場合でも、実際にインポートされたかどうかについては疑問を抱くかもしれません。

-Verboseパラメータは、Import-Moduleコマンドレットを含む多くのPowerShellのコマンドレットや関数で使用できる便利なオプションです。このパラメータを使用すると、PowerShellはコマンドが実行されているときに詳細な情報を表示します。その結果、トラブルシューティングやデバッグに役立つ貴重なフィードバックを得ることができます。

Import-Module SmbShare -Verbose

以下は、SmbShareモジュールをインポートするためのコマンドです。モジュールのインポートの詳細を表示するには、-Verboseパラメータを追加してください。

以下のように、-Verboseパラメータはモジュールファイルの読み込みやモジュールからインポートされるさまざまな関数に関する詳細な情報を提供します。この情報はモジュールの内部動作を理解するのに役立ちます。

Displaying module import details

SmbShareモジュールでは、Windowsマシン上のSMB共有を管理するためのcmdletが提供されています。これには、New-SmbShare(新しい共有を作成する)およびRemove-SmbShare(既存の共有を削除する)などのcmdletが含まれます。

同じセッションにモジュールを再インポートするモジュールが不具合を起こしているか、最新バージョンのモジュールを使用していることを確認したい場合は、Import-Moduleコマンドに-Forceパラメータを追加してください。

この-Forceパラメーターを使用すると、PowerShellセッションを閉じて再度開く必要なく、モジュールが提供するコマンドレットや関数を引き続き使用できます。

モジュールを再インポートする一般的なユースケースの1つは、モジュールの開発や変更を行っている場合です。変更を最終確定する前に、モジュールを現在のセッションに再インポートして、これらの変更をテストできます。

次のコマンドを実行して、-Force PowerShellを使用して、SmbShareモジュールを元の場所から削除し、再インポートします。

-Prefixパラメーターを使用すると、モジュールからインポートされたコマンドレットや関数に接頭辞を指定できます。この場合、すべてのインポートされたコマンドレットと関数はNewで始まります。このパラメーターは、セッション内の既存のコマンドレットや関数との競合を回避するのに役立ちます。

例えば、元のモジュールのGet-SmbShareコマンドレットは、再インポートされたモジュールではGet-NewSmbShareになります。

Import-Module SmbShare -Force -Prefix New

今、以下のGet-Commandを実行して、選択したSmbShareモジュールによって提供されるすべてのコマンドレットと関数のリストを取得します (Select-Object)。

Get-Command -Module SmbShare | Select-Object Name

以下では、SmbShareモジュールのcmdletの名前には、接頭辞Newが追加されました。この出力は、モジュールが正常に再インポートされたことを確認しています。

Verifying the SmbShare module has been reimported

手動でPowerShellモジュールをNuGetパッケージからインポートする

これまで、PowerShell Galleryからモジュールを正常にインポートしてきました。しかし、探しているモジュールがそこにない場合はどうなるでしょうか?

NuGetパッケージからPowerShellモジュールを手動でインストールおよびインポートできます。PowerShellのコンテキストでは、NuGetパッケージは、PowerShellモジュールとその動作に必要な依存モジュールやライブラリを含むファイルのコレクションです。

NuGetパッケージからモジュールをインポートするには、次の手順に従ってパッケージを手動でダウンロード、展開、およびインストールする必要があります:

1. Az.AutomationモジュールのAzure PowerShell Galleryページに移動します。

2. 次に、Manual Downloadタブをクリックして、Download the raw nupkg fileをクリックしてパッケージをダウンロードします。このチュートリアルでは、Azure PowerShellギャラリーからAz.Automation 1.9.1モジュールを例として使用していますが、同じ手順が他のNuGetパッケージにも適用されます。

Downloading the raw NuGet package (nupkg) file

3. ダウンロードした後、次のコードを実行して、ダウンロードした.nupkgファイルをアンブロックします。ファイルパスをダウンロードしたパッケージのパスに変更してください。

パッケージのブロック解除が必要です。なぜなら、PowerShellはセキュリティ対策として、インターネットからダウンロードされたファイルの実行を許可しない場合があり、潜在的に有害なスクリプトの実行を防止するためです。

Unblock-File -Path C:\PSModules\az.automation.1.9.1.nupkg

4. 今、ダウンロードした.nupkgファイルをローカルマシンのフォルダに解凍してください。パッケージを解凍するために、7-zipやWinRARなどの圧縮/解凍ツールが必要な場合があります。NuGetパッケージは、モジュールを構成するファイルのコレクションを含んだZIPアーカイブです。

5. 解凍されたフォルダから以下のコンテンツを削除してください。

NuGetパッケージの解凍コンテンツには、手動でモジュールをインストールするために必要ないメタデータやファイルが含まれています。

Name Type
_rels Folder
Package Folder
[Content_Types].xml XML File
Az.Automation.nuspec XML Manifest File
Deleting unnecessary contents from the extracted NuGet package folder

6. 抽出したフォルダにより説明的な名前(例:az.automation)を付け直し、エラーが発生する可能性を避けてください。すべての文字を小文字にし、名前に特殊文字を使用しないようにしてください。

7. 次に、以下の$env:PSModulePathコマンドを実行して、現在のシェルモジュールのパスを確認してください。このコマンドは、システム上のすべてのデフォルトモジュールパスのリストを返します。PowerShellは、スクリプトやコマンドでモジュール名が指定された場合に、これらのパスを自動的に検索してモジュールを読み込みます。

$env:PSModulePath

パスをメモしておくと、次のステップで使用する必要があります。

Finding out where your modules’ paths are located

8. 新しく名前を付けたフォルダ(az.automation)を、ステップ7でメモしたディレクトリの1つにコピーします。これにより、モジュールのスコープ(特定のユーザーまたはすべてのユーザー)が定義されます。

Path Function
C:\Users\admin\Documents\WindowsPowerShell\Modules Makes the module available for the specific user account (admin). This tutorial uses this location as an example.
C:\Program Files\WindowsPowerShell\Modules Makes the module available for all user accounts on your local machine.

9. 今度は、以下のコマンドを実行してモジュール(az.automation)をPowerShellセッションにインストールおよびインポートします。az.automationをモジュールの実際の名前で置き換えてください。

Import-Module -Name az.automation -Verbose
Installing and importing a module from a NuGet package

10. 最後に、次のGet-Moduleコマンドを実行して、モジュール(az.automation)が正常にインポートされたかどうかを確認します。

Get-Module -Name az.automation
Verifying the module has been imported successfully

自動検出に頼りたくない場合は、モジュールをインポートする際に正確なファイルの場所(C:\az.automation)を指定してください。

Import-Module -Name C:\az.automation -Verbose
Specifying the exact file location when importing a module

結論

結合された機能やグループ化されたコードを使用すると、PowerShellモジュールはゲームチェンジャーとなります。そして、このチュートリアルでは、NuGetパッケージから手動でモジュールをインポートする方法を含む、セッションにPowerShellモジュールをインポートするさまざまな方法を学びました。また、インポートプロセスを制御するさまざまなパラメータに触れました。

マスタリングすることで、これらのテクニックを習得することで、自動化スクリプトを強化するためにモジュールを簡単にインポートして使用できます。しかし、学習はそこで止まる必要はありません。次のレベルに進んで、PowerShellモジュールの管理スキルを学んでみるのはどうでしょうか? モジュールメンバーをエクスポート

Source:
https://adamtheautomator.com/import-powershell-modules/