PowerShellは非常に堅牢なスクリプト言語です。しかし、その潜在能力を引き出すには、適切なモジュールのインポート方法を知っている必要があります。
このチュートリアルでは、プロのようにPowerShellモジュールをインポートするために必要なすべてを学びます。cmdlet、パラメータ、モジュールの深い理解を持つことで、以前よりも速く、効率的で効果的なスクリプトを作成できます。
PowerShellスキルを強化し、スクリプトのゲームを新しい高みに押し上げるために読み続けてください!
前提条件
このチュートリアルは実演形式で行われます。続けるには、PowerShellがインストールされたシステムが必要です。このチュートリアルでは、Windows 10とPowerShell 5.1を例に挙げていますが、同じコマンドはほとんどのWindowsバージョンとPowerShellで動作するはずです。
単一のモジュールのインポート
PowerShellモジュールには、PowerShellスクリプトで使用できる事前に構築されたコードが含まれており、ゼロからではなく事前に構築されたコードを活用します。
Import-Module
コマンドレットはPowerShellでモジュールをインポートする主要な方法です。単一のモジュールをインポートするのは、このチュートリアルで最初に学ぶ基本的な使用法の一つです。
管理者としてPowerShellを開き、以下のImport-Module
コマンドを実行してPSDiagnostics
モジュールを検索しメモリに読み込みます。成功した場合、モジュールがインポートされますが、コマンドは出力を生成しません。
Install-Moduleコマンドレットを使用してオンラインリポジトリからモジュールをインポートすることは、可能な場合には強くお勧めです。このコマンドレットは依存関係とバージョン管理を自動で処理します。
モジュールをインポートしたら、モジュールのコマンドレットや機能を使用して、問題の診断やトラブルシューティングを行うことができます。Enable-PSTrace
コマンドレットは、PSDiagnosticsモジュールによって提供されるコマンドレットの一例です。これにより、PowerShellで診断トレースを有効にできます。
次に、以下のEnable-PSTrace
コマンドを実行して、診断トレースを行い、指定した-TraceFilePath
(C:\\MyTrace.log
)に結果を保存します。このコマンドは、結果をファイルにコミットするため、コンソールに出力しません。
一部のモジュールでは、使用する前に追加の設定やセットアップが必要な場合があります。モジュールに付属するドキュメントを読んで、前提条件や要件を理解してください。
複数のモジュールを一度にインポートする
単一のモジュールをインポートするのは問題ありません。しかし、頻繁に複数のモジュールを一度にインポートする必要がある場合、そのタスクもImport-Module
コマンドレットの機能範囲内です。
複数のモジュールをインポートすることは、PowerShellで時間と労力を節約する素晴らしい方法です。しかし、具体的にはどのように行うのでしょうか? モジュール名をカンマで区切って指定します。
以下のコマンドを実行して、複数のモジュール(Dism、PowerShellGet、PSReadline
)を検索し、メモリにロードします。単一のモジュールをインポートする場合と同様に、このコマンドは出力を提供しません。
モジュールのインポート詳細の表示
前述のように、モジュールのインポートが成功した場合でも、実際にインポートされたかどうかについては疑問を抱くかもしれません。
-Verbose
パラメータは、Import-Module
コマンドレットを含む多くのPowerShellのコマンドレットや関数で使用できる便利なオプションです。このパラメータを使用すると、PowerShellはコマンドが実行されているときに詳細な情報を表示します。その結果、トラブルシューティングやデバッグに役立つ貴重なフィードバックを得ることができます。
以下は、SmbShare
モジュールをインポートするためのコマンドです。モジュールのインポートの詳細を表示するには、-Verbose
パラメータを追加してください。
以下のように、-Verbose
パラメータはモジュールファイルの読み込みやモジュールからインポートされるさまざまな関数に関する詳細な情報を提供します。この情報はモジュールの内部動作を理解するのに役立ちます。

SmbShare
モジュールでは、Windowsマシン上のSMB共有を管理するためのcmdletが提供されています。これには、New-SmbShare
(新しい共有を作成する)およびRemove-SmbShare
(既存の共有を削除する)などのcmdletが含まれます。
同じセッションにモジュールを再インポートするImport-Module
コマンドに-Force
パラメータを追加してください。
この-Force
パラメーターを使用すると、PowerShellセッションを閉じて再度開く必要なく、モジュールが提供するコマンドレットや関数を引き続き使用できます。
モジュールを再インポートする一般的なユースケースの1つは、モジュールの開発や変更を行っている場合です。変更を最終確定する前に、モジュールを現在のセッションに再インポートして、これらの変更をテストできます。
次のコマンドを実行して、-Force
PowerShellを使用して、SmbShare
モジュールを元の場所から削除し、再インポートします。
-Prefix
パラメーターを使用すると、モジュールからインポートされたコマンドレットや関数に接頭辞を指定できます。この場合、すべてのインポートされたコマンドレットと関数はNew
で始まります。このパラメーターは、セッション内の既存のコマンドレットや関数との競合を回避するのに役立ちます。
例えば、元のモジュールのGet-SmbShare
コマンドレットは、再インポートされたモジュールではGet-NewSmbShare
になります。
今、以下のGet-Commandを実行して、選択したSmbShareモジュールによって提供されるすべてのコマンドレットと関数のリストを取得します (Select-Object)。
以下では、SmbShareモジュールのcmdletの名前には、接頭辞Newが追加されました。この出力は、モジュールが正常に再インポートされたことを確認しています。

手動で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パッケージにも適用されます。

3. ダウンロードした後、次のコードを実行して、ダウンロードした.nupkgファイルをアンブロックします。ファイルパスをダウンロードしたパッケージのパスに変更してください。
パッケージのブロック解除が必要です。なぜなら、PowerShellはセキュリティ対策として、インターネットからダウンロードされたファイルの実行を許可しない場合があり、潜在的に有害なスクリプトの実行を防止するためです。
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 |

6. 抽出したフォルダにより説明的な名前(例:az.automation)を付け直し、エラーが発生する可能性を避けてください。すべての文字を小文字にし、名前に特殊文字を使用しないようにしてください。
7. 次に、以下の$env:PSModulePath
コマンドを実行して、現在のシェルモジュールのパスを確認してください。このコマンドは、システム上のすべてのデフォルトモジュールパスのリストを返します。PowerShellは、スクリプトやコマンドでモジュール名が指定された場合に、これらのパスを自動的に検索してモジュールを読み込みます。
パスをメモしておくと、次のステップで使用する必要があります。

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をモジュールの実際の名前で置き換えてください。

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

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

結論
結合された機能やグループ化されたコードを使用すると、PowerShellモジュールはゲームチェンジャーとなります。そして、このチュートリアルでは、NuGetパッケージから手動でモジュールをインポートする方法を含む、セッションにPowerShellモジュールをインポートするさまざまな方法を学びました。また、インポートプロセスを制御するさまざまなパラメータに触れました。
マスタリングすることで、これらのテクニックを習得することで、自動化スクリプトを強化するためにモジュールを簡単にインポートして使用できます。しかし、学習はそこで止まる必要はありません。次のレベルに進んで、PowerShellモジュールの管理スキルを学んでみるのはどうでしょうか? モジュールメンバーをエクスポート
Source:
https://adamtheautomator.com/import-powershell-modules/