PowerShellコマンドを実行して、「指定された名前 ‘cmdlet の名前として認識されません」という恐ろしいエラーメッセージを受け取ったことはありますか? ここでポイントです:問題は単純にモジュールが欠落しているかインポートされていないことがあります。モダンなPowerShellバージョンでも、モジュールの動作を理解することは、これらの問題を診断して修正するための鍵となります。
良いニュースは? このガイドでは、PowerShellが現在インポートしているモジュールを確認する方法から、モジュールをインポート、削除、再インポートする方法をマスターする方法まで網羅しています。最後まで行けば、予期しないエラーのトラブルシューティングやカスタムモジュールの作業において、PowerShellモジュールをシームレスに管理するスキルが向上します。
さあ、PowerShellモジュールに飛び込んで、自信を持ってワークフローを最適化するのに役立てましょう!
インポートされたモジュールの確認
モジュールが適切に読み込まれていないと、PowerShellコマンドは難解なエラーメッセージで失敗することがあります。たとえば、ActiveDirectoryモジュールを最初にインポートせずにGet-ADUserを実行しようとすると、「コマンドが見つかりません」というエラーが発生します。同様に、Azureコマンドを使用しようとするには、セッションでAzモジュールが存在している必要があります。
PowerShellは関連するモジュールをインポートして、コマンドが期待どおりに動作し、そのコマンドを利用できるようにする必要があります。
現在インポートされているモジュールを表示するには、次のコマンドを使用します:
Get-Module
Get-Moduleを実行すると、次のような出力が表示されます:
ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption...} Binary 1.0.0.1 SmbShare {Get-SmbShare, Set-SmbShare, Remove-SmbShare...}
これにより、PowerShellセッションで現在読み込まれているすべてのモジュールのリストが表示され、そのタイプ(マニフェスト、スクリプト、またはバイナリ)、バージョン番号、モジュール名、および提供されるコマンドの概要が表示されます。 ExportedCommands列には、各モジュールから利用可能なcmdletが表示されます。
次に、インポートできるモジュールからコマンドを調べます。
Get-Module -Name SmbShare -ListAvailable | Select exportedcommands
このコマンドを実行すると、SmbShareモジュールで利用可能なすべてのコマンドがリストされた出力が表示されます。例えば:
ExportedCommands ---------------- {Get-SmbShare, New-SmbShare, Remove-SmbShare, Set-SmbShare, Get-SmbShareAccess, Grant-SmbShareAccess, Block-SmbShareAccess, Revoke-SmbShareAccess, Get-SmbMapping}
この出力には、SmbShareモジュールから使用できるすべてのcmdletが表示されます。各コマンドは、SMB共有を管理するための特定の目的に役立ちます:
- Get-SmbShare:システム上のすべてのSMB共有をリストします
- New-SmbShare:新しいSMB共有を作成します
- Remove-SmbShare:既存のSMB共有を削除します
- Set-SmbShare:既存の共有のプロパティを変更します
利用可能なコマンドを理解することで、タスクに適したツールを選択できます。他のモジュールの機能を調査するために同様のコマンドを使用できます。
モジュールの自動インポート
PowerShellが動的にモジュールを処理する方法を確認するために、次に示す例をご覧ください。動的モジュールの読み込みが表示されます:
PS> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler...} PS> Get-SmbShare PS> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler...} Binary 1.0.0.1 SmbShare {Get-SmbShare, Set-SmbShare...}
上記のように、Get-SmbShareを実行すると、PowerShellは自動的にSmbShareモジュールをインポートします。このモジュールは、コマンドを実行した後にリストに表示されます。
モジュールの削除と再インポート
新しい構成をテストしたり競合を解消したりする際に、モジュールをメモリからクリアする必要があるかもしれません。その場合でも心配いりません。PowerShellを使用して、モジュールをアンインストールせずにメモリから削除し、必要に応じてセッションをリセットまたはリフレッシュできます。
モジュールをメモリから削除するには:
Remove-Module -Name SmbShare
Remove-Module
コマンドは、モジュールをメモリからクリアしますが、システムからアンインストールしません。モジュールを削除することは日常的には稀ですが、特定のシナリオには便利です。
モジュールを手動で再インポートするには:
Import-Module -Name SmbShare
トラブルシューティングやカスタム環境で作業する際に、手動インポートは役立ちます。
変更後のモジュールの再インポート
開発中のモジュールで作業する際に、変更がすぐに反映されない状況に遭遇することがあります。古いデータや構成がまだモジュールにロードされている可能性があり、このような動作を引き起こします。
モジュールを再インポートすることで、PowerShellが最新バージョンを使用することが保証されます。開発中のモジュールを変更した場合は、再インポートする必要があります。
Remove-Module
とImport-Module
の両方を使用するか、Force
パラメータを使用してプロセスを簡略化できます:
Import-Module -Name SmbShare -Force
Force
パラメータを使用すると、モジュールを一度にアンロードして再ロードするため、開発やテストのワークフローに最適です。
結論
このガイドでは、PowerShellモジュールの管理方法について学びました—インポートの確認とインポート、削除、再インポートモジュール。また、PowerShellがどのように動的にモジュールをインポートし、手動でトラブルシューティングやテストのためにロードを制御する方法についても探求しました。
これらのスキルを活用して、スクリプトでカスタムモジュールを実験してみてください。モジュール開発を探求し、変更が反映されるようにForce
パラメータを使用してください。
PowerShellモジュールを使用して、トラブルシューティング、スクリプトの開発、および全体的なPowerShellワークフローを向上させましょう!
Source:
https://adamtheautomator.com/powershell-modules-guide-2/